- Когда лист электронной таблицы копируется в другую электронную таблицу, вы также хотите скопировать защищенные диапазоны.
a spreadsheet
из Make a copy of a spreadsheet while keeping protected ranges
означает лист в электронной таблице.
При копировании электронной таблицы также копируются защищенные диапазоны.Так я понял как выше.Если мое понимание верно, как насчет этого ответа?Пожалуйста, подумайте об этом как об одном из нескольких ответов.
Проблема:
К сожалению, на текущем этапе, когда лист копируется в электронную таблицу с использованием copyTo()
Class Class Sheet и методаcopyTo of Sheets API, защищенные диапазоны не копируются.Такая же ситуация с копированием вручную.
Обходной путь:
Для копирования защищенных диапазонов необходимо скопировать защищенные диапазоны на скопированный лист.Но когда в этой ситуации используется Spreadsheet Service, скрипт становится немного сложнее.Поэтому в этом ответе в качестве обходного пути я использовал Sheets API.В этом случае объект, полученный методом get, почти совпадает с телом запроса метода batchRequest.Поэтому я использовал это.
Пример сценария:
Перед использованием этого сценария, пожалуйста, включите Sheets API в Advanced Google Services.А также, пожалуйста, установите переменные 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);
Ссылки:
Если я неправильно понял ваш вопрос, и этот обходной путь былне то направление, которое вы хотите, я прошу прощения.