google-apps-script - 使用应用程序脚本将图表直接导入幻灯片
问题描述
我一直在尝试编写一个代码,允许我使用“按名称获取工作表”方法将我的所有图表导入特定的谷歌工作表中。
之后,我用工作表图表替换了特定的形状,但是我不断收到错误消息,说“对象不是 Shape 类型。(第 22 行)”。我在页面元素上遇到了同样的错误,我修复了这个错误,但现在我也遇到了另一个错误,所以我不确定如何继续前进。
请找到文档链接和下面的代码片段:幻灯片链接:https ://docs.google.com/presentation/d/1CyUkJ7S4eq00MRol3RzcdyAG1m6ovUFBK0H9fxfu-28/edit#slide=id.g8519fa7182_0_355 表格链接:https ://docs.google .com/spreadsheets/d/1tPc0KU2uYuN4rO32tW-s6lql_IW57kbDUdSR8ZSkVXY/edit#gid=0 代码:
function importViewFreqCharts() {
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 pieChartSlide = slides[0];
var pieChart = charts[0];
var pieChartText1 = sheet.getRange('G7').getValue();
var pieChartText2 = sheet.getRange('G8').getValue();
var pageElements = pieChartSlide.getPageElements();
pageElements.forEach(function(pageElement){
if(pageElement.getPageElementType() == "SHAPE"){
if(pageElement.asShape().getShapeType() !== "UNSUPPORTED"){
if(pageElement.asShape().getShapeType() == "RECTANGLE"){
pageElement.asShape().replaceWithSheetsChart(pieChart);}
if(pageElement.asShape().getShapeType() == "TEXT_BOX"){
pageElement.asShape().getText().replaceAllText('{{Sample text 1}}',pieChartText1);
pageElement.asShape().getText().replaceAllText('{{Sample text 2}}',pieChartText2);
}}}});
}
解决方案
修改点:
- 我认为在您的脚本中,
pageElement.asShape().replaceWithSheetsChart(pieChart)
运行时pageElement
变为SHEETS_CHART
. 这样,在 处发生错误if(pageElement.asShape().getShapeType() == "TEXT_BOX"){
。我认为你的问题的原因是这个。
为了避免这个问题,下面的修改如何?
从:
if(pageElement.asShape().getShapeType() !== "UNSUPPORTED"){
if(pageElement.asShape().getShapeType() == "RECTANGLE"){
pageElement.asShape().replaceWithSheetsChart(pieChart);}
if(pageElement.asShape().getShapeType() == "TEXT_BOX"){
pageElement.asShape().getText().replaceAllText('{{Sample text 1}}',pieChartText1);
pageElement.asShape().getText().replaceAllText('{{Sample text 2}}',pieChartText2);
}}}});
至:
pageElements.forEach(function(pageElement){
if(pageElement.getPageElementType() == "SHAPE"){
if(pageElement.asShape().getShapeType() !== "UNSUPPORTED"){
if (pageElement.asShape().getShapeType() == "RECTANGLE"){
pageElement.asShape().replaceWithSheetsChart(pieChart);
} else if(pageElement.asShape().getShapeType() == "TEXT_BOX"){
pageElement.asShape().getText().replaceAllText('{{Sample text 1}}',pieChartText1);
pageElement.asShape().getText().replaceAllText('{{Sample text 2}}',pieChartText2);
}
}
}
});
或者
pageElements.forEach(function(pageElement){
if(pageElement.getPageElementType() == "SHAPE"){
if(pageElement.asShape().getShapeType() !== "UNSUPPORTED"){
if (pageElement.asShape().getShapeType() == "RECTANGLE"){
pageElement.asShape().replaceWithSheetsChart(pieChart);
}
if(pageElement.getPageElementType() == "SHAPE" && pageElement.asShape().getShapeType() == "TEXT_BOX"){
pageElement.asShape().getText().replaceAllText('{{Sample text 1}}',pieChartText1);
pageElement.asShape().getText().replaceAllText('{{Sample text 2}}',pieChartText2);
}
}
}
});
推荐阅读
- angular6 - 如何使用 Angular Router 在 Ionic 4 中导航到带有选项卡的页面?
- three.js - 使用 SVGLoader 时能否获取 SVG 节点/父节点的属性信息?
- javascript - 从 mysql 字段中获取单行数据
- c# - Xamarin 表单中的可重用 ContentView
- scala - 使用 scala 从 EventHub 读取数据到 DataBricks 中的表
- excel - 运行时错误 438(工作中的继承宏)
- ios - 在 Objective-C 中快速解析联系人对象的电话号码
- android - 如何在 Android 应用程序及其库之间共享 gradle 依赖项?
- xml - Google 表格脚本 XML 返回 ID 名称
- rest - 无法使用 REST API 从 TeamCity 下载工件