我想使用Google应用脚本将电子表格中的图表复制到文档中。 插入图表有效,但是a)权限和b)格式化存在问题。
可以按如下方式插入图表:
var b = d.getBody();
var charts = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("charts").getCharts();
for (var i in charts) {
b.appendImage(charts[i]);
Logger.log(charts[i].getBlob().getName()); // correct: "chart.png"
}
Data column(s) for axis #1 cannot be of type string
的图像)手动复制顶行,底行是脚本的结果。
第二个相关的问题:电子表格需要共享(“链接的任何人都可以查看”),否则它会将图像(正确的名称,宽度,高度等)显示为错误消息:{ {1}}。
有关如何使用正确的格式插入图表而不必共享电子表格的任何建议吗?
答案 0 :(得分:2)
我最终手动创建了图表。例如。对于第一个条形图,以下结果显示在电子表格和文档中显示相同的图表:
var chart = dest.newChart();
chart
.setChartType(Charts.ChartType.BAR)
.addRange(myrange)
.setPosition(2,8,0,0)
.setOption("theme","maximized")
.setOption("colors",["#3366CC","#FF9900","#DC3912","#109618"])
.setOption('isStacked', true)
.setOption('width', 500)
.setOption('height', 130)
.setOption('hAxis.viewWindow.max', countActions)
.setOption('vAxis.gridlines.count', 0)
.setOption('legend', {position: 'in', textStyle: {fontSize: 12}})
var chart = chart.build();
dest.insertChart(chart);
我还必须更改数据范围,因为看起来无法手动设置以下图表设置。
要解决这个问题,我已手动转换电子表格中的范围(=TRANSPOSE(original_range)
)并让myrange
指向新的范围,我添加了一个空列,以便将其用作空报头中。
我还没有查看折线图,可能是Chart API无法像电子表格一样创建时间轴。
答案 1 :(得分:1)
为了它的价值我只是在一个简单的报表生成器中使用原始脚本,该生成器从Google表格中获取数据和图表,并自动生成包含任何用户的报表。它非常容易。是以下
的略微修改版本var charts =
SpreadsheetApp.getActiveSpreadsheet().getSheetByName("charts").getCharts();
for (var i in charts) {
doc.getBody.appendImage(charts[i]);
Logger.log(charts[i].getBlob().getName())};
在我的脚本" doc"是一个var repr
答案 2 :(得分:0)
当我在玩耍的时候,我记得像你描述的那样有问题。当我确保在图表中添加了所有必填字段(因此没有跳过数据元素)时,它工作正常。
扼杀,跳过数据元素似乎没有在图表中引起问题(手动复制和粘贴都没有)。