【问题标题】:How do I detect the newest row in a specific column?如何检测特定列中的最新行?
【发布时间】:2019-07-04 00:28:43
【问题描述】:

我目前在使用 Google 应用脚本时遇到了一些问题。

我们现在要做的是:当用户在列中输入两个值(时间)时,列之间的持续时间将在另一列中自动计算,这是我们通过电子表格本身的函数完成的。

当我们传输输入值时,我们使用函数 appendRow,由于列中的事情会变得混乱,我们将应该在持续时间列中输入的值设置为 null,以便将其填充为空白并且电子表格本身中的函数将计算它。但是,我们遇到的问题是,通过在电子表格中使用此函数,我们在没有时间输入的每一行中都获得 00:00 作为默认值,这意味着 appendRow 函数将检测这些行为已填充,并将值附加到电子表格的最底部,从而在有值的行和没有值的行之间产生很大的差距。

我们需要一个解决方案来解决这个问题,我们正在发布关于这个问题的任何可能的解决方案。

所以我们想到的解决这个问题的方法是使用getRange(),然后使用setValue。使用 getRange,我们考虑使用类似制作 1x1 网格的方法,该网格的行索引与我们要导入值的特定列中的新单元格的行索引相同,对于列,我们只需选择列索引。但我们很快意识到这仍然会失败,因为行索引中的 appendRow 仍将返回电子表格中最后一行的行索引。

我们尝试的下一个方法是检测持续时间列中的任何“0:00:00”,然后获取相应的行索引,并使用该行索引使用 getRange() 在该特定行设置值,这又一次,失败了。

for (var i = 0; i < sheet.getMaxRows()+1; i++ ){
    if (sheet.getRange(i,4).getValue() === "0:00:00") {
        sheet.getRange(i,1).setValue(datas.enterDate);
        sheet.getRange(i,2).setValue(datas.enterStartTime);
        sheet.getRange(i,3).setValue(datas.enterEndTime);
        sheet.getRange(i,6).setValue(datas.enterFullName);
        sheet.getRange(i,7).setValue(datas.enterCategory);
        sheet.getRange(i,8).setValue(datas.enterActivity);
        sheet.getRange(i,9).setValue(datas.enterLink);
        break;
     }
} 

预期结果:当函数在列中向下移动时,它将搜索包含“0:00:00”的任何单元格,并在搜索时使用用户数据设置值。

输出:没有显示。

【问题讨论】:

  • 是什么让一行最新?
  • 嗯,我将最新的行称为:最接近电子表格顶部的空行;所以如果第 1~50 行被填满,第 51 行以后为空,第 51 行是最新行
  • 如果在上一个示例中第 2 行为空但第 3 到 50 行已填满怎么办?
  • 将被跳过 - 我使用的电子表格将包含过去 5~6 个月的几千行数据。我所关心的是跳过整行中单列中只有“0:00:00”的行。

标签: google-apps-script


【解决方案1】:

试试这个:

col 是列号。默认为活动单元格的列 sh 是一个工作表对象,默认是当前活动工作表 ss 是一个电子表格对象,默认是当前活动的电子表格。

function newestRow(col,sh,ss){
  var ss=ss || SpreadsheetApp.getActive();
  var sh=sh || ss.getActiveSheet();
  var col=col || sh.getActiveCell().getColumn();
  var rg=sh.getRange(1,col,sh.getLastRow(),1);
  var vA=rg.getValues();
  while(vA[vA.length-1][0].length==0){
    vA.splice(vA.length-1,1);
  }
  return vA.length+1;
}

【讨论】:

  • 感谢您的代码,但我可以问一下 while(vA[vA.length-1][0].length==0){ vA.splice(vA.length-1,1) ; }
  • 我只是拼接出该列中的空白行,以寻找该列中的最后一行,因为如果不是确定工作表最后一行的列,那么它应该有一些空白行。跨度>
猜你喜欢
  • 1970-01-01
  • 2022-10-23
  • 2021-02-02
  • 2011-02-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多