取消保护错误消息时:目标范围和源范围必须在同一电子表格上

时间:2020-09-05 16:23:55

标签: google-apps-script google-sheets

我有一个主电子表格应用程序,该应用程序具有静态(=结构不变,仅内容上不变)Gsheet'gameSchedule',其数据在一定范围内。

我们团队中的每个玩家都有自己的电子表格应用,其中包含“ gameSchedule”的副本,他应该在该应用中维持计划参加的比赛。

在维护“ gameSchedule”的内容时,我想向玩家释放(=取消保护)某些范围。

我的脚本从主Gsheet“ gameSchedule”中将玩家应该维护的范围收集到数组“ readyForEdit”中。

当我尝试使用以下语句取消保护各个玩家纸牌中的范围时:

protection.setUnprotectedRanges(unprotect);

我收到一条错误消息,说目标范围和源范围必须在同一电子表格中

“保护”的定义如下

...
 var protection = sheet.protect().setDescription('GameSchedule');  
...

(在循环中)为每个玩家重新定义“工作表”。

数组'unprotect'基于这样的'readyForEdit':

...
var unprotect = [];
...
for (var l = 0; l < 31; l++){
  unprotect[i] = readyForEdit[l].offset(0, columnsPerWeek *k );
};
...

我希望我的解释是可以理解的。

谢谢您的输入。

如何以最小的可复制示例为例?

  //Source
  var sourceSpreadsheet = SpreadsheetApp.getActive();  
  var sourceSheet = sourceSpreadsheet.getSheetByName('GameSchedule');    
  var readyForEdit = [];  
  readyForEdit[0] = sourceSheet.getRange("E6:E12");


  //Destination spreadsheets
  var destinationSpreadsheet = SpreadsheetApp.openById(sheePlayerID);  
  var sheet = destinationSpreadsheet.getSheetByName('GameSchedule');

  var protection = sheet.protect().setDescription('GameSchedule');  

  var unprotect = [];

  unprotect[0] = readyForEdit[0].offset(0, 1);

  protection.setUnprotectedRanges(unprotect);

1 个答案:

答案 0 :(得分:1)

解决了

unprotect[0] = sheet.getRange(readyForEdit[0].offset(0, 1).getA1Notation());