Сделайте копию электронной таблицы, сохраняя защищенные диапазоны - PullRequest
0 голосов
/ 11 июля 2019

Я надеюсь, что это не заставит меня терять очки, но я искал повсюду и не могу найти ответ:

  1. У меня есть электронная таблица с защищенными диапазонами.
  2. Я делаю копию таблицы.
  3. Защищенные диапазоны исчезли при копировании.

Есть ли способ сохранить защищенные диапазоны в новой копии?

Если это невозможно, возможно, используйте

var protection = spreadsheet.getRange('D1:G9').protect();

на новой копии?

Но тогда я понятия не имею, как назначить его новой копии, поскольку сценарий будет в исходной электронной таблице, а копия электронной таблицы не будет иметь идентификатора перед созданием ...

1 Ответ

4 голосов
/ 11 июля 2019
  • Когда лист электронной таблицы копируется в другую электронную таблицу, вы также хотите скопировать защищенные диапазоны.
    • 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);

Ссылки:

Если я неправильно понял ваш вопрос, и этот обходной путь былне то направление, которое вы хотите, я прошу прощения.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...