母版上两个单独工作表的双向同步 Sheet

Bi-directional sync of two separate sheets on a Master Sheet

我是 GAS 的新手,我正在同步 3 Google Sheets,基于

Is there a way to keep two sheets synchronized?

我目前正在努力解决无法在 Master Sheet 上同时同步两个工作表的问题,我只能从任一工作表中获得一个数据集。 (例:SheetA1:C5的1个数据在MasterA1:C5和D1:F5上复制了两次)

Sheet1的代码如下所示

var sourceSpreadsheetID = "Sheet ID 1";
var sourceWorksheetName = "Sheet1";
var destinationSpreadsheetID = "Master ID";
var destinationWorksheetName = "Master";

function syncData() {
  var thisSpreadsheet = SpreadsheetApp.openById(sourceSpreadsheetID);
  var thisWorksheet = thisSpreadsheet.getSheetByName(sourceWorksheetName);
  var thisData = thisWorksheet.getRange("A1:C5");
  var toSpreadsheet = SpreadsheetApp.openById(destinationSpreadsheetID);
  var toWorksheet = toSpreadsheet.getSheetByName(destinationWorksheetName);
  var toRange = toWorksheet.getRange("A1:C5");
  toRange.setValues(thisData.getValues());
} 

对于Sheet 2,上面没有太大变化(只是“Sheet 1 ID”到“Sheet 2 ID”)但它在Master上的位置如下所示。

function syncData1() {
  var thisSpreadsheet = SpreadsheetApp.openById(sourceSpreadsheetID);
  var thisWorksheet = thisSpreadsheet.getSheetByName(sourceWorksheetName);
  var thisData = thisWorksheet.getRange("A1:C5");
  var toSpreadsheet = SpreadsheetApp.openById(destinationSpreadsheetID);
  var toWorksheet = toSpreadsheet.getSheetByName(destinationWorksheetName);
  var toRange = toWorksheet.getRange("D1:F5");
  toRange.setValues(thisData.getValues());
} 

您对全局变量的使用不是一个好的解决方案。假设您阅读了上面的评论,所以您进行了如下更正:

var sourceSpreadsheetID = "Sheet ID 1";
var sourceWorksheetName = "Sheet1";
var destinationSpreadsheetID = "Master ID";
var destinationWorksheetName = "Master";

function syncData() {
  var thisSpreadsheet = SpreadsheetApp.openById(sourceSpreadsheetID);
  var thisWorksheet = thisSpreadsheet.getSheetByName(sourceWorksheetName);
  var thisData = thisWorksheet.getRange("A1:C5");
  var toSpreadsheet = SpreadsheetApp.openById(destinationSpreadsheetID);
  var toWorksheet = toSpreadsheet.getSheetByName(destinationWorksheetName);
  var toRange = toWorksheet.getRange("A1:C5");
  toRange.setValues(thisData.getValues());
} 

var sourceSpreadsheetID = "Sheet ID 2";
var sourceWorksheetName = "Sheet2";

function syncData1() {
  var thisSpreadsheet = SpreadsheetApp.openById(sourceSpreadsheetID);
  var thisWorksheet = thisSpreadsheet.getSheetByName(sourceWorksheetName);
  var thisData = thisWorksheet.getRange("A1:C5");
  var toSpreadsheet = SpreadsheetApp.openById(destinationSpreadsheetID);
  var toWorksheet = toSpreadsheet.getSheetByName(destinationWorksheetName);
  var toRange = toWorksheet.getRange("D1:F5");
  toRange.setValues(thisData.getValues());
} 

您可能认为您已经解决了问题,但实际上您还没有从同一张纸上阅读 sheet 只是现在是 Sheet2 而不是 Sheet1。

不,确实没有让两个 sheet 保持同步的好方法。最好的方法可能是只拥有一个 sheet。您可以尝试使用 onEdit,但如果您真的有很多编辑器,那么它很可能无法跟上它们。