1 回答

TA貢獻2021條經(jīng)驗 獲得超8個贊
我相信你的目標(biāo)如下。
您想要替換
{{placeholder for chart}}
為 Google 幻燈片中的電子表格圖表。在您的模板幻燈片中,有 2
{{placeholder for chart}}
。此外,Google 電子表格中還有一些圖表。您想要
{{placeholder for chart}}
按圖表順序替換每個電子表格圖表。
修改點:
在您的腳本中,使用了 2 個循環(huán)。在內(nèi)循環(huán)處,
chart
用1來進行替換。這樣,每張幻燈片都有相同的 2 個圖表。我認為這可能是您問題的原因。為了
{{placeholder for chart}}
按照圖表的順序替換每個電子表格圖表,在內(nèi)循環(huán)處只需要替換一張圖表。為此,我想建議添加一個檢查復(fù)制模板幻燈片的條件。
當(dāng)以上幾點反映到您的腳本中時,它會變成如下所示。
修改后的腳本:
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();
}
});
}
在此修改后的腳本中,當(dāng)腳本完成時,模板幻燈片位于最后一張幻燈片。如果你想刪除它,請if (idx == a.length - 1) deck.getSlides().pop().remove();在上面的腳本中使用。
筆記:
作為附加信息,在上面的腳本中,whenupdateSlide.move(presLength - 2)修改為updateSlide.move(presLength),當(dāng)腳本完成時,模板幻燈片是 Google Slides 的第二頁。
添加回答
舉報