如何将 google 张表格中的多个图表添加到 1 google 张幻灯片中

How to add multiple charts into 1 google slides from google sheets

我正在尝试使用应用程序脚本从指定的 google sheet 添加多个图表到 Google 幻灯片。 所以我的一张幻灯片将有 2 个图表,如果我需要插入 2 个以上的图表,幻灯片应该自动复制自己,然后可以插入更多图表。但是我无法插入正确的图表,当它复制幻灯片时,它似乎一遍又一遍地插入相同的图表。

然而,我 运行 遇到了一些需要帮助的问题,但我无法自己找到答案。

这是代码,下面是我 运行 关注的问题:

function importpieCharts() {
  var dataSpreadsheetUrl = "https://docs.google.com/spreadsheets/d/1tPc0KU2uYuN4rO32tW-s6lql_IW57kbDUdSR8ZSkVXY/edit#gid=0"; //make sure this includes the '/edit at the end
  var ss = SpreadsheetApp.openByUrl(dataSpreadsheetUrl);
  var deck = SlidesApp.getActivePresentation();
  var deckTitle = SlidesApp.getActivePresentation().getName();
  var sheet = ss.getSheetByName(deckTitle);
  var charts = sheet.getCharts();
  var slides = deck.getSlides();
  var pieChartTemplate = slides[1];
    
   charts.forEach(function(chart){
   if(chart.modify().getChartType() == "PIE"){
   pieChartTemplate.duplicate();
   var updateSlide = deck.getSlides()[1];
   var pageElements = updateSlide.getPageElements();
   
   pageElements.forEach(function(pageElement){
   if(pageElement.getPageElementType() == "SHAPE"){
   if(pageElement.asShape().getShapeType() == "RECTANGLE"){
      
     pageElement.asShape().replaceWithSheetsChart(chart);
     }}});
     var presLength = deck.getSlides().length;
     updateSlide.move(presLength-2);
     }});
    }
  1. 每当我 运行 代码时,我都无法将 2 个或更多独特的图表插入到 1 张幻灯片中。
  2. 当代码 运行s 时,它创建了比必要更多的重复项,在这种特殊情况下,幻灯片只需要复制一次。
  3. 复制后,代码无法识别要插入 google 张幻灯片的正确图表。

请帮忙解决这个问题,或者请给我指明正确的方向!任何帮助深表感谢:) 以下是相关文件链接: Google 张幻灯片:https://docs.google.com/presentation/d/1CyUkJ7S4eq00MRol3RzcdyAG1m6ovUFBK0H9fxfu-28/edit?usp=sharing Google 张:https://docs.google.com/spreadsheets/d/1tPc0KU2uYuN4rO32tW-s6lql_IW57kbDUdSR8ZSkVXY/edit?usp=sharing

免责声明:我是一个新手,我对应用程序脚本的任何了解都是完全自学的,以使我的日常工作更轻松。我当然对代码及其应用真正感兴趣

我相信你的目标如下。

  • 您想将 {{placeholder for chart}} 替换为 Google 幻灯片中的电子表格图表。
  • 在您的模板幻灯片中,有 2 个 {{placeholder for chart}}。此外,Google 电子表格中有多个图表。
  • 您想用每个电子表格图表按图表顺序替换 {{placeholder for chart}}

修改点:

  • 在您的脚本中,使用了 2 个循环。而在内部循环中,一个 chart 用于替换。这样,每张幻灯片都有相同的 2 个图表。我认为这可能是您遇到问题的原因。
  • 为了将{{placeholder for chart}}按图表顺序替换为每个电子表格图表,只需要在内部循环中替换一张图表。为此,我建议增加一个检查复制模板幻灯片的条件。

当以上几点反映到你的脚本中,就会变成下面这样。

修改后的脚本:

function importpieCharts() {
  var dataSpreadsheetUrl = "https://docs.google.com/spreadsheets/d/1tPc0KU2uYuN4rO32tW-s6lql_IW57kbDUdSR8ZSkVXY/edit#gid=0"; //make sure this includes the '/edit at the end
  var ss = SpreadsheetApp.openByUrl(dataSpreadsheetUrl);
  var deckTitle = SlidesApp.getActivePresentation().getName();
  var sheet = ss.getSheetByName(deckTitle);
  var charts = sheet.getCharts();
  var slides = deck.getSlides();
  var pieChartTemplate = slides[1];
  
  // I modified below script.
  var copy = true;
  var updateSlide;
  charts.forEach(function(chart, idx, a) {
    if(chart.modify().getChartType() == "PIE"){
      if (copy) {
        updateSlide = pieChartTemplate.duplicate();
        var presLength = deck.getSlides().length;
        updateSlide.move(presLength - 2);
        copy = false;
      }
      var pageElements = updateSlide.getPageElements();
      for (var i = 0; i < pageElements.length; i++) {
        var pageElement = pageElements[i];
        if (pageElement.getPageElementType() == "SHAPE" && pageElement.asShape().getShapeType() == "RECTANGLE") {
          pageElement.asShape().replaceWithSheetsChart(chart);
          break;
        }
      }
      if (!pageElements.some(function(p) {return p.getPageElementType() == "SHAPE" && p.asShape().getShapeType() == "RECTANGLE"})) {
        copy = true;
      }
      
      // When the following script is used, the template sheet is removed at the last loop.
//      if (idx == a.length - 1) deck.getSlides().pop().remove();
    
    }
  });
}
  • 在此修改后的脚本中,当脚本完成时,模板幻灯片位于最后一张幻灯片。如果要删除它,请在上面的脚本中使用 if (idx == a.length - 1) deck.getSlides().pop().remove();

注:

  • 作为附加信息,在上面的脚本中,当 updateSlide.move(presLength - 2) 修改为 updateSlide.move(presLength) 时,当脚本完成时,模板幻灯片是 Google 幻灯片的第 2 页。