从 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);
}
注:
- getActiveDocument() is used to retrieve the Document, so this assumes the script is bound to your Document. If that's not the case, use openById(id) or openByUrl(url) 代替。
我在 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);
}
注:
- getActiveDocument() is used to retrieve the Document, so this assumes the script is bound to your Document. If that's not the case, use openById(id) or openByUrl(url) 代替。