Google Таблицы. Урок 91. Как сформировать несколько текстовых документов по шаблону по таблице

Google Таблицы. Урок 91. Как сформировать несколько текстовых документов по шаблону по таблице

7,650 Просмотров

Ссылки и html тэги не поддерживаются


Комментарии:

Сделано! О сложном - просто
Сделано! О сложном - просто - 31.10.2020 23:59

function Creator() {

const docFile = DriveApp.getFileById("1bCHPez1OTRtt7tgmlkYPoV3OC7j1yl1CaRfkltZzcTQ");
// это файл шаблона
const tempFolder = DriveApp.getFolderById("19HPiA8XXpCOgTXithaOF3166zq6yOCOi");
// это директория для новых файлов

var list = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
var l=list.getLastRow();
//определяем кол-во строк

var a1 = list.getRange(2, 2).getValue()
// сообщение

for (var i=5; i <= l; i++) {


const tempFile = docFile.makeCopy(tempFolder);
// делаем копию шаблона
const tempDocFile = DocumentApp.openById(tempFile.getId());
// открываем созданную копию
const body = tempDocFile.getBody();
// тело файла копии


var a2 = list.getRange(i, 2).getValue();
//номер
var a3 = list.getRange(i, 3).getValue();
//организация
var a4 = list.getRange(i, 4).getValue();
//адрес
var a5 = list.getRange(i, 5).getValue();
//обращение

body.replaceText("{номер}", a2);
body.replaceText("{Получатель}", a3);
body.replaceText("{Адрес получателя}", a4);
body.replaceText("{Обращение}", a5);
body.replaceText("{сообщение}", a1);

tempDocFile.saveAndClose();

}




}

Ответить
Евгений Габидуллин
Евгений Габидуллин - 22.09.2023 08:36

@esdelano

Ответить
Евгений Вершило
Евгений Вершило - 01.06.2023 00:40

Добрый день, подскажите пожалуйста, какую формулу написать и где именно ее подставить , что бы с помощю чекбокса формировать файлы по конкретно нужным строкам.Заранее спасибо)

Ответить
Elen
Elen - 15.12.2022 07:37

спасибо

Ответить
Максим Руднев
Максим Руднев - 09.12.2022 15:30

ПОдскажите, а как сделать, чтобы из таблицы передавалась дата в формате ХХ.YY.ZZZZ? Сейчас передается в формате- Tue Sep 23 2003 00:00:00 GMT+0400 (Moscow Summer Time)

Ответить
Dron Ryzshkov
Dron Ryzshkov - 19.10.2022 12:09

Добрый день! Подскажите, у меня таблица в ней есть 600 заполненных строк с данными, когда включаю скрип он пытается делать все строки и скрип потом отваливается. Можно сделать так чтобы печатал последнюю заполненную стоку, а не все 600

Ответить
DevPostnov
DevPostnov - 04.10.2022 21:04

А можно из списка чекбоксами выбрать и только для них сделать документы?

Ответить
Кирилл Новик
Кирилл Новик - 06.09.2022 21:41

Здравствуйте. Большое спасибо за ваши уроки) Подскажите пожалуйста, а возможно ли формировать по данными из таблицы всё в 1 документ? Чтобы каждое новое письмо формировалось с новой страницы в одном документы, а не отдельным файлом?

Ответить
Елена Черватюк
Елена Черватюк - 14.08.2022 12:11

Добрый день! А как можно сделать, если есть таблица, есть печатная форма, данные автоматически заполняются, только после введения номера по порядку и по одному печатаются, а можно ли сделать автоматическую печать сразу нескольких документов, ввел номера с 40-45 и все напечаталось

Ответить
Екатерина
Екатерина - 03.08.2022 10:54

Подскажите пжл на разных листах разное количество строк, но скрипт один, как сделать чтобы скрипт формировал только по заполненным строкам, а не все строчки которые есть в файле? а то получается 1 заполненная строчка и 20 пустых, и 21 файл в папке

Ответить
B&B_Studio
B&B_Studio - 08.12.2021 00:04

А можно как-то сделать чтоб файлы именовались именно по моему шаблону включая некоторые переменные?

Ответить
Кирилл Владимирович
Кирилл Владимирович - 28.09.2021 01:31

Скрипт отличный, полет нормальный. Но вот с картинками оказалось не все так просто, хотел передать QR код из ячейки. В есть мысли, куда крутить скрипт для этого ?

Ответить
Mikhail Traytel
Mikhail Traytel - 24.08.2021 21:32

Подскажите пожалуйста, как оптимизировать код для генерации большого количества документов? У меня сейчас в таблице 2400 строк, app script отваливается по time out.
Нарезать кусками - вариант, но хочется более элегантного решения.

Ответить
Andrii Holizna
Andrii Holizna - 19.08.2021 17:45

Доброго Времени суток!
Подскажите пожалуйста всё сделал как вы объяснили и показали но к сожалению выдаёт ошибку когда хочу сделать несколько шаблонов с разными данными. Т. е. в цикле перестаёт работать.
Вот пример успешный:

// @ts-nocheck

