Как getValues ​​() в скрипте Google Apps вернул неопределенное значение? - PullRequest
0 голосов
/ 22 января 2020

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

sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('Sheet1')
numberOfRows = 0
while(sheet.getRange(2,1,sheet.getLastRow()-1,1).getValues()[numberOfRows] != '') {
  numberOfRows ++
}

Я включил отладчик в Google Apps Script и обнаружил, что вышеупомянутое время при l oop не останавливалось. После дальнейшего тестирования я обнаружил, что пустые ячейки были «неопределенными» вместо обычной пустой строки, которую они должны были возвращать. Любая возможная причина, по которой ячейки могут возвращать «неопределенное» вместо «»?

Ответы [ 2 ]

2 голосов
/ 22 января 2020

Неопределенные значения не являются проблемой, l oop не заканчивается, потому что каждая строка является массивом, а массив никогда не равен '.

Когда код вызывает sheet.getRange(2,1,sheet.getLastRow()-1,1).getValues()[numberOfRows], Возвращаемое значение - массив столбцов. Если вы выбрали 3 столбца в своем диапазоне, строка будет выглядеть примерно так: ['A','B','C'].

Чтобы получить доступ к значению столбца в строке, вам нужно указать его индекс. В этом случае вы выбираете только один столбец (['A']), поэтому индекс равен 0.

При желании вы можете обнаружить, что код чище, если сначала поместить значения в переменную, это выбор стиля.

  var values = sheet.getRange(2,1,sheet.getLastRow()-1,1).getValues();
  var numberOfRows = 0;

  while(values[numberOfRows][0] != '' ){
     numberOfRows++;
  }
1 голос
/ 22 января 2020

Код имеет некоторые проблемы:

  1. , как указано в комментарии к вопросу, не рекомендуется использовать getValues() в других oop
  2. следующее выражение не может быть визуализировано в отладчике редактора скриптов Google Apps

    sheet.getRange(2,1,sheet.getLastRow()-1,1).getValues()[numberOfRows]
    
  3. вышеприведенное выражение возвращает массив, а не одно значение.
  4. значение l oop не останавливается, когда достигнут последний ряд.


Предположение, что getValues() вернул undefined, неверно. Это вызвано тем, что numberOfRows имеет значение, равное или большее, чем число элементов, возвращаемых getValues(), поскольку JavaScript индексы массивов основаны на нуле.

Для возможности использования отладчика скриптов Google Apps Вы должны добавить больше строк кода

var values = sheet.getRange(2,1,sheet.getLastRow()-1,1).getValues();

Относительно

Я пытался подсчитать количество заполненных ячеек в столбце, и как только он опустеет, счетчик должен Стоп.

Я думаю, что лучшая формулировка "найти первую пустую ячейку". В любом случае, он должен остановиться и при достижении последнего ряда столбца.

var numberOfRows = 0;
while(numberOfRows < values.length && values[numberOfRows][0] !== ''){
  numberOfRowss++;
}
...