- Вы хотите добавить данные CSV и XLSX на конкретную вкладку в активной электронной таблице.
- Вы хотите получать электронные письма с определенной меткой gmail.
- Вы хотите добиться этого с помощью Google Apps Script.
Если мое понимание верно, как насчет этого ответа? Пожалуйста, подумайте об этом как об одном из нескольких ответов.
Точки изменения:
- Данные могут быть непосредственно получены из файла CSV. Но в случае файла XLSX требуется преобразовать его в электронную таблицу Google и извлечь данные из преобразованной электронной таблицы.
- Файл XLSX преобразуется в электронную таблицу Google с файлами: вставка Drive API.
- Чтобы добавить данные на определенную вкладку, в этой модификации я использовал
getSheetByName()
и getLastRow()
. - Чтобы получить электронные письма с определенной меткой, я использовал поисковый запрос
label:###label###
.
Модифицированный скрипт:
Пожалуйста, измените ваш скрипт следующим образом. И прежде чем запускать скрипт, , пожалуйста, включите Drive API в Advanced Google services. . И, пожалуйста, установите имя вкладки на sheetName
. И, пожалуйста, установите поисковый запрос на GmailApp.search("from:###email### label:###label###")
. ###email###
и ###label###
- адрес электронной почты и метка, соответственно.
function importCSVFromGmail() {
var sheetName = "Sheet1"; // Please set the tab name you want to append the data.
var threads = GmailApp.search("from:###email### label:###label###"); // Please set here.
var messages = threads[0].getMessages();
var message = messages[messages.length - 1];
var attachment = message.getAttachments()[1];
// attachment.setContentTypeFromExtension(); // This might be required for your situation.
var data = [];
if (attachment.getContentType() == MimeType.CSV) {
data = Utilities.parseCsv(attachment.getDataAsString(), ",");
} else if (attachment.getContentType() == MimeType.MICROSOFT_EXCEL || attachment.getContentType() == MimeType.MICROSOFT_EXCEL_LEGACY) {
var tempFile = Drive.Files.insert({title: "temp", mimeType: MimeType.GOOGLE_SHEETS}, attachment).id;
data = SpreadsheetApp.openById(tempFile).getSheets()[0].getDataRange().getValues();
Drive.Files.trash(tempFile);
}
if (data.length > 0) {
var sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName(sheetName);
sheet.getRange(sheet.getLastRow() + 1, 1, data.length, data[0].length).setValues(data);
}
}
Ссылки:
Если я неправильно понял ваш вопрос, и это не было результатомВы хотите, я прошу прощения.