Загрузка содержимого Excel-вложения Gmail в Таблицу Google
Мне на почту 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);
}
Ответы (1 шт):
Автор решения: contributorpw
→ Ссылка
Вероятно, что-то такое должно подойти
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 и конвертировать его в Таблицу, читать эту Таблицу и записывать результат в требуемую.