Google apps script 将多个google电子表格(5+)同步回主google电子表格

Google apps script 将多个google电子表格(5+)同步回主google电子表格,google-apps-script,google-sheets,Google Apps Script,Google Sheets,我很难找到将多张工作表同步到主电子表格的方法。 在我的测试中,我有一个大的电子表格,上面有5个城市的地址。我正在尝试为每个城市创建一个电子表格,并能够在任何一个表格中更改数据时同步数据。 因此,我将管理总体数据,5张电子表格中的每一张都将分配给其他人。这样,他们就可以在不访问所有数据的情况下更新工作表。使用内置查询或导入功能的问题是,如果用户在“城市”电子表格上进行更改,它将破坏该表格,因为数据被引用 在搜索之后,我在下面的“Dev”中找到了代码 var sourceSpreadsheetID

我很难找到将多张工作表同步到主电子表格的方法。 在我的测试中,我有一个大的电子表格,上面有5个城市的地址。我正在尝试为每个城市创建一个电子表格,并能够在任何一个表格中更改数据时同步数据。 因此,我将管理总体数据,5张电子表格中的每一张都将分配给其他人。这样,他们就可以在不访问所有数据的情况下更新工作表。使用内置查询或导入功能的问题是,如果用户在“城市”电子表格上进行更改,它将破坏该表格,因为数据被引用

在搜索之后,我在下面的“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查询,我会这样做,例如选择*where city='miami',但我认为这在google电子表格中是不可能的

所以我的下一个想法是使用这个脚本并在子电子表格上设置过滤器。问题是,当它运行脚本时,它会将整个工作表复制回来,如果5个用户中的任何一个同时更新自己的电子表格,这将导致一个问题,因为他们将覆盖彼此的更改。 我的另一个想法是,由于每条记录都有自己独特的idi,因此有一个名为id的列,有没有办法告诉活动电子表格在编辑时更新mastersheet中id=masterspreadsheet.id的行


如果您能提供正确的帮助,我们将不胜感激。

您可以导入所有数据,然后在数组上使用JavaScript排序方法

var thisData = thisWorksheet.getDataRange();

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

var dataSorted = thisData.sort();
Logger.log('dataSorted: ' + dataSorted[0]);
运行代码,然后查看日志,查看作为调试代码的一种方式返回到变量中的内容


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

对于那些必须使用多个Google工作表和Excel的用户的解决方案:

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

出于隐私原因,我更改了一些信件,这只是一个例子: 这是导入数据的单元格,即A1。 它将从名为Totals的工作表中导入数据,从A1导入C2

=导入1L9JPPP5YLFGAJO_PDymXSR_ivfwHG1j7Ax-UASi6UYc,总计!A1:C2

=导入将文档密钥放在此处,将SheetName放在此处!将范围或单个单元格放在这里

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

您可以从URL获取文档密钥。打开要从中导入数据的Google工作表,URL应如下所示:

1l9jPPp5ylfgAjO_PFymXSR_ivfwHG1j7Ax-UASi6UYc/editgid=0

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

然后:您可以在Excel中进行1次web查询

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


实际上,您可以在google电子表格中使用查询,但它将是动态的,因为数据总是在更新:。这能解决您的问题吗?我从一个单独的电子表格中提取数据,因此无法单独使用查询功能。我必须做一个引用数据的导入。所以不幸的是,这对我不起作用。这实际上是个好主意。不过,更进一步,我仍然要处理将截断的数据更新回主电子表格的问题。使用我目前拥有的代码,它将复制整个工作表,而不仅仅是更改。有什么想法吗?