Как отредактировать скрипт, чтобы он подставлял данные из Таблицы в Документ?

Добрый день, знатоки Google Sheets.
Подскажите, пожалуйста, как отредактировать скрипт.
Чтоб скрипт не сбивался если ячейка пустая (B6, B7, B8,), а если есть данные заполнял.


Скрипт
function Creator() {

const docFile = DriveApp.getFileById("1ACutGgDDhca8arh9DqeTCBnqocOEfDTEXABJ30zknHI");
// это файл шаблона
const tempFolder = DriveApp.getFolderById("1c0uCE5XWnwJOp3_Nub7t8Qui_R_q4uhX");
// это директория для новых файлов
const tempFile = docFile.makeCopy(tempFolder);
// делаем копию шаблона
const tempDocFile = DocumentApp.openById(tempFile.getId());
// открываем созданную копию
const body = tempDocFile.getBody();
// тело файла копии

var list = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();

var a1 = list.getRange(1, 2).getValue()
var a2 = list.getRange(2, 2).getValue();
var a3 = list.getRange(3, 2).getValue();
var a4 = list.getRange(4, 2).getValue();
var a5 = list.getRange(5, 2).getValue();
var a6 = list.getRange(6, 2).getValue();
var a7 = list.getRange(7, 2).getValue();
var a8 = list.getRange(8, 2).getValue();
var a9 = list.getRange(9, 2).getValue();
var a10 = list.getRange(10, 2).getValue();
}
  • Вопрос задан
  • 224 просмотра
Решения вопроса 2
oshliaer
@oshliaer Куратор тега Google Apps Script
Google Products Expert
Предлагаю использовать универсальную функцию заполнения документа

/**
 *
 * @param {GoogleAppsScript.Document.Document} doc
 * @param {Record<string,unknown>} data
 */
function fillDoc_(doc, data) {
  const body = doc.getBody();

  Object.entries(data).forEach(([key, value]) => {
    body.replaceText(`(?i){{${key}}}`, value);
  });

  body.replaceText(`(?i){{.*?}}`, '');
}


Теперь вы можете поставить в эту функцию Документ, например, вот так создается новый файл из шаблона

const file = DriveApp.getFileById('192avJeIyh524ofvFvuQRaf9QPyqH7FKBEzwNLoHJa-g').makeCopy();
const doc = DocumentApp.openById(file.getId());


Важно, заменяемый текст в шаблоне должен быть обернут в {{заменяемый текст}}.


Так же нужно создать объект данных для функции. Например, вот так

const values = SpreadsheetApp.getActive()
  .getRange("'Заполнение Документа данными из Таблицы'!2:2")
  .getDisplayValues()[0];
const data = {
  заголовок: 'тестовый заголовок',
  имя: values[1],
};


Вызов функции прост

fillDoc_(doc, data);

Полный пример шаблона тут https://docs.google.com/document/d/192avJeIyh524of...

Полный пример в Таблице https://docs.google.com/spreadsheets/d/1zPuzdN7EtT...
Ответ написан
Комментировать
@Kazzzak
Какой-то у вас сложный подход к получению данных в переменные...
Используйте getValues()
// № строки, № номер столбца, количество строк, количество столбцов
let vals = list.getRange(1, 2, 10,1).getValues()


На выходе в переменной будет двумерный массив типа [["a", "b", "c", ""],["1", "2", 3.0, ""]]
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы