Комментарии:
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();
}
}
@esdelano
ОтветитьДобрый день, подскажите пожалуйста, какую формулу написать и где именно ее подставить , что бы с помощю чекбокса формировать файлы по конкретно нужным строкам.Заранее спасибо)
Ответитьспасибо
ОтветитьПОдскажите, а как сделать, чтобы из таблицы передавалась дата в формате ХХ.YY.ZZZZ? Сейчас передается в формате- Tue Sep 23 2003 00:00:00 GMT+0400 (Moscow Summer Time)
ОтветитьДобрый день! Подскажите, у меня таблица в ней есть 600 заполненных строк с данными, когда включаю скрип он пытается делать все строки и скрип потом отваливается. Можно сделать так чтобы печатал последнюю заполненную стоку, а не все 600
ОтветитьА можно из списка чекбоксами выбрать и только для них сделать документы?
ОтветитьЗдравствуйте. Большое спасибо за ваши уроки) Подскажите пожалуйста, а возможно ли формировать по данными из таблицы всё в 1 документ? Чтобы каждое новое письмо формировалось с новой страницы в одном документы, а не отдельным файлом?
ОтветитьДобрый день! А как можно сделать, если есть таблица, есть печатная форма, данные автоматически заполняются, только после введения номера по порядку и по одному печатаются, а можно ли сделать автоматическую печать сразу нескольких документов, ввел номера с 40-45 и все напечаталось
ОтветитьПодскажите пжл на разных листах разное количество строк, но скрипт один, как сделать чтобы скрипт формировал только по заполненным строкам, а не все строчки которые есть в файле? а то получается 1 заполненная строчка и 20 пустых, и 21 файл в папке
ОтветитьА можно как-то сделать чтоб файлы именовались именно по моему шаблону включая некоторые переменные?
ОтветитьСкрипт отличный, полет нормальный. Но вот с картинками оказалось не все так просто, хотел передать QR код из ячейки. В есть мысли, куда крутить скрипт для этого ?
ОтветитьПодскажите пожалуйста, как оптимизировать код для генерации большого количества документов? У меня сейчас в таблице 2400 строк, app script отваливается по time out.
Нарезать кусками - вариант, но хочется более элегантного решения.
Доброго Времени суток!
Подскажите пожалуйста всё сделал как вы объяснили и показали но к сожалению выдаёт ошибку когда хочу сделать несколько шаблонов с разными данными. Т. е. в цикле перестаёт работать.
Вот пример успешный:
// @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();
}
Что можно сделать чтобы получилось запустить в цикле?
Очень понятное изложение материала. Спасибо.
Вопрос покажется простым, но как настроить доступ программы к данным? Если у вас такого урока нет, то подскажите, как правильно сформулировать для поисковика данный вопрос.
Добрый день!
Подскажите пож-та, как формировать документ только по необходимой строке?
супер инструкции есть курсы по программированию
ОтветитьУ меня ругается на строку
const tempDocFile = DocumentApp.openById(tempFile.getId());
Говорит: Документ недоступен. Повторите попытку позже.
Добрый день. Спасибо. Супер. А обещанный скрипт в описании?
ОтветитьДля полноты картины надо было отправить письма получателям с помощью скрипта.
Ответить