Импорт файла XLSX из ежемесячной электронной почты (в Gmail) в указанный Google Sheet - PullRequest
1 голос
/ 03 апреля 2019

Я регулярно получаю файл XLSX от нашего клиента и хотел бы автоматизировать процесс его импорта из Gmail (он автоматически помечается) в Google Sheets.До сих пор мне удавалось заставить его работать для файлов CSV, но файлы XLSX кажутся более хитрыми.Может кто-нибудь помочь настроить этот код, который у меня есть для файлов CSV?

function getCSV() 
{
  var thread = GmailApp.getUserLabelByName(‘Reconciliation’).getThreads(0,1);
  var messages = thread[0].getMessages();
  var len = messages.length;
  var message=messages[len-1] //get last message
  var attachments = message.getAttachments(); // Get attachment of first message

  var csv =  attachments[0].getDataAsString();
  var data = Utilities.parseCsv(csv);

  var sheet = SpreadsheetApp.openById("some id").getSheetByName(‘Data’);
  sheet.clearContents();
  var range = sheet.getRange(1, 1, data.length, data[0].length);
  range.setValues(data);
}

1 Ответ

1 голос
/ 04 апреля 2019
  • Вы хотите поместить данные из файла xlsx, прикрепленного к электронному письму, в существующую электронную таблицу.

Если мое понимание верно, как насчет этой модификации?Пожалуйста, подумайте об этом как один из нескольких ответов.

Когда вы используете этот скрипт, пожалуйста, включите Drive API в Advanced Google Services и консоли API.Об этом вы можете узнать по здесь .

Поток измененного скрипта:

  1. Извлечение большого двоичного файла xlsx.
  2. Преобразовать формат xlsx в таблицу Google.
  3. Извлечь значения из преобразованной таблицы.
  4. Удалить преобразованный файл.
  5. Поместить значения на лист Data в существующейЭлектронная таблица.

Модифицированный скрипт:

Пожалуйста, измените следующим образом.

С:
var csv =  attachments[0].getDataAsString();
var data = Utilities.parseCsv(csv);
Кому:
var xlsxBlob = attachments[0]; // Is supposes that attachments[0] is the blob of xlsx file.
var convertedSpreadsheetId = Drive.Files.insert({mimeType: MimeType.GOOGLE_SHEETS}, xlsxBlob).id;
var sheet = SpreadsheetApp.openById(convertedSpreadsheetId).getSheets()[0]; // There is the data in 1st tab.
var data = sheet.getDataRange().getValues();
Drive.Files.remove(convertedSpreadsheetId); // Remove the converted file.

Примечание:

  • В этой модификации предполагается следующее:Если ваша ситуация отличается от следующих пунктов, пожалуйста, измените ее.
    1. attachments[0] является файлом BLOB-объекта xlsx.
    2. О файле xlsx данные, которые вы хотите поместить, находятся на 1-й вкладке.

Ссылка:

Если я неправильно понял ваш вопрос, и это не сработало, яapologzize.

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