function Creator() {

const docFile = DriveApp.getFileById("10ueT8PoAoA3-ZWgqoSw7x7exMJxSpLVaWjvHRcoJZ5s");
// это файл шаблона
const tempFolder = DriveApp.getFolderById("1_zFIL7nigDU3V2F4GewXhgubqhIjVkdx");
// это директория для новых файлов

const tempFile = docFile.makeCopy(tempFolder);
// делаем копию шаблона
const tempDocFile = DocumentApp.openById(tempFile.getId());
// открываем созданную копию
const body = tempDocFile.getBody();
// тело файла копии


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



for (var i=2; i <= l; i++) {



var a1 = list.getRange(2, 4).getValue();
var a2 = list.getRange(2, 5).getValue();
var a3 = list.getRange(2, 6).getValue();
var a4 = list.getRange(2, 7).getValue();
var a5 = list.getRange(2, 8).getValue();
var a6 = list.getRange(2, 9).getValue();
var a7 = list.getRange(2, 10).getValue();
var a8 = list.getRange(2, 11).getValue();
var a9 = list.getRange(2, 12).getValue();
var a10 = list.getRange(2, 13).getValue();
var a11 = list.getRange(2, 14).getValue();
var a12 = list.getRange(2, 15).getValue();
var a13 = list.getRange(2, 16).getValue();
var a14 = list.getRange(2, 17).getValue();
var a15 = list.getRange(2, 18).getValue();
var a16 = list.getRange(2, 19).getValue();
var a17 = list.getRange(2, 20).getValue();

}

body.replaceText("{Imię i nazwisko}", a1);
body.replaceText("{Telefon №1}", a2);
body.replaceText("{Telefon №2}", a3);
body.replaceText("{Paszport: seria i numer}", a4);
body.replaceText("{Adres zameldowania w kraju w którym obecnie mieszkasz}", a5);
body.replaceText("{01.01.3030}", a6);
body.replaceText("{Miejsce}", a7)
body.replaceText("{Imię ojca}", a8)
body.replaceText("{Imię matki}", a9)
body.replaceText("{Nazwisko rodowe matki}", a10)
body.replaceText("{Osoba, którą należy zawiadomić w razie wypadku}", a11)
body.replaceText("{PESEL}", a12)
body.replaceText("{Wiza numer}", a13)
body.replaceText("{Zawód, umiejętności}", a14)
body.replaceText("{01.01.2021}", a15)
body.replaceText("{Podpis}", a16)
body.replaceText("{GODZINA}", a17)

tempDocFile.saveAndClose();
}

А это не успешный:

// @ts-nocheck

function Creator() {

const docFile = DriveApp.getFileById("10ueT8PoAoA3-ZWgqoSw7x7exMJxSpLVaWjvHRcoJZ5s");
// это файл шаблона
const tempFolder = DriveApp.getFolderById("1_zFIL7nigDU3V2F4GewXhgubqhIjVkdx");
// это директория для новых файлов

const tempFile = docFile.makeCopy(tempFolder);
// делаем копию шаблона
const tempDocFile = DocumentApp.openById(tempFile.getId());
// открываем созданную копию
const body = tempDocFile.getBody();
// тело файла копии


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

for (var i=2; i <= l; i++) {



var a1 = list.getRange(i, 4).getValue();
var a2 = list.getRange(i, 5).getValue();
var a3 = list.getRange(i, 6).getValue();
var a4 = list.getRange(i, 7).getValue();
var a5 = list.getRange(i, 8).getValue();
var a6 = list.getRange(i, 9).getValue();
var a7 = list.getRange(i, 10).getValue();
var a8 = list.getRange(i, 11).getValue();
var a9 = list.getRange(i, 12).getValue();
var a10 = list.getRange(i, 13).getValue();
var a11 = list.getRange(i, 14).getValue();
var a12 = list.getRange(i, 15).getValue();
var a13 = list.getRange(i, 16).getValue();
var a14 = list.getRange(i, 17).getValue();
var a15 = list.getRange(i, 18).getValue();
var a16 = list.getRange(i, 19).getValue();
var a17 = list.getRange(i, 20).getValue();
}

body.replaceText("{Imię i nazwisko}", a1);
body.replaceText("{Telefon №1}", a2);
body.replaceText("{Telefon №2}", a3);
body.replaceText("{Paszport: seria i numer}", a4);
body.replaceText("{Adres zameldowania w kraju w którym obecnie mieszkasz}", a5);
body.replaceText("{01.01.3030}", a6);
body.replaceText("{Miejsce}", a7)
body.replaceText("{Imię ojca}", a8)
body.replaceText("{Imię matki}", a9)
body.replaceText("{Nazwisko rodowe matki}", a10)
body.replaceText("{Osoba, którą należy zawiadomić w razie wypadku}", a11)
body.replaceText("{PESEL}", a12)
body.replaceText("{Wiza numer}", a13)
body.replaceText("{Zawód, umiejętności}", a14)
body.replaceText("{01.01.2021}", a15)
body.replaceText("{Podpis}", a16)
body.replaceText("{GODZINA}", a17)

tempDocFile.saveAndClose();
}
Что можно сделать чтобы получилось запустить в цикле?

Ответить
Виктория Лебедева
Виктория Лебедева - 15.01.2021 23:14

Очень понятное изложение материала. Спасибо.
Вопрос покажется простым, но как настроить доступ программы к данным? Если у вас такого урока нет, то подскажите, как правильно сформулировать для поисковика данный вопрос.

Ответить
Виктория Лебедева
Виктория Лебедева - 09.01.2021 16:31

Добрый день!
Подскажите пож-та, как формировать документ только по необходимой строке?

Ответить
Мира
Мира - 17.12.2020 23:39

супер инструкции есть курсы по программированию

Ответить
Виталий
Виталий - 07.12.2020 20:34

У меня ругается на строку
const tempDocFile = DocumentApp.openById(tempFile.getId());
Говорит: Документ недоступен. Повторите попытку позже.

Ответить
Елена Ч
Елена Ч - 31.10.2020 22:27

Добрый день. Спасибо. Супер. А обещанный скрипт в описании?

Ответить
Andrei Viltouski
Andrei Viltouski - 30.10.2020 19:21

Для полноты картины надо было отправить письма получателям с помощью скрипта.

Ответить