在 Google 表格中添加数组作为 EmbeddedChart 的“范围”

Posted

技术标签:

【中文标题】在 Google 表格中添加数组作为 EmbeddedChart 的“范围”【英文标题】:Add array as "range" of EmbeddedChart in Google sheets 【发布时间】:2016-04-03 04:38:29 【问题描述】:

简介:我想通过使用嵌入式 Google 脚本中生成的数组来更改 Google 表格 EmbeddedChart 中的数据,而无需先将数据倒入单元格中。

Long:我有一个绑定脚本,用于更新预先存在的电子表格。我修改了js中的数据,想改变一个嵌入式图表来使用生成的数据数组,而不把数据放在表上。从技术上讲,我不在乎它是一个 EmbeddedChart 我只想制作一个带有图表的摘要页面,而不会用额外的表格污染文档。不希望从工作表中制作 html 页面。

我尝试了各种选择。

.setDataTable() 不是EmbeddedChartBuilder 的方法,与普通 (HTML) 谷歌图表不同。我假设我缺少一些简单的东西,比如将数组转换为伪范围实例的类,类似于 DataTable 或 Excel 的名称,而无需接触工作表。

最坏的情况:我不知道在 Google 表格中添加具有 id 属性的 div 的方法,有吗?

测试方法:

sheet.getCharts()[0].modify().addRange([2,3,4,5]); //无法将 Array 转换为 Range。 sheet.getCharts()[0].modify().addRange("2,3,4,5"); //找不到方法addRange(string)。 (Desperate...) sheet.getCharts()[0].modify().setDataTable(); //在EmbeddedChartBuilder对象中找不到函数setDataTable。 (Desperate...) sheet.updateChart(chartFromCharts); //找不到方法updateChart(Chart)。

神奇地将数组转换为范围对象而不保存在工作表上

//演示脚本。 函数填充() 变量 a=[1, 2, 3, 4, 5]; var sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet(); var chart=sheet.getCharts()[0].modify(); chart.setOption('title', "脚本已更改..."); cchart=chart.asColumnChart(); dt=Charts.newDataTable().addColumn(Charts.ColumnType.STRING, "分类横坐标").addColumn(Charts.ColumnType.NUMBER, "数值纵坐标").addRow(["A",5]).addRow([ "B",6]).build();

//Try 1. Desperate 以防万一它接受数组。 //chart.addRange(a); //无法将数组转换为范围。 //cchart.addRange(a); //无法将数组转换为范围。 //Try 2. Desparate 以防万一它接受 DataTable //chart.addRange(dt); //找不到方法 addRange(DataTable)。 //尝试 3. Desperate hack... //new google.visualization.ColumnChart(getCharts()[0].getId()).draw(dt, options); //ReferenceError: "google" 未定义 //我可以访问它吗? //$(getCharts()[0].getId()).html("Hacked") //ReferenceError: "$" 没有定义。 //再次... //document.getElementByID(getCharts()[0].getId()) //ReferenceError: "document" 没有定义。 //尝试5。 //sheet.updateChart(Charts.newColumnChart().build()); //找不到方法updateChart(Chart)。 //尝试 4. 文档中缺少方法?! //chart.addDataTable(a); //在EmbeddedChartBuilder对象中找不到函数addDataTable。

//cchart.addDataTable(a); //在对象 EmbeddedColumnChartBuilder 中找不到函数 addDataTable。

sheet.updateChart(chart.build());

【问题讨论】:

到目前为止您尝试过什么?您能否进一步说明您想要做什么?...查看此文档以了解如何在 Stack Overflow ***.com/help/how-to-ask 中提问 我的目标只是在 google 表格中制作一个图表,而无需制作包含所需数据的新表格,也无需在表格之外制作 HTML 页面或类似页面——因为这会破坏其目的。谢谢。 【参考方案1】:

使用普通的Charts 对象代替使用嵌入式图表并使用 .getAs(MimeType.PNG) 将图表作为图像添加到电子表格中。

编辑:我已经尝试过这个解决方案,并且由于谷歌的错误,当您将电子表格作为 PDF 获取时,脚本插入的图像不会显示。谷歌请解决这个问题,自报告以来已经 3 年了,他们仍在“努力解决”..

【讨论】:

以上是关于在 Google 表格中添加数组作为 EmbeddedChart 的“范围”的主要内容,如果未能解决你的问题,请参考以下文章

谷歌表格中是不是有办法选择单元格列表作为数组用作连接表格中的参数?

使用自动列宽(v3 API)从JavaScript将数据导入Google表格

数组文字Google表格中不同大小的行

在 Google 表格中使用 IF、AND/OR(许多条件)和数组公式

如何在 Google 电子表格中使用日期添加功能?

将对象添加到数组后,tableview 不会更新