Google Apps Script / Google Sheet Ошибка? Копирование / повторная настройка проверки данных в именованном диапазоне не работает на дублированных листах - PullRequest
0 голосов
/ 14 марта 2019

СМОТРИТЕ НАСТОЯЩИЙ ПРИМЕР ЗДЕСЬ

Ситуация: проверка данных в ячейках, которые ссылаются на диапазон посредством прямой ссылки (A1Notation), и проверка данных в других ячейках, которые ссылаются на именованный диапазон.

Работает оба.

При дублировании листа оба продолжают работать.Однако при сбросе проверок данных вручную в те же диапазоны или с помощью моего сценария проверка данных ячейки, к которой относится проверка данных через именованный диапазон, не будет работать, и нет никакой возможности установить ее заново, ссылаясь через именованный диапазон либовручную или путем копирования (.getDataValidation / .setDataValidation) с помощью сценария.

Посмотрите пример - запустите функцию сценария cp_dataValidation () на Листе 1 и Копии Листа1 в качестве активного листа.Затем щелкните раскрывающиеся списки проверки данных в ячейках.

enter image description here

В конечном итоге моя цель - выполнить копию проверки данных (ссылаясь на именованный диапазон) из одного диапазона в другой на дублированном листе с помощью сценария.

function cp_dataValidation() {
  var sheet = SpreadsheetApp.getActiveSheet()

  //cell with data validation referring to a named range
  var named_range_tmpl = sheet.getRange("B2");
  //cell with data validation referring to a range via A1Notation
  var range_tmpl = sheet.getRange("C2");

  //target cells to copy dataValidation to
  var nr_target = sheet.getRange("D2");
  var r_target = sheet.getRange("E2");


  nr_target.setDataValidation(named_range_tmpl.getDataValidation());
  r_target.setDataValidation(range_tmpl.getDataValidation());


  Logger.log(JSON.stringify(named_range_tmpl.getDataValidation(), null, 2));
  Logger.log(JSON.stringify(range_tmpl.getDataValidation(), null, 2));
}

1 Ответ

1 голос
/ 14 марта 2019
  • Вы хотите скопировать проверку данных, включая именованный диапазон в качестве значений.

Если мое понимание верно, как насчет этого обходного пути?Кажется, что nr_target.setDataValidation(named_range_tmpl.getDataValidation()) нельзя использовать для именованного диапазона другого листа.В качестве обходного пути, как насчет использования метода copyTo()?

Модифицированный скрипт:

var sheet = SpreadsheetApp.getActiveSheet();
var source = sheet.getRange("B2:C2");
var target = sheet.getRange("D2:E2");
source.copyTo(target, SpreadsheetApp.CopyPasteType.PASTE_DATA_VALIDATION);
target.clearContent(); // or target.clear({contentsOnly: true}); // Added

Примечание:

  • Пожалуйста, протестируйте скрипт для обоихлистов.
  • Если вы хотите скопировать значение и проверку данных, используйте source.copyTo(target) вместо source.copyTo(target, SpreadsheetApp.CopyPasteType.PASTE_DATA_VALIDATION).

Ссылка:

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