Как получить следующую пустую позицию ячейки в определенном столбце, Google Apps Script - PullRequest
0 голосов
/ 11 ноября 2019

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

Вот код, который я изначально написал.

function isempty(x, y){
  alert(SpreadsheetApp.getActiveSheet().getRange(y, x).isBlank());
    return SpreadsheetApp.getActiveSheet().getRange(y, x).isBlank();
}
function nextopencell(column){
  var x = 0;
  var b = 1;
  while(b != 2){
   x++;
   var data = isempty(x, column);
    if(data == true){
      b = 2;
    }
  }
  alert(x);
return x;
}

Когда в ячейке 5 непустых ячеекстолбец, первая из которых является первой ячейкой в ​​столбце, я ожидаю, что возвращаемое значение будет 6, но функция возвращает 3 независимо от фактических состояний (непустых, пустых) ячеек в столбце.
Любая помощь будет принята с благодарностью.

Ответы [ 2 ]

0 голосов
/ 11 ноября 2019

Это другой подход к тому, что вы собираетесь делать. В моем коде я использую метод .getDataRange(). Это позволит получить все данные на вашем листе, а затем с помощью цикла for вы можете перебрать все строки и указать с помощью аргумента column , из какого столбца вы хотите получить значения.

function nextopencell(column){

  // Get the active spreadsheet and sheet
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var sheet = ss.getSheets()[0];

  // This represents ALL the data
  var range = sheet.getDataRange();
  var values = range.getValues();

  // Build a new array to fill it with the desire data
  var newColArray = [];

  // Iterate over all rows
  for (var i = 0; i < values.length; i++) {
    // With the column we specify in what column we want to extract the data
    if (values[i][column]) {
       // fill array
       newColArray.push(values[i][column]);
    } else{
       // Show what cells are empty
       Logger.log("This is an empty cell at column " + (column+1).toString() + " and row " + (i+1).toString());
    }
  }

  // This is the built array to fill a new column as you want
  Logger.log(newColArray);

}

Для получения дополнительной информации вы можете проверить это .

0 голосов
/ 11 ноября 2019

Sheet.getRange() ожидает первую строку и вторую колонку, поэтому переверните x & y в ваших getRange() вызовах.

function isempty(x, y) {
  alert(SpreadsheetApp.getActiveSheet().getRange(x, y).isBlank());
  return SpreadsheetApp.getActiveSheet().getRange(x, y).isBlank();
}

Также, пожалуйста,прочтите «Сценарий приложений» Best Practices и найдите способы улучшить ваш сценарий. Например, в приведенном выше фрагменте кода вы выполняете isBlank() дважды, но вам нужно сделать это только один раз.

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