简体   繁体   English

Append Google Apps 脚本中来自表格数据的新幻灯片

[英]Append New Slides from Sheets Data in Google Apps Script

I have set up a Google Apps Script to generate new templated slides from data contained in a spreadsheet .我已经设置了一个 Google Apps 脚本来根据电子表格中包含的数据生成新的模板化幻灯片 This data would be updated regularly.该数据将定期更新。 I plan to set a project trigger to generate new slides on a regular basis.我计划设置一个项目触发器以定期生成新幻灯片。

Right now, I avoid the problem of duplicating slides during triggered updates by simply removing previously generated slides (see code example below) but I would love to simply append new slides rather than deleting and regenerating (to preserve any edits to previously generated slides).现在,我通过简单地删除以前生成的幻灯片(参见下面的代码示例)来避免在触发更新期间复制幻灯片的问题,但我更愿意简单地 append 新幻灯片而不是删除和重新生成(以保留对以前生成的幻灯片的任何编辑)。

Any tips and tricks from more experienced Javascript developers for this wayward R coder on how to approach this problem?对于这个任性的 R 编码器,更有经验的 Javascript 开发人员有没有关于如何解决这个问题的提示和技巧?

function myFunction() {
  var dataSpreadsheetUrl = "https://docs.google.com/spreadsheets/d/1RjA4BJ4IKyjlh_l6vNaC7Q8wgUet1eNBo4_KJiF1pbQ/edit";
  var ss = SpreadsheetApp.openByUrl(dataSpreadsheetUrl);
  var deck = SlidesApp.getActivePresentation();
  var sheet = ss.getSheetByName('test');
  var values = sheet.getRange(2, 1, sheet.getLastRow(), sheet.getLastColumn()).getValues();
  var slides = deck.getSlides();
  var templateSlide = slides[1];
  var presLength = slides.length;
  
  // remove previously generated slides
  // TODO: figure out how to append rather than delete and regenerate
  for (var i = 2; i < slides.length; i++){
    slides[i].remove()
  }
  
  values.forEach(function(page){
  if(page[0]){ 
    
   templateSlide.duplicate();
   slides = deck.getSlides();
   newSlide = slides[2];
    
   var shapes = (newSlide.getShapes());
     shapes.forEach(function(shape){
       shape.getText().replaceAllText('{{name}}',page[0]);
       shape.getText().replaceAllText('{{value1}}',page[1]);
       shape.getText().replaceAllText('{{value2}}',page[2]);
       shape.getText().replaceAllText('{{value3}}',page[3]);
       shape.getText().replaceAllText('{{value4}}',page[4]);
       shape.getText().replaceAllText('{{value5}}',page[5]);
       shape.getText().replaceAllText('{{value6}}',page[6]);
       shape.getText().replaceAllText('{{value7}}',page[7]);
       shape.getText().replaceAllText('{{value8}}',page[8]);
       shape.getText().replaceAllText('{{value9}}',page[9]);
       shape.getText().replaceAllText('{{value10}}',page[10]);
    }); 
   presLength = slides.length; 
   newSlide.move(presLength); 
  }
  }); 
}

Figured it out by updating the starting row by checking against presentation length!通过检查演示文稿长度来更新起始行来解决这个问题!

function myFunction() {
  var dataSpreadsheetUrl = "https://docs.google.com/spreadsheets/d/1RjA4BJ4IKyjlh_l6vNaC7Q8wgUet1eNBo4_KJiF1pbQ/edit";
  var ss = SpreadsheetApp.openByUrl(dataSpreadsheetUrl);
  var deck = SlidesApp.getActivePresentation();
  var sheet = ss.getSheetByName('test');
  var slides = deck.getSlides();
  var templateSlide = slides[1];
  var presLength = slides.length;

  // new data update //
  var rowLength = sheet.getLastRow();
  var startRow = 2;
  // update startRow when not initial run
  if(presLength != 2){
    startRow = presLength;
  }
  // save newly generated data range
  var values = sheet.getRange(startRow, 1, sheet.getLastRow(), sheet.getLastColumn()).getValues();
  
  values.forEach(function(page){
  if(page[0]){ 
    
   templateSlide.duplicate();
   slides = deck.getSlides();
   newSlide = slides[2];
    
   var shapes = (newSlide.getShapes());
     shapes.forEach(function(shape){
       shape.getText().replaceAllText('{{name}}',page[0]);
       shape.getText().replaceAllText('{{value1}}',page[1]);
       shape.getText().replaceAllText('{{value2}}',page[2]);
       shape.getText().replaceAllText('{{value3}}',page[3]);
       shape.getText().replaceAllText('{{value4}}',page[4]);
       shape.getText().replaceAllText('{{value5}}',page[5]);
       shape.getText().replaceAllText('{{value6}}',page[6]);
       shape.getText().replaceAllText('{{value7}}',page[7]);
       shape.getText().replaceAllText('{{value8}}',page[8]);
       shape.getText().replaceAllText('{{value9}}',page[9]);
       shape.getText().replaceAllText('{{value10}}',page[10]);
    }); 
   presLength = slides.length; 
   newSlide.move(presLength); 
  }
  }); 
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

相关问题 在使用谷歌应用脚本将数据从谷歌表格注入谷歌幻灯片期间将日期转换为 dd/mm/yyyy - Convert date to dd/mm/yyyy during injection of data from google sheets to google slides using google apps script 如何在 Google Apps 脚本中动态创建新工作表时 append 第一行数据 - How to append first row data while creating new sheets dynamically in Google Apps Script Google Apps Script Google Sheets Gmail 处理新邮件追加行数组 - Google Apps Script Google Sheets Gmail Processing New Emails Append Row Array 使用 Google 表格中的数据在 Google Apps 脚本中自动完成 - Autocomplete in Google Apps Script with data from Google Sheets 在 Apps Script 和 Google Sheets 中使用 ImportHTML 进行数据抓取 - Data Scraping With ImportHTML in Apps Script & Google Sheets 从 Apps 脚本显示消息 Google 表格 - Display message Google Sheets from Apps Script 如何使用 Google Apps Script 在来自 Google 表格的多行中拆分 Google 幻灯片表中的数据(基于字符限制)? - How to split data in a Google Slides Table (based on character limit) in multiple rows coming in from a Google Sheet using Google Apps Script? 如何从 Google 表格中获取数据并在 Google Apps 脚本中处理它们? - How to get data from Google Sheets and handle them in Google Apps script? Google Sheets/Apps Script Copy 公式到新行 - Google Sheets/Apps Script Copy Formula to new row Google Sheets / Apps Script:在特定文件夹中创建新电子表格的功能 - Google Sheets / Apps Script: Function to create a new spreadsheet in specific folder
 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM