如何将多个图表从Google表格添加到1个Google幻灯片中 动机点:修改后的脚本:注意:

问题描述

我正在尝试使用应用脚本将多个图表从指定的Google表格添加到Google幻灯片中。 因此,我的幻灯片中的1张将包含2张图表,如果我需要插入2张以上的图表,则幻灯片自动复制自身,然后可以插入更多张图表。但是,我无法插入正确的图表,当它复制幻灯片时,似乎是一遍又一遍地插入相同的图表。

但是,我遇到了一些需要帮助的问题,但我自己找不到答案。

这是代码,下面是我遇到的问题:

goto /?
  1. 每次运行代码时,我都无法在一张幻灯片中插入2张或更多张独特的图表。
  2. 运行代码时,它会创建比必要数量更多的副本,在这种情况下,幻灯片只需要复制一次。
  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

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

解决方法

我相信您的目标如下。

  • 您要用Google幻灯片中的电子表格图表替换{{placeholder for chart}}
  • 在模板幻灯片中,有2个{{placeholder for chart}}。另外,Google Spreadsheet中有几张图表。
  • 您要按图表的顺序用每个电子表格图表替换{{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幻灯片的第二页。