Я создаю сильно автоматизированную и динамичную электронную таблицу 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.