当用户从电子表格中手动复制一个范围并将其粘贴到Google中时,它会提示选择“链接到电子表格”和“正常粘贴”。
我需要做“用google应用程序脚本链接到电子表格”的功能。
用例上下文
我们有一个带有表格的电子表格,我们试图将其复制到最终文档中,用户可以在该文档中添加其他内容。
因此,如果由于任何原因需要更改电子表格中的值,我们的用户只想刷新表数据。
发布于 2020-10-30 07:16:57
回答
如果没有解决办法,这是不可能的。
在文档中的表对象中,没有像UI中那样使用“到电子表格的链接”插入表的方法。在Docs中的表对象中寻找,那里也没有暴露的任何东西。您可以在问题跟踪器中为此提交一个特性请求,目前,我看不到对此的任何特性请求。
解决办法的潜在途径
任何解决方法都不会像UI那样无缝,尽管如果您想要自动从特定源插入表,下面就是一个例子。
请注意,这只是一个起点。您应该尝试这一点,然后,如果您需要更多的功能,并遇到问题,您应该问新的问题,您有具体的问题。
导言和初步步骤
此脚本将从工作表中取出一张表。这张桌子应该是这张纸上唯一的东西。脚本的设置方式是使用getDataRange
,它自动选择工作表中的所有数据。您可以根据电子表格的设置方式对用例进行修改。
然后,它将将表附加到文档的末尾。您可以根据您的需要修改它。它将保留大部分格式。
样式将不完全匹配,尽管如此,这是可以根据您的用例确定细节的东西。
使用说明
function appendTable() {
// Replace these values with your Sheet ID, Document ID, and Sheet Name
let ssId = '<your spreadsheet id>' // REPLACE
let docId = '<your document id>' // REPLACE
let sheetName = '<your sheet name>' // REPLACE
// Sheet
let range = SpreadsheetApp.openById(ssId).getSheetByName(sheetName).getDataRange()
let values = range.getValues();
let backgroundColors = range.getBackgrounds();
let styles = range.getTextStyles();
// Document
let body = DocumentApp.openById(docId).getBody();
let table = body.appendTable(values);
for (let i=0; i<table.getNumRows(); i++) {
for (let j=0; j<table.getRow(i).getNumCells(); j++) {
let docStyles = {};
docStyles[DocumentApp.Attribute.BACKGROUND_COLOR] = backgroundColors[i][j];
docStyles[DocumentApp.Attribute.FONT_SIZE] = styles[i][j].getFontSize();
docStyles[DocumentApp.Attribute.BOLD] = styles[i][j].isBold()
table.getRow(i).getCell(j).setAttributes(docStyles);
}
}
}
参考文献
https://stackoverflow.com/questions/64606458
复制