我希望这不会让我输分,但是我一直到处寻找并且找不到答案:
有没有办法在新副本中保留受保护范围?
如果不可能,请使用
Pagination
在新副本上?
但是后来我不知道如何将其分配给新副本,因为脚本将在原始电子表格中,并且电子表格的副本在创建之前没有ID ...
答案 0 :(得分:4)
a spreadsheet
中的Make a copy of a spreadsheet while keeping protected ranges
表示电子表格中的工作表。在复制电子表格时,也会复制受保护的范围。所以我像上面一样理解。如果我的理解是正确的,那么这个答案呢?请认为这只是几个答案之一。
不幸的是,在当前阶段,当使用Class Sheet的copyTo()
和Sheets API的copyTo方法将工作表复制到Spreadsheet时,不会复制受保护的范围。这种情况与手动副本相同。
为了复制保护范围,需要将保护范围复制到复制的图纸上。但是,在这种情况下使用电子表格服务时,脚本会变得有些复杂。因此,在此答案中,作为一种解决方法,我使用了Sheets API。在这种情况下,由get方法检索的对象与batchRequest方法的请求主体几乎相同。所以我用了这个。
在使用此脚本之前,请在高级Google服务中启用Sheets API。而且,请设置变量srcId
,srcSheetName
和dstId
。
var srcId = "###"; // Please set source Spreadsheet ID.
var srcSheetName = "###"; // Please set source sheet name you want to copy.
var dstId = "###"; // Please set destination Spreadsheet ID.
var src = SpreadsheetApp.openById(srcId);
var dst = SpreadsheetApp.openById(dstId);
var sheetId = src.getSheetByName(srcSheetName).copyTo(dst).getSheetId();
var protectedRanges = Sheets.Spreadsheets.get(srcId, {ranges: [srcSheetName], fields: "sheets/protectedRanges"});
var requests = protectedRanges.sheets[0].protectedRanges.map(function(e) {
e.range.sheetId = sheetId;
return {addProtectedRange: {protectedRange: e}};
});
Sheets.Spreadsheets.batchUpdate({requests: requests}, dstId);
如果我误解了您的问题,并且此解决方法不是您想要的方向,我深表歉意。