将内容从一个电子表格复制到另一个电子表格而不使用IMPORTRANGE

时间:2014-05-16 19:14:57

标签: google-apps-script google-sheets

我试图在两个谷歌电子表格之间创建一些内容的双向同步。

我的脚本在以下情况下正在运行:

  • 工作表的来源和目标ID相同且具有活动电子表格的ID

所以,这个工作:

function myFunction() {

 var sourceSpreadsheet = SpreadsheetApp.openById("ID-OF-ACTIVE-SPREADSHEET");
 var destinationSpreadsheet = SpreadsheetApp.openById("ID-OF-ACTIVE-SPREADSHEET");

 var sourceSheet = sourceSpreadsheet.getSheetByName("sheet1");
 var destinationSheet = destinationSpreadsheet.getSheetByName("sheet2");

 var sourceRange = sourceSheet.getRange("A1:A4");

 // destination, columnStart, columnEnd, rowStart, rowEnd
 sourceRange.copyValuesToRange(destinationSheet, 2, 2, 3, 7);

}

但是当我用另一个电子表格的ID替换目标ID时,它不起作用。它可能与权限有关吗?我试图发布两个电子表格。

这就是' T:

...

 var sourceSpreadsheet = SpreadsheetApp.openById("ID-OF-ACTIVE-SPREADSHEET");
 var destinationSpreadsheet = SpreadsheetApp.openById("ID-OF-ANOTHER-SPREADSHEET");

...

由于我尝试创建双向同步,我不认为我可以使用IMPORTRANGE

Source SpreadSheet

Destination SpreadSheet

1 个答案:

答案 0 :(得分:1)

似乎copyValuesToRange不在电子表格之外进行通信,这是一个可行的解决方案:

function onChange() {

  var sourceSpreadsheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Sheet1");
  var sourceData = sourceSpreadsheet.getRange("A1:A8").getValues();
  var targetSpreadsheet = SpreadsheetApp.openById("ID-OF-ANOTHER-SPREADSHEET").getSheetByName("Sheet1");

  targetSpreadsheet.getRange("A1:A8").setValues(sourceData);
}

PS:这也可以实现电子表格之间的双向同步,只需在电子表格A和B上添加此代码的副本,并将“ID-OF-ANTHER-SPREADSHEET”替换为另一个电子表格的ID。然后定义from-和to范围代替“A1:A8”。