pdf создается из Google Slide, но с заполненными маркерами (через GAS)

#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
 

Ссылка: