当前位置: 首页 > 知识库问答 >
问题:

使用谷歌工作表脚本在列中找到一个空单元格

闻人弘雅
2023-03-14

我试图在谷歌表单的特定列中找到一个空单元格。我熟悉getLastRow(),但它返回整个工作表中的最后一行。我想获取特定列中的第一个空单元格。所以,我使用了for循环和if循环。但我不知道为什么它不起作用。问题是for循环不返回任何内容。我得到了表单测试(第2行)中H列(位置8)的10行。前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个答案

阙项禹
2023-03-14

您需要循环使用列测试的长度。试试这个:

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.
      }
  }
}
华安民
2023-03-14

这可能更快:

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;
}
 类似资料:
  • 通过SpreadsheetApp global,使用绑定到电子表格的应用程序脚本来影响工作表非常简单。但是,有一些功能,例如在工作表上获取/设置过滤器,只能从GoogleSheetsRESTAPI访问。 我见过一个例子,它使用应用程序脚本中的UrlFetchApp来调用谷歌工作表应用编程接口,但它的编写方式好像应用程序脚本实际上没有绑定到特定的电子表格。 当我试图从绑定到电子表格的应用程序脚本中调

  • > 我正在尝试编写一个脚本,它将从一个工作表上的范围复制数据,并在B列的第一个空单元格中粘贴到另一个。我有一个脚本,可以将其粘贴到工作表中的第一个空单元格中这工作正常,但是我在列A中有一行静态的身份证号码,所以当它粘贴数据时,它就在工作表的下面。所以,我需要一种跳过列A并粘贴到列B中的第一个空单元格的方法。希望这有意义。 另一部分是B列中有时会有空单元格。所以它需要跳过这些来获得最后一个空单元格。

  • 我试图使用一个谷歌脚本,从检索2个证券字段,并将输出保存到Google Sheet文件。我还需要脚本将datetime添加到工作表的第一列。 我创建了一个包含3列的基本Google工作表: A的格式为DateTime。第1行中有列名称date,第2行之后为空 以下是我的功能: 以下是输出: C和D列的输出正确。A列输出错误。每次我运行该函数时,每一行都会在最后一行的上方添加: 我第一次运行该函数是

  • 我使用谷歌表单制作了一个简单的基于表单的化学品数据库。该表如下所示:https://docs.google.com/spreadsheets/d/e/2PACX-1vR0-AMEKNM3ZbDq67OIKWnc7E3KP8kfOsnr0Bjg2OSjpevLLjniknGXfIiiyZvbwE9bz3EfbOpO46ef/pubhtml?gid=292509613 有许多行和列。用户可以使用如下u

  • 我运行一个脚本在谷歌表脚本编辑器,以触发脚本我使用onChange在当前项目的触发器,使用特定的功能- 值得一提的是,我与另外3个拥有编辑权限的成员一起使用工作表,他们不时更改数据,我构建了脚本并激活了触发器。 当我更改工作表中的任何内容时,我会收到警报(触发器已打开),但当其他成员更改数据时,触发器不起作用。 我错过了什么? 谢谢

  • 我有一个谷歌电子表格,有两张叫做罗宾和露西的表格。每次我向列A添加一些数据时,我都制作/找到/破坏了一个脚本来对工作表上的数据进行排序 这个剧本很棒,但我只想把它应用在第一张纸上,罗宾。第二个工作表中的数据,Lucy,是不一样的,所以我将创建另一个脚本为不同的范围,一旦我得到了这个问题的头脑。 我想我需要使用getSheetByName(“罗宾”),但我似乎无法让它工作。提前感谢