首页 文章

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

提问于
浏览
0

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

我的脚本工作时间:

  • 工作表的源ID和目标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时,它不起作用 . 它可能与权限有关吗?我试图发布两个电子表格 .

这不是:

...

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

...

由于我正在尝试创建双向同步,我认为我不能使用IMPORTRANGE

Source SpreadSheet

Destination SpreadSheet

1 回答

  • 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” .

相关问题