使用谷歌表脚本在列中查找空单元格

时间:2017-12-05 21:31:05

标签: for-loop google-sheets

我试图在google工作表中的特定列中找到一个空单元格。我熟悉getLastRow(),但它返回整个工作表中的最后一行。我想获取特定列中的第一个空单元格。所以,我使用了for循环,如果。但我不知道它为什么不起作用。问题是for循环不返回任何东西。 我在表单测试(第2行)中得到10行H列(位置8)。前5行已经有内容。稍后将使用其他代码将数据添加到此单元格中。所以,我希望能够找到此列中的第一个空单元格,以便能够放入新数据。

var sheettest = SpreadsheetApp.getActive().getSheetByName("test");
var columntest = sheettest.getRange(4, 8, 10).getValues();  
    for(var i=0; columntest[i]=="" ; i++){
      if (columntest[i] ==""){ 
        var notationofemptycell = sheettest.getRange(i,8).getA1Notation();
        return notationofemptycell 
      }

  }

正如我所说,我想找到该列中的第一个空单元格。只要单元格不为空,我就定义了for循环。然后,如果单元格为空,则应返回该单元格的A1表示法。 似乎for循环一直持续到找到空单元格为止,因为我没有定义var" notationofemptycell"在调试中。

2 个答案:

答案 0 :(得分:1)

这可能更快:

function getFirstEmptyCellIn_A_Column() {
  var rng,sh,values,x;

  /*  Ive tested the code for speed using many different ways to do this and using array.some
    is the fastest way - when array.some finds the first true statement it stops iterating -


  */

  sh = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('test');
  rng = sh.getRange('A:A');//This is the fastest - Its faster than getting the last row and 
  //getting a specific range that goes only to the last row

  values = rng.getValues(); // get all the data in the column - This is a 2D array

  x = 0;

  values.some(function(ca,i){
    //Logger.log(i)
    //Logger.log(ca[0])

    x = i;//Set the value every time - its faster than first testing for a reason to set the value
    return ca[0] == "";//The first time that this is true it stops looping
  });

  Logger.log('x: ' + x)//x is the index of the value in the array - which is one less than 
  //the row number

  return x + 1;
}

答案 1 :(得分:0)

您需要遍历columntest的长度。试试这个:

function myFunction() {
  var sheettest = SpreadsheetApp.getActive().getSheetByName("test");
  var lr=sheettest.getLastRow()
  var columntest = sheettest.getRange(4, 8, lr).getValues();  
    for(var i=0; i<columntest.length ; i++){
      if (columntest[i] ==""){ 
        var notationofemptycell = sheettest.getActiveCell().getA1Notation();
        Logger.log( notationofemptycell)
        break;//stop when first blank cell on column H os found.
      }
  }
}