Вот что вам поможет:
1. Установите библиотеку
batch request
2. Включите
DriveAPI и
DocsAPI в консоли разработчика
3. Вставьте код ниже в файл своего проекта, заполните постоянные переменные, замените название листа если вам необходимо и запускайте функцию
Creator()
/**
* Переменная LIST получает данные с листа с названием 1 которые содержаться в 1 и 2 колонке
* номер и фио
* Заполните sampleID и folderID
*/
const sampleID = "ID вашего файла"
const folderID = "ID папки где будут создаваться копии"
const LIST = SpreadsheetApp.getActiveSpreadsheet()
.getSheetByName('1')
.getDataRange()
.getValues()
.filter(f => f[0] != "")
.map(f => [f[0], f[1]]);
/**
* Функция для создания n копий документа и замены текста в нем
* данная функция создает количество документов, равное количеству строк в массиве LIST
* После она запускет функцию batchUpdate() которая берет вновь созданные копии и заменяет в них данные, по строкам для кадого документа
*/
function Creator() {
var requests = LIST.map(([b1, a2]) => {
return {
method: "POST",
endpoint: `https://www.googleapis.com/drive/v3/files/${sampleID}/copy`,
requestBody: {
parents: [folderID], name: `Договор № ${b1} с ${a2}` // заполните здесь название которое вам нужно что бы получилось
}
}
});
var res = BatchRequest.EDo({
batchPath: "batch/drive/v3",
requests: requests,
});
console.log(res);
batchUpdate(res);
}
function batchUpdate(res) {
var IDS = res.map((item) => {
return item.id;
});
concatArrays(LIST, IDS).forEach(([num, name, id]) => {
const requests = [
{ replaceAllText: { replaceText: String(num), containsText: { text: "<номер>", matchCase: false } } }, // обязательно используем String() для преобразования чисел в текст
{ replaceAllText: { replaceText: name, containsText: { text: "<фио>", matchCase: false } } }
];
const res = Docs.Documents.batchUpdate({ requests }, id);
console.log(JSon.stringify(res, null, 2));
// Utilities.sleep(5000); // Если документов много, может потребоваться использовать скорректированное время ожидания.
});
}
/**
* Эта функция соединяет два массива вместе
* @param {object} arr1 первый массив, к которму нужно добавить второй массив.
* @param {object} arr2 второй массив который будем добавлять к первому.
* @return {object} возвращает объединенный массив
*/
function concatArrays(arr1, arr2) {
let result = [];
arr1.forEach((sub, i) => {
let newSubArr = sub.concat(arr2[i]);
result.push(newSubArr);
});
return result;
}