1 回答
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 的第二页。
添加回答
举报