У меня есть код, который находит значение в столбце A и возвращает другие значения столбца в этой строке:
function getCurrentRow(e) {
var parsedJson = JSON.parse(e.postData.contents);
var ss = SpreadsheetApp.openById("...");
var sheet = ss.getSheetByName("List");
var column = sheet.getRange("A:A");
var values = column.getValues();
var row = 0;
while ( values[row] && values[row][0] !== parsedJson.myValue ) {
row++;
}
if (values[row][0] === parsedJson.myValue) {
var record = {};
record['top'] = sheet.getRange((row+1), 2).getValue();
record['bottom'] = sheet.getRange((row+1), 3).getValue();
return ContentService.createTextOutput(JSON.stringify(record)).setMimeType(ContentService.MimeType.JSON);
}
}
Он работает, но когда он не может найти myValue, он возвращает
TypeError: Невозможно прочитать свойство "0" из undefined.
в этой строке:
if (values[row][0] === parsedJson.myValue) {
Как я могу исправить это и вернуть "Не могу найти myValue" вместо этого?
if (values[row][0] === parsedJson.myValue) {
должно быть
if (values[row] && values[row][0] === parsedJson.myValue) {
Пока существуют values[row]
, вы добавляете 1 к row
с row++
. Скажем, Есть 5 строк (индекс: от 0 до 4) в A:A
и values[row][0] !== parsedJson.myValue
во всех 5 строках. В последней строке (фактическая строка 5, индекс: 4), row++
добавляет 1, а теперь row
5 (индекс: 5). Но values[5]
не существуют и не определены, что не имеет свойства [0]
.
Добавьте еще одно условие в while
условия:
var lastRowIndex = values.length;
while ( values[row] &&
values[row][0] !== parsedJson.myValue
&& row < lastRowIndex ) {
row++;
}
row
является индексом. Фактическая строка равна 6, но row
/ индекс равна 5. Лучше было бы выбрать row
именем переменной, чтобы избежать путаницы, поскольку она обозначает только индекс массива, а не фактический номер строки.