Неизвестно «Исключение: должно быть свидание». ошибка в Google Scripts - PullRequest
0 голосов
/ 17 января 2020

Я создаю сильно автоматизированную и динамичную электронную таблицу c в электронной таблице Google. Одна из функций, участвующих в этом процессе, находит и возвращает ячейку в виде объекта Range с учетом ее листа и значения. По какой-то причине иногда (и только иногда ) эта функция выдает «Исключение: должна быть дата». ошибка.

Исходный код

/**
 * Find cell given its contents
 * Will output first cell from left to right then top to bottom if multiple cells have same contents
 * @param {Sheet} sheet The sheet to search for the cell
 * @param {Object} contents The cell's contents to identify it with
 * @param {number} rowOffset (optional) An int to offset the found cell by
 * @param {number} columnOffset (optional) An int to offset the found cell by
 * @return {Range} The cell with the contents or null if no matching cell was found
 */
function findCell(sheet, contents, rowOffset, columnOffset) {
  var cell, dataRange;
  var values;
  var i = 0, j, rowNum, colNum;
  var cellFound = false;

  dataRange = sheet.getDataRange(); // sometimes throws "Exception: Must be a date." error
  values = dataRange.getValues();

  while (!cellFound && i < values.length) {
    j = 0;
    while (!cellFound && j < values[0].length) {
      if (values[i][j] === contents) {
        cellFound = true;
      }
      j++;
    }
    i++;
  }

  if (!cellFound) {
    cell = null;
  } else {
    i--; j--; // counters increments after setting cellFound to true

    if (rowOffset === undefined) { rowOffset = 0; }
    if (columnOffset === undefined) { columnOffset = 0; }

    rowNum = dataRange.getRow() + i + rowOffset;
    colNum = dataRange.getColumn() + j + columnOffset;
    cell = sheet.getRange(rowNum, colNum);
  }

  return cell;
}

Я трижды проверил типы и значения параметров с помощью отладчика, и странно то, что при одинаковых аргументах эта функция обычно работает, но иногда не работает. в зависимости от того, какие другие функции были вызваны. То есть, funcA() звонит funcB(), что вызывает findCell(), а func1() звонит func2(), что также вызывает findCell(). Тогда бывают случаи, когда вызов funcA() работает, но func1() выдает ошибку, несмотря на то, что func2() и funcB() передают точно такие же аргументы findCell().

Я также не смог найти ни одного упоминание об этой ошибке в документации Google.

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