Как добавить контент CSV или XLS в следующую доступную строку из Gmail в Google Sheets? - PullRequest
2 голосов
/ 31 октября 2019

У меня есть электронное письмо, которое приходит каждый день с приложенным файлом электронной таблицы .xls (иногда CSV). Я хотел бы импортировать этот SS каждый день и добавить новый контент в следующие доступные строки.

Как настроить этот скрипт для выполнения этого действия? Я хотел бы, чтобы этот скрипт добавлял контент на конкретный лист / вкладку. Кроме того, как мне заставить этот скрипт искать конкретную метку вместо основной папки входящих сообщений, из которой нужно извлечь файл?

Ссылка на скрипт: Импорт CSV из вложения Gmail в Google Sheets

function importCSVFromGmail() {

var threads = GmailApp.search("from:Email Address Here");
var messages = threads[0].getMessages();
var message = messages[messages.length - 1];
var attachment = message.getAttachments()[1];

// Is the attachment a CSV file

attachment.setContentType('text/csv'); 
//attachment.setContentTypeFromExtension();

if (attachment.getContentType() === "text/csv") {

var sheet = SpreadsheetApp.getActiveSheet();
var csvData = Utilities.parseCsv(attachment.getDataAsString(), ",");

// Remember to clear the content of the sheet before importing new data
sheet.clearContents().clearFormats();
sheet.getRange(1, 1, csvData.length, csvData[0].length).setValues(csvData);
 }
}

1 Ответ

2 голосов
/ 01 ноября 2019
  • Вы хотите добавить данные 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);
  }
}

Ссылки:

Если я неправильно понял ваш вопрос, и это не было результатомВы хотите, я прошу прощения.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...