Как я могу скопировать проверки данных из одной электронной таблицы в другую, используя скрипт Google - PullRequest
0 голосов
/ 27 октября 2018

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

Я использую:

  var myCell = SpreadsheetApp.getActive().getRange('D4');
  var rule = myCell.getDataValidation();

но, очевидно, электронная таблица не активна во время процесса сценария, поэтому правило имеет значение null.

1 Ответ

0 голосов
/ 29 октября 2018

Если вы можете проверить этот продукт форум , там ответили.

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

Скопируйте лист из исходного сообщения , затем выполните следующие действия:

  1. Выберите диапазон ячеек, в которые вы хотите скопировать данные
    правило проверки относительно
  2. В пользовательском меню Validation + выберите соответствующий параметр (все относительные ссылки, абсолютные столбцы или абсолютные строки)
  3. Проверка левой верхней ячейки будет скопирована на остальные диапазон

Также, если вы хотите создать с нуля, я выложу тот же скрипт, который был указан в SO сообщении:

function onOpen()
{
  SpreadsheetApp.getActiveSpreadsheet().addMenu
  (
    "Validation+",
    [
      {name: "Copy validation (all relative references)", functionName: "copyValidation"},
      {name: "Copy validation (relative rows, absolute columns)", functionName: "copyValidationColumnsAbsolute"},
      {name: "Copy validation (absolute rows, relative columns)", functionName: "copyValidationRowsAbsolute"}
    ]
  );
}

function copyValidation(rowsAbsolute, columnsAbsolute)
{
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var r = ss.getActiveRange();
  var dv = r.getDataValidations();
  var dvt = dv[0][0].getCriteriaType();
  if (dvt != SpreadsheetApp.DataValidationCriteria.VALUE_IN_RANGE) return;
  var dvv = dv[0][0].getCriteriaValues();
  Logger.log(dvv);
  for (var i = 0; i < dv.length; i++)
  {
    for (var j = i ? 0 : 1; j < dv[0].length; j++)
    {

      dv[i][j] = dv[0][0].copy().withCriteria(dvt, [dvv[0].offset(rowsAbsolute ? 0 : i, columnsAbsolute ? 0 : j), dvv[1]]).build();
    }
  }
  r.setDataValidations(dv);
}

function copyValidationRowsAbsolute()
{
  copyValidation(true, false);
}

function copyValidationColumnsAbsolute()
{
  copyValidation(false, true);
}
...