从 google 文档更新链接的 sheet 的脚本

A script to update linked sheet from google doc

我在 google 文档中链接了 sheet 的一部分(作为链接对象)。现在,每当我更改 sheet 数据时,我都可以单击 google 文档中的一个按钮,数据也会反映在链接 sheet 的 google 文档中(这都是内置的在 google 文档资料中)。

我想做的是这件事的另一面。基于我链接的 sheets,我能够在一个地方(google 文档)看到一堆数据。我想更新 google 文档中的数据,并将其“上传”到链接的 google sheets.

我正在尝试编写脚本来执行此操作。但似乎找不到任何方法来访问链接的 sheets。我发现这个 slides API page 可以执行 sheet -> 幻灯片同步。

我正在查看 document API page,但我浏览了添加...和获取...方法,我没有找到任何获取链接对象的方法。它是否表示为 NamedRange?如果是这样,我该如何访问它?

another similar question,但没有满意的答案。

如果您能分享一些入门指南,我将不胜感激。

编辑:这是一个示例文档(和一个传播sheet 包含它们)来更清楚地解释情况。 Test document for updating spreadsheet - Google Docs

您可以找到 Table elements in your Document via findElement(elementType)。如果那是您的文档中唯一的 Table,就像您共享的示例中那样,这是即时的。

检索到 Table 后,您可以遍历其 rows and cells 并得到一个二维数组,其中的值来自 table:

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);
}

注: