问题描述
我已经在Google文档中链接了工作表的一部分(作为链接对象)。现在,无论何时更改工作表数据,我都可以单击google doc中的按钮,数据也将反映在google doc链接的工作表中(这都是内置于google doc中的东西)。
我想做的是另一方面。根据链接的表格,我可以在一个地方(Google文档)看到一堆数据。我想更新Google文档中的数据,然后将其“上传”到链接的Google表格中。
我正在尝试编写脚本来做到这一点。但是似乎找不到任何方法来访问链接的工作表。我发现这个slides API page可以完成工作表->幻灯片同步。
我正在查看document API page,但是我扫描了add ...和get ...方法,但没有找到找到链接对象的任何方法。它表示为NamedRange吗?如果是这样,我该如何访问它?
有another similar question,但没有令人满意的答案。
如果您可以共享一些入门指南,我将不胜感激。
编辑:这是一个示例文档(以及包含它们的电子表格),以更清楚地说明这种情况。 Test document for updating spreadsheet - Google Docs
解决方法
您可以通过Table在文档中找到findElement(elementType)元素。如果这是您文档中唯一的表格(如您共享的样本中的表格),则该表格是即时的。
一旦检索到Table
,就可以遍历其rows和cells并用表中的值提供2D数组:
function getTableValues() {
const doc = DocumentApp.getActiveDocument();
const body = doc.getBody();
const table = body.findElement(DocumentApp.ElementType.TABLE).getElement();
let tableValues = [[]];
for (let i = 0; i < table.getNumRows(); i++) {
const tableRow = table.getRow(i);
for (let j = 0; j < tableRow.getNumCells(); j++) {
const tableCell = tableRow.getCell(j);
const text = tableCell.getText();
tableValues[i].push(text);
}
if (i == table.getNumRows() - 1) break;
tableValues.push([]);
}
return tableValues;
}
完成此操作后,只需将其通过setValues(values)复制到电子表格中即可:
function copyToSheet(tableValues,spreadsheetId) {
const sheet = SpreadsheetApp.openById(spreadsheetId).getSheetByName("Sheet1");
sheet.getRange(1,1,tableValues.length,tableValues[0].length).setValues(tableValues);
}
在同一个函数中调用这两个函数,您将得到以下信息:
function main() {
const tableValues = getTableValues();
const spreadsheetId = "{your-spreadsheet-id}";
copyToSheet(tableValues,spreadsheetId);
}
注意:
- getActiveDocument()用于检索文档,因此假设脚本已绑定到您的文档。如果不是这种情况,请改用openById(id)或openByUrl(url)。