包含工作表上数据的真实最后一行和最后一列

时间:2020-07-03 19:03:03

标签: google-apps-script google-sheets

我有一个工作表,可以从外部源获取自刷新数据。此工作表可能没有相同的lastRow或lastColumn。我需要找到一种最快的方法来确定什么是包含数据的工作表的真正的lastRow和真正的lastColumn。我需要排除包含公式或数据验证的单元格。另外,随着数据刷新,行计数和列计数每次都会更改,因此有时getLastRow()getLastColumn()不能正常工作,但包含空格。

我看过一些代码,需要您输入特定的列或行号才能标识其最后一个数据行或数据列。我想知道是否有排除这种输入的方法。

  function DoIt(){

    var sht = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
    var Rng = sht.getDataRange().getValues();

    Rng.forEach(function (row,index) {
        if (row[0] == "") {                   // row[0] is the same as Column A. row[1] = B
            Rng.length = index;
        }
    });
    var newRange = sht.getRange(Rng.length,1);
    Logger.log(newRange.getA1Notation());
}

例如,在下图中,lastRow应该是row 11,因为cell D11中有一个值,而lastColumn应该是column Fcell F3中的值。因此,[row:11,col:6]应该是直接的答案。

data range

是否有一种有效且快捷的方法来查找工作表的真正的lastrow和lastcolumn?

2 个答案:

答案 0 :(得分:1)

很有可能发生此问题,因为您没有在同一时间比较最后一行/最后一列。

使用var Rng = sht.getDataRange().getValues();时 最后一行是Rng.length,最后一列是Rng[0].length。它们应与sht.getLastRow()sht.getLastColumn()相同。

如果您要对电子表格进行更改,则应等待电子表格更新过程完成,并且更新会散布到Google数据中心,然后再次读取最后一行/最后一列。

您可能会考虑在时间驱动触发器的最后一次更改的某处添加时间戳(可能是属性,或者可能是单元格),以确保您正在阅读哪个电子表格“修订”。

答案 1 :(得分:0)

我做了这些单行函数,以便在不考虑指定任何特定行或列并为我提供正确结果的工作表上查找真正的lastColumn或真正的lastRow。

function FindLastRow(sht) {
  return sht.getRange(1,1).getDataRegion().getLastRow();
};

function FindLastColumn(sht) {
  return sht.getRange(1,1).getDataRegion().getLastColumn();
};
    
function test(){
  var sht = SpreadsheetApp.getActiveSpreadsheet().getActivesheet();
  lr = FindLastRow(sht);
  lc = FindLastColumn(sht);
}

不确定速度!如果有人可以测试并确认,那就值得尝试!

相关问题