Загрузка содержимого Excel-вложения Gmail в Таблицу Google

Рейтинг: 0Ответов: 1Опубликовано: 02.02.2023

Мне на почту Gmail приходит отчет в формате xlsx. Хочу, что-бы он автоматически переносился в Гугл Таблицу в один лист.

Пробую использовать скрипт на Google Apps, yо он не работает.

Может кто подскажет, где там ошибки, при запуске ругается на 9 строчку с ошибкой

ReferenceError: fileInfo is not defined

function importProduct() {
  var requete = "1pdbQ_AoXIVcPtN8CIoVVu84kiX-wp5KA";
  var threads = GmailApp.search(requete);
  for (var i = 0; i < threads.length; i++) {
    var messages = threads[i].getMessages();
    Logger.log(messages);
  }

  const file = Drive.Files.insert(fileInfo, excelFile, { convert: true });
}
function getExcelFile(thread) {
  var messages = thread.getMessages();
  var len = messages.length;
  var message = messages[len - 1];
  var attachments = message.getAttachments();

  var xlsxBlob = attachments[0];
  Logger.log(xlsxBlob.getContentType());
  var convertedSpreadsheetId = Drive.Files.insert(
    { mimeType: MimeType.GOOGLE_SHEETS },
    xlsxBlob
  ).id;
  var filename = xlsxBlob.getName();
  var tabName = filename.substring(13).slice(0, filename.length - 18);

  var sheet = SpreadsheetApp.openById(convertedSpreadsheetId).getSheets()[0];
  var destination = SpreadsheetApp.openById(
    "1lfDEEn1PpTh5dja6VOPvKvMVPPCBA5xgV6uVRemKmcc"
  );
  var sss = destination.getSheetByName("Общий");

  Drive.Files.remove(convertedSpreadsheetId);
  labelName = "1pdbQ_AoXIVcPtN8CIoVVu84kiX-wp5KA";
  deleteForever(labelName);
}

Ответы

▲ 0Принят

Вероятно, что-то такое должно подойти

function saveExcelGmailAttachmentToExistingSheet() {
  const query = "subject:file with excel"; // Поисковый запрос, чтобы найти нужное сообщение с вложением
  const targetBookId = "abcd1234"; // Идентификатор Таблицы, в которую нужно загрузить данные

  const mediaData = GmailApp.search(query)[0]
    .getMessages()[0]
    .getAttachments()[0];

  const resource = {
    title: mediaData.getName(),
    mimetype: mediaData.getContentType(),
    description: "",
  };

  const file = Drive.Files.insert(resource, mediaData, { convert: true });

  const data = SpreadsheetApp.openById(file.id)
    .getSheets()[0]
    .getDataRange()
    .getValues();

  const targetBook = SpreadsheetApp.openById(targetBookId);
  const targetSheet = targetBook.getSheets()[0];
  targetSheet.appendRow([""]);
  targetSheet
    .getRange(targetSheet.getLastRow() + 1, 1, data.length, data[0].length)
    .setValues(data);

  DriveApp.getFileById(file.id).setTrashed(true);
}

Простого метода нет, поэтому приходится загружать Blob и конвертировать его в Таблицу, читать эту Таблицу и записывать результат в требуемую.