2017-06-15 74 views
0

我正在尋找一種方法來查找特定列的最後一行(包含數據)。假設行100中列A的最後一個數據項和列B中的最後一個數據項具有行50中的最後一個數據項。谷歌腳本 - 獲取特定列的最後一行

.getLastRow();將永遠返回100給我。

我需要一個簡單的方法來取代50(這是B列中最後一個非空行的行號)。

我不能使用循環。這是非常重要的,因爲有成千上萬的行,它會花費太多時間。

我google了很多,但所有的答案都涉及到循環。

回答

1

雖然我不知道這是否是一個好方法,那麼這種方法呢?此方法不使用循環。請檢查這是一個樣本。

  1. 檢索想要知道最後一行數的列數據。
  2. 將列數據作爲臨時表導入到新的電子表格。 (在這種情況下,您還可以向當前使用的電子表格添加新工作表,並且可以將其用作臨時工作表。)
  3. 使用getLastRow()檢索最後一行的編號。
  4. 刪除臨時電子表格。

示例腳本:

var col = ##; // Here, please input a column number. 
var ss = SpreadsheetApp.getActiveSheet(); 
var coldata = ss.getRange(1, col, ss.getLastRow(), 1).getValues(); 
var tempss = SpreadsheetApp.create("temporary_sheet"); 
tempss.getActiveSheet().getRange(1,1,coldata.length, coldata[0].length).setValues(coldata); 
var last_row = tempss.getLastRow(); // The number of last row 
Drive.Files.remove(tempss.getId()); // In this case, the file is removed using Drive API. 

注:

在上述情況下,最後一排的數量可以檢索,即使列具有空細胞。如果該列沒有空單元格,則可以通過以下腳本檢索特定列的最後一行數。這不會創建臨時表單。

var last_row = ss.getRange(1, col, ss.getLastRow(), 1).getValues().filter(String).length; 
1

您也可以使用下面的代碼:

function findTheLastRow(){ 
    var ui = SpreadsheetApp.getUi(); 
    var ss = SpreadsheetApp.getActiveSpreadsheet(); 
    var sheet = ss.getActiveSheet(); 

    var range = sheet.getRange("B1:B").getValues(); 
    var filtered_r = range.filter(String).length; 

    ui.alert("Column B's last cell is number: " + filtered_r + " and its value is: " + range[filtered_r - 1][0]); 
} 

這個腳本會計算在列的值細胞的數量,所以最後一個單元格上方的細胞需要有一個價值爲了獲得正確的結果。