用于从Google文档更新链接工作表的脚本 注意:

问题描述

我已经在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,就可以遍历其rowscells并用表中的值提供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);
}

注意: