为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

收到一只叮咚 2023-07-14 09:38:07
我正在尝试使用应用程序脚本从指定的谷歌工作表将多个图表添加到谷歌幻灯片中。因此,我的 1 张幻灯片将包含 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);     }});    }每当我运行代码时,我都无法将 2 个或更多独特的图表插入到 1 张幻灯片中。当代码运行时,它会创建不必要的重复项,在这种特殊情况下,幻灯片只需要复制一次。复制后,代码无法识别要插入谷歌幻灯片的正确图表。请帮忙解决这个问题,或者请给我指出正确的方向!非常感谢任何帮助:)
查看完整描述

1 回答

?
宝慕林4294392

TA贡献2021条经验 获得超8个赞

我相信你的目标如下。

  • 您想要替换{{placeholder for chart}}为 Google 幻灯片中的电子表格图表。

  • 在您的模板幻灯片中,有 2 {{placeholder for chart}}。此外,Google 电子表格中还有一些图表。

  • 您想要{{placeholder for chart}}按图表顺序替换每个电子表格图表。

修改点:

  • 在您的脚本中,使用了 2 个循环。在内循环处,chart用1来进行替换。这样,每张幻灯片都有相同的 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();在上面的脚本中使用。

笔记:

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


查看完整回答
反对 回复 2023-07-14
  • 1 回答
  • 0 关注
  • 117 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信