Используйте Apps Script для создания проверки данных, которая использует именованный диапазон - PullRequest
0 голосов
/ 03 декабря 2018

Вот код:

  var sheet = spreadsheet.getSheetByName("Timesheet");
  sheet.getRange('B27').setDataValidation(SpreadsheetApp.newDataValidation()
  .setAllowInvalid(false)
  .requireValueInRange(spreadsheet.getRange('TaskItems'), true)
  .build());

Приведенный выше код успешно создает раскрывающееся меню проверки данных в ячейке B27, которое соответствует именованному диапазону «TaskItems».Однако правило проверки данных, создаваемое сценарием приложения, использует фактический адрес «TaskItems» (C2: 1300), а не сам «TaskItems».Поэтому, если я обновлю адрес именованного диапазона «TaskItems» до D2: 1300, то мои правила проверки данных больше не будут работать, потому что они по-прежнему используют C2: 1300.

Я могу установить правила проверки данных вручную для каждогоячейка в именованный диапазон «TaskItems», и все отлично работает, даже когда «TaskItems» меняется.Однако я не могу заставить скрипт приложения использовать фактический именованный диапазон в правиле, а не адрес именованного диапазона при создании правила.

Я попытался отключить объект диапазона строкой, подобнойтак:

var sheet = spreadsheet.getSheetByName("Timesheet");
  sheet.getRange('B27').setDataValidation(SpreadsheetApp.newDataValidation()
  .setAllowInvalid(false)
  .requireValueInRange('TaskItems', true)
  .build());

, но я получаю сообщение об ошибке, в котором requireValueInRange не принимает строку.

Кто-нибудь знает, как заставить скрипт приложения использовать фактический именованный диапазон в правиле проверки данных

Ответы [ 2 ]

0 голосов
/ 19 января 2019

У меня была точно такая же проблема, и я был разочарован, что не нашел здесь ответа.Очень странно, что что-то, что вы можете сделать вручную, невозможно с помощью сценария.

Но я просто придумываю обходной путь.

Добавьте проверку вручную в ячейку, которая ссылается наваш названный диапазон.Затем в сценарии скопируйте проверку из этой ячейки туда, куда вы хотите.Скопированное правило проверки использует имя именованного диапазона - так же, как требуется.

Здесь скрипт, который я использовал для проверки этого.

function setvalidation() {
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var sheet = ss.getSheetByName("TEST");

  var vrule = sheet.getRange(1,1).getDataValidation();  
                               // Previously, you would have set up the validation in cell A1
  sheet.getRange(1,2).setDataValidation(vrule);         // Copy the validation rule to cell A2

}
0 голосов
/ 04 декабря 2018

Проверка данных, а также другие функции Google Sheets, такие как условное форматирование, не работают с именованными диапазонами.

Вы пытаетесь решить проблему X, в этом случае обрабатывает значение проверки данных.в ссылке на диапазон , и вы думаете, что решение Y, в этом случае будет использоваться именованный диапазон , но вместо того, чтобы спрашивать о X при возникновении проблем, вы спрашиваете о Y.

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

Ссылка

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