Как извлечь указанные c столбцы из листов Google в Google Do c с помощью Google Script? - PullRequest
0 голосов
/ 29 марта 2020

У меня есть Google Do c с тегом динамических полей, например % Name% -% Дата рождения% , который берет значения из листов Google в столбцах A и B :

Снимок экрана листа

Как видите, значения в первых двух столбцах одинаковы, поэтому для моих тегов "%" проблем нет в Google Do c, потому что он принимает то же значение.
Проблема в других столбцах (C, D, E ...), где значения на листе Google являются переменными.

Как применить в Google сделать c тег, который динамически принимает значение всех этих столбцов со значениями переменной?

Screenshot of the Doc


Результат ожидается:

enter image description here

Кроме того, как я могу установить в скрипте столбцы с фиксированными значениями, например. (желтым цветом) и столбцы со значениями переменных, например. (синим цветом)?

И, в любом случае, скрипт не работает, если я фильтрую электронную таблицу, почему?

enter image description here

1 Ответ

1 голос
/ 30 марта 2020
  • Вы хотите извлечь значения из электронной таблицы и поместить в шаблон документа.
  • В вашей электронной таблице все значения столбцов «A» и «B» одинаковы для всех строк, например john и 25/05/1998.
  • Вы хотите создать один документ Google, заменив заполнитель на значения из электронной таблицы.
    • Заполнитель заключен в %.
  • Вы хотите добиться этого с помощью скрипта Google Apps.

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

Поток:

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

  1. Извлечение значений из электронной таблицы.
  2. Создание объекта для размещения в Документе Google.
  3. Копирование шаблона Документа Google.
  4. Размещение значений заголовка в скопированном Документе с использованием объекта.
    • В этом случае заполнитель заменяется полученными значениями.
  5. Поместите значения таблицы, используя объект.
    • В этом случае полученные значения непосредственно помещаются в таблицу в шаблоне документа.

Пример сценария:

Перед вами Запустите сценарий, установите templateGoogleDocumentID.

function myFunction() {
  var templateGoogleDocumentID = "###";  // Please set the template Google Document ID.

  // 1. Retrieve values from Spreadsheet.
  var activeSheet = SpreadsheetApp.getActiveSheet();
  var values = activeSheet.getDataRange().getValues();

  // 2. Create an object for putting to Google Document.
  var object = {headers: {}, table: {}};
  var headerRow = values.shift();
  object.headers[headerRow[0]] = values[0][0];
  object.headers[headerRow[1]] = Utilities.formatDate(values[0][1], Session.getScriptTimeZone(), "yyyy/MM/dd");
  object.table = values.map(r => r.splice(2, 5));

  // 3. Copy a template Google Document.
  var copiedTemplateDoc = DriveApp.getFileById(templateGoogleDocumentID).makeCopy();
  var docId = copiedTemplateDoc.getId();

  // 4. Put the header values to the copied Document using the object.
  var doc = DocumentApp.openById(docId);
  var body = doc.getBody();
  Object.keys(object.headers).forEach(h => body.replaceText(`%${h.toLowerCase()}%`, object.headers[h]));

  // 5. Put the table values using the object.
  // If the table rows of Google Document are less than that of Spreadsheet, the rows are added.
  var table = body.getTables()[0];
  var r = object.table.length - table.getNumRows();
  if (r > 0) {
    for (var i = 0; i < r; i++) {
      var tr = table.appendTableRow();
      for (var j = 0; j < 3; j++) {
        tr.appendTableCell();
      }
    }
  }
  object.table.forEach((row, i) => (row.forEach((col, j) => (table.getCell(i, j).setText(col)))));
  doc.saveAndClose();

  // If you want to export the Google Document as PDF file, please use the following script.
  // var newFile = DriveApp.createFile(doc.getBlob());
}

Примечание:

  • В этом измененном сценарии, пожалуйста, включите V8 в редакторе сценариев.

Ссылки:

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