【发布时间】:2015-01-06 20:45:20
【问题描述】:
我很难找到将多张工作表同步到主电子表格的方法。 对于我的测试,我有一个包含 5 个城市地址的大型电子表格。我正在尝试为每个城市创建一个电子表格,并能够在任一工作表中更改数据时同步数据。 所以我会管理整体数据,5 个电子表格中的每一个都将分配给其他人。这样,他们可以在没有访问所有数据的情况下更新工作表。使用内置查询或 importrange 函数的问题是,如果用户对“城市”电子表格进行更改,则会因为引用了数据而破坏工作表。
我通过搜索找到了下面'Dev'的代码。
var sourceSpreadsheetID = "ID HERE";
var sourceWorksheetName = "SHEET NAME HERE";
var destinationSpreadsheetID = "ID HERE";
var destinationWorksheetName = "SHEET NAME HERE";
function importData() {
var thisSpreadsheet = SpreadsheetApp.openById(sourceSpreadsheetID);
var thisWorksheet = thisSpreadsheet.getSheetByName(sourceWorksheetName);
var thisData = thisWorksheet.getDataRange();
var toSpreadsheet = SpreadsheetApp.openById(destinationSpreadsheetID);
var toWorksheet = toSpreadsheet.getSheetByName(destinationWorksheetName);
var toRange = toWorksheet.getRange(1, 1, thisData.getNumRows(), thisData.getNumColumns())
toRange.setValues(thisData.getValues());
}
这很好用,因为它复制数据允许我进行编辑,但问题是我不能只导入我想要的数据。如果我可以使用 sql 查询,id 做例如选择 * where city = 'miami' 但我相信目前谷歌电子表格无法做到这一点。
所以我的下一个想法是使用这个脚本并在子电子表格上设置过滤器。问题是当它运行脚本时,它会将整个工作表复制回来,如果 5 个用户中的任何一个同时更新他们自己的电子表格,则会导致问题,因为他们会覆盖彼此的更改。 我的另一个想法是,由于每条记录都有自己唯一的 id#(我有一个名为 id 的列),有没有办法告诉活动电子表格在编辑时更新主表中 id = masterspreadsheet.id 的行?
我们将不胜感激任何正确方向的帮助。
【问题讨论】:
-
您实际上可以在 google 电子表格中使用 QUERY,但它将是动态的,因为数据将始终更新:support.google.com/docs/answer/3093343?hl=en。这能解决您的问题吗?
-
我正在从单独的电子表格中提取数据,因此我不能单独使用查询功能。我必须做一个引用数据的导入范围。所以不幸的是,这对我不起作用。
标签: google-apps-script google-sheets