【问题标题】:Sync multiple google spreadsheets(5+) back to a master google spreadsheet将多个谷歌电子表格(5+)同步回一个主谷歌电子表格
【发布时间】: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


【解决方案1】:

您可以导入所有数据,然后对数组使用 JavaScript sort() 方法。

var thisData = thisWorksheet.getDataRange();

var arryOfData = thisData.getValues();
Loggger.log('arryOfData: ' + arryOfData[0]);

var dataSorted = thisData.sort();
Logger.log('dataSorted: ' + dataSorted[0]);

运行代码,然后查看日志以查看返回到变量中的内容,以此来调试代码。

然后您可以使用indexOf()slice() 删除您不需要的部分数据。

【讨论】:

  • 这实际上是个好主意。不过,为了更进一步,我仍然坚持将截断的数据更新回主电子表格的问题。使用我目前拥有的代码,它只会复制整个工作表,而不仅仅是更改。有什么想法吗?
【解决方案2】:

需要使用多个 Google 表格和 Excel 的解决方案:

我让用户在 Google 云端硬盘上编辑自己的文件。我的主表将所有必要的信息合二为一。谷歌在谷歌表格中有内置命令,可以从其他表格中的特定位置获取数据。 创建一个主 google 表格文档以将所有相关信息提取到 1 个文档中。这可以保护您不想查询的所有其他信息,并将其全部放入 1 个谷歌表格中。

(出于隐私原因,我更改了一些字母,这只是一个示例:) 把这是您要导入数据的单元格,即 A1。 它将从名为 Totals 的工作表中导入数据,从 A1 到 C2。

=IMPORTRANGE("1l9jPPp5ylfgAjO_PDymXSR_ivfwHG1j7Ax-UASi6UYc","Totals!A1:C2")

=IMPORTRANGE("Put-Your-Document-Key-Here","PutSheetNameHere!将范围或单个单元格放在这里。")

我的主表已发布,因此我可以使用查询将其导入 excel。

您从 URL 获取文档密钥。打开您要从中导入数据的 Google 表格,URL 应该是这样的:

https://docs.google.com/spreadsheets/d/1l9jPPp5ylfgAjO_PFymXSR_ivfwHG1j7Ax-UASi6UYc/edit#gid=0

在文档设置中,您可以让它每分钟检查和更新一次。

那么:您可以在 Excel 中执行 1 个网络查询。

如果您只使用 excel,只需制作一个共享的 google 驱动器或将文档共享到您的驱动器中。在您的计算机上安装 Google Drive,然后像往常一样引用驱动器上的 excel 文件。谷歌驱动器会保持更新。最简单的解决方案是让每个人都使用 excel,然后将文件共享到您的计算机同步驱动器。之后,只需使用对其他 excel 文件的正常引用,这些文件将在您的驱动器上的一个固定位置。

http://www.officetooltips.com/excel/tips/referencing_cells_outside_the_worksheet.html

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-22
    • 2011-05-29
    • 2012-05-02
    相关资源
    最近更新 更多