有没有办法保持两张纸同步?

时间:2013-12-07 17:09:33

标签: google-apps-script google-sheets

无法在Google文档中共享一张电子表格中的一张。因此,您必须共享整个电子表格。所以,我正在考虑编写一个脚本来同步两个工作表(每个工作表在不同的电子表格中)。我想使用一个函数将行作为数组来执行此操作。有没有更好的策略呢?

2 个答案:

答案 0 :(得分:4)

您可以实现此目的的一种方法是向两个电子表格添加一个脚本,将其内容复制到更改触发器上的另一个电子表格中。例如,如果要在两个电子表格中添加类似下面的内容,请交换源和目标信息。

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

只需为importData函数添加更改触发器,然后当对任一文档进行任何更改时,它会将内容复制到另一个电子表格,从而保持两者同步。

显然,如果两个电子表格同时更新,您将遇到麻烦。

答案 1 :(得分:3)

双向同步是一个难题,但Google Docs可以非常有效地解决这个问题。但是,在分享电子表格时,您对需要知道的担忧是常见的。您示例中的最佳选择可能是更改哪个工作表被视为共享数据的“主”。

每个需要编辑电子表格内容的人都应该在同一个“主”表上执行此操作,并利用Google文档提供的共享和修订跟踪功能。如果您需要或希望将该工作表的全部或部分与其他工作表组合在一起,例如,要对主工作表的所有编辑者提供特权且不可用的其他数据执行审阅,请使用ImportRange()电子表格功能。从主表单中拉出的辅助表单,实际上是单向同步。