Answers:
从今天(2016-05-20)起,Google将开始推出将图表从Google电子表格嵌入到Google文档中的功能。此时,我的3个Google帐户中有2个使该选项在Insert
菜单中可用,并且Insert→Chart
在该Insert→Drawing…
项目下方有一个新的子菜单。
当您插入此类图表时,它们仍然链接到原始电子表格。如果只需要表格数据,则可以使用表格图表类型将数据显示为简单表格。
在此阶段存在一些限制(例如,关于图表的大小),并且在插入表格之前必须在电子表格中预先存在该图表,但这是朝着正确的方向前进的……
要插入电子表格或表格,请使用从Google表格添加表格,方法是将表格从表格复制粘贴到文档,然后选择链接的选项。
如果在打开文档时修改源电子表格,则该图表不会实时更新,但是,该文档将检测到更改,并为您提供嵌入式电子表格上方的“ 更新”按钮,以反映源中的最新更改。
AFAIK,您只能从电子表格复制并粘贴到文本文档。电子表格将作为表格插入,但未链接:如果在电子表格中进行了更改,它将不会反映在文本文档中。
当然,我绝对愿意证明自己是错误的!
这是一个基于脚本的解决方案,允许您在给定电子表格中插入具有给定范围内的内容的表。我没有尝试找到一种实时同步数据的方法,因为考虑到每次编辑到电子表格时都可能需要传输的大量数据,这似乎并不实际。而是,脚本将自定义菜单项“更新数据”添加到文档。
脚本应绑定到文档(即,使用文档菜单中的“工具”>“脚本编辑器”创建)。在脚本中指定了电子表格URL以及要使用的工作表和范围。要将所有数据嵌入到工作表中,请替换.getRange(rangeName)
为.getDataRange()
。
第一次执行updateData函数时,它将表添加到文档末尾。在随后的运行中,它将在适当的位置更新表格(即,如果在表格之后添加了更多文本,则将保留顺序)。
请注意,剪切粘贴表将中断更新过程(脚本将在末尾添加新表),因为粘贴的副本是新对象。而是将文本剪切粘贴到表格周围。
function onOpen() {
DocumentApp.getUi()
.createMenu('Custom')
.addItem('Update Data', 'updateData')
.addToUi();
}
function updateData() {
var ssUrl = ' spreadsheet url here ';
var sheetName = 'Sheet2'; // name of sheet to use
var rangeName = 'A1:C3'; // range of values to include
var values = SpreadsheetApp.openByUrl(ssUrl)
.getSheetByName(sheetName)
.getRange(rangeName)
.getValues();
var doc = DocumentApp.getActiveDocument();
var body = doc.getBody();
var ranges = doc.getNamedRanges('embeddedSheet-range');
if (ranges.length == 0) {
var table = body.appendTable(values);
}
else {
tableRange = ranges[0];
table = tableRange.getRange().getRangeElements()[0].getElement();
var ind = body.getChildIndex(table);
tableRange.remove();
body.removeChild(table);
table = body.insertTable(ind, values);
}
var rangeBuilder = doc.newRange();
rangeBuilder.addElement(table);
doc.addNamedRange('embeddedSheet-range', rangeBuilder.build());
}
除了手动之外,每小时还可以同步数据。只需从“脚本编辑器”的“资源”菜单中添加基于时间的触发器,即可运行函数updateData。
也可以改编该脚本以绑定到源电子表格。这将需要更改文档的打开方式(例如,通过URL),但是其他逻辑是相同的。
该脚本的繁琐部分是获取文档中现有表的句柄。这需要将其放置在命名范围内。而且,完全替换表格元素比弄乱现有表格的条目更为方便。由于命名范围是不可变的,因此也会将其与包含的表一起删除,然后与新表一起重新创建。
/edit#gid=0
末尾的内容。