Скрипт приложения Google - Как создать файл Excel с несколькими листами и прикрепить его к MailApp? - PullRequest
1 голос
/ 05 января 2020

Я пытаюсь отправить письмо из скрипта приложения Google с файлом листа Google.

На данный момент я могу отправить файл CSV с несколькими файлами, например:

MailApp.sendEmail(
    emailList,
    fileName,
    'content',
    {
        attachments: list_attach,
        name: 'Britag Support'
    });

с list_attach же

[{
  fileName: 'fileName1',
  content: csvTextContent1,
  mimeType:"application//csv"
}, {
  fileName: 'fileName2',
  content: csvTextContent2,
  mimeType:"application//csv"
}]

csvTextContent представляет собой строку типа:

A,B,C\n1,2,3\n4,5,6\n...

Это 2 прикрепленных файла к письму. Теперь я хочу объединить 2 вышеуказанных файла в один файл Excel с 2 листами. Как мне это сделать? Пожалуйста, помогите мне. спасибо.

1 Ответ

1 голос
/ 06 января 2020
  • Вы хотите преобразовать 2 файла CSV в один файл Excel и отправить электронное письмо, включив преобразованный файл Excel в качестве файла вложения.
  • Вы хотите добиться этого с помощью Google Apps Script .

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

Поток:

Ход этого примера сценария следующий:

  1. Извлечение файлов CSV из объект массива list_attach.
  2. Создать новую электронную таблицу как временную.
  3. Поместить данные CSV во временную электронную таблицу путем анализа данных CSV.
  4. Экспортировать временную таблицу Электронная таблица как блоб формата Excel.
  5. Удаление временной таблицы. В этом случае он перемещается в поле tra sh.
  6. Отправка электронного письма, включающего экспортированные данные Excel.

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

Когда ваш Скрипт изменен, пожалуйста, измените его следующим образом.

С:
MailApp.sendEmail(
    emailList,
    fileName,
    'content',
    {
        attachments: list_attach,
        name: 'Britag Support'
    });
Кому:
// --- I added blow script
var tempSpreadsheeet = SpreadsheetApp.create("temp");
for (var i = 0; i < list_attach.length; i++) {
  var obj = list_attach[i];
  var values = Utilities.parseCsv(obj.content);
  var sheet = i == 0 ? tempSpreadsheeet.getSheets()[0].setName(obj.fileName) : tempSpreadsheeet.insertSheet().setName(obj.fileName);
  sheet.getRange(1, 1, values.length, values[0].length).setValues(values);
}
SpreadsheetApp.flush();
var tempId = tempSpreadsheeet.getId();
var url = "https://docs.google.com/spreadsheets/export?exportFormat=xlsx&id=" + tempId;
var blob = UrlFetchApp.fetch(url, {headers: {authorization: "Bearer " + ScriptApp.getOAuthToken()}}).getBlob();
blob.setName("sampleFilename.xlsx");
list_attach = [blob];
DriveApp.getFileById(tempId).setTrashed(true);
// ---

MailApp.sendEmail(
    emailList,
    fileName,
    'content',
    {
        attachments: list_attach,
        name: 'Britag Support'
    });

Примечание:

  • В приведенном выше модифицированном скрипте он предполагает следующие пункты.
    • csvTextContent1 и csvTextContent2 - данные CSV типа строки.
    • Номера всех столбцов данных CSV одинаковы.

Если указанные выше точки отличаются от ваших фактических данных, можете ли вы указать значения выборки csvTextContent1 и csvTextContent2? По этому я хотел бы изменить его.

Ссылки:

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

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