#pdf #google-apps-script #google-sheets #google-slides
#PDF #google-apps-script #google-sheets #google-слайды
Вопрос:
Приведенный ниже код в основном сопоставляет столбцы из электронной таблицы с парой маркеров, которые я получил на слайде Google. Он генерирует копии шаблона Google slide, обновляет их данными строки, и мне действительно нужно, чтобы он был в формате PDF для последующей отправки по электронной почте. Файлы pdf создаются в папке назначения с правильными именами файлов, но маркеры внутри них «пустые». Позже мне придется удалить эти файлы Google Slide, но сейчас задача состоит в том, чтобы правильно создать файлы pdf.
Ценю ваше время.
function mailMerge(templateID,ssID, sheetName, mapped, fileNameData, emailCol, rowLen = "auto"){
//Properties Services is Google Script Storage.
//This clears out the storage.
PropertiesService.getScriptProperties().deleteAllProperties();
const ss = SpreadsheetApp.getActiveSpreadsheet();
//const sheet = SpreadsheetApp.openById(ssID);
const sheet = ss.getSheetByName("Lista de Participantes");
//Get number of rows to process
rowLen = (rowLen = "auto") ? getRowLen() : rowLen;
const range = sheet.getRange(7,1,rowLen,sheet.getDataRange().getNumColumns());
const matrix = range.getValues();
const fileNameRows = getFileNameRows()
for(let i = 1; i < rowLen; i ){
if (matrix[i][1] == true amp;amp; matrix[i][27] != "Sim") {
let row = matrix[i];
//Get the title for the file.
let fileName = buildFileName(row)
//Creates a copy of the template file and names it with the current row's details.
let newDoc = DriveApp.getFileById(templateID).makeCopy(fileName);
//Replaces all the text place markers ({{text}}) with current row information.
updateFileData(row, newDoc.getId());
//Save new File ID and email to Properties service.
PropertiesService.getScriptProperties()
.setProperty(newDoc.getId(),row[emailCol]);
// 5. Export the temporal Google Slides as a PDF file.
newDoc = DriveApp.getFileById(newDoc.getId());
DriveApp.getFolderById("folder ID").createFile(newDoc.getBlob());
}
};
Помимо приведенного выше кода, я использую этот файл сценария в том же контейнере / электронной таблице, где я сопоставляю столбцы, для данных которых я хочу сгенерировать слайд Google. каждый столбец данных я называю маркером.
/*###################################################################
* Maps the relationship between the Google Sheet header and its location
* for each column along with it's corresponding Google Slide Doc template name.
*
* To update change the sheet, col and doc:
* ***
* {
* sheet: << Your sheet header
* col: << The column on the google sheet with the above header
* doc: << the corresonding name in double braces {{name}} in your Slide template
* }
* ***
*###################################################################
*/
const mappedDocToSheet = [
{
sheet:"Nome",
col:2,
doc:"primeiroNome"
},
{
sheet:"Sobrenome",
col:3,
doc:"sobrenome"
},
{
sheet:"COD. CERTIFICADO",
col:9,
doc:"codigo"
},
{
sheet:"Curso",
col:10,
doc:"curso"
},
];
Комментарии:
1. Я должен извиниться за свое плохое знание английского языка. К сожалению, я не могу ничего понять
markers
в вашем вопросе. Могу я спросить вас об этом?2. Привет, @Tanaike! Только что добавил скрипт, который я использую для заполнения «маркеров» данными электронной таблицы. Основная проблема здесь заключается в том, чтобы сгенерированный PDF-файл обновлялся так же, как и копия слайдов Google. Спасибо!
3. Спасибо за ответ. Когда вы добавляете значения Google Slides и создаете их в PDF-данные, и
newDoc
являются ли слайды Google, а также мое понимание вашего вопроса правильным, когдаSlidesApp.openById(newDoc.getId()).saveAndClose();
добавляется после строки// 5. Export the temporal Google Slides as a PDF file.
, какой результат вы получите? Ссылка4. Это просто сработало! Arigato! Как я могу пометить этот комментарий как решение?
Ответ №1:
Я считаю, что ваша цель и ситуация следующие.
- Вы добавляете значения Google Slides и создаете их в PDF-данных
newDoc
является ли Google Slides
Для достижения вашей цели, пожалуйста, используйте saveAndClose
. Для вашего скрипта, пожалуйста, измените следующим образом.
Модифицированный скрипт:
Пожалуйста, добавьте следующий скрипт в свою функцию mailMerge
следующим образом.
// 5. Export the temporal Google Slides as a PDF file.
SlidesApp.openById(newDoc.getId()).saveAndClose(); // <--- Added