2016-07-05 7 views
1

Googleスプレッドのスクリプトエディタを試してみました。ここで特定の「ヘッダ」行の次の空の行を見つける

は私がしようとしているものです: 私はシートAでいくつかの "ヘッダ" を持っている私は、ヘッダーA、B、それらを名前を付け、C.

1 | Header A 
2 | text 1 
3 | text 2 
4 | (empty row) 
5 | Header B 
6 | text 1 
7 | text 2 
8 | (empty row) 
9 | Header C 
10 | text 1 
11 | text 2 

シートB

1 | text 1 | date | Header A 
2 | text 2 | date | Header B 
3 | text 3 | date | Header B 
4 | text 4 | date | Header C 
5 | text 5 | date | Header A 
ます

シートBのデータを更新すると、シートBのカスタム属性に基づいてシートAに自動的に更新されます。シートBのデータをシートAの空の行に更新する必要があります。特定のヘッダー。

現在、私はシートAの次の空の行を得ようとしています。ヘッダーが入っている行を取得することができますが、各特定のヘッダーの後に次の空の行を見つけるためのオンラインヘルプが見つかりませんでした。

提供されているクラスが見つかりませんでした。私が見ることができるのは、私が望むものではないgetLastRowです。これはできますか?以下は

私の現在のコードです:

function getScheduleStatus(){ 
    var ss = SpreadsheetApp.getActiveSpreadsheet(); 
    var name = ss.getSheetByName("Production Schedule"); 
    var rng = name.getDataRange(); 
    var last_row = rng.getLastRow(); 
    var data = rng.getValues(); 
    var str_upcoming = "upcoming" 
    var rows = []; 

    for (var i=0; i < data.length; i++) { 
     if (data[i][0].toLowerCase() == str_upcoming) { 
      Logger.log("true"); 
      rows.push(i); 
     } 
     } 
    var row = Number(rows)+Number(rng.getRow()); 
    Logger.log(row); 


} 

現在、私は、行番号を取得するだけでなく、ヘッダーを見つけることができています。

皆さんご理解いただけますようお願いいたします。

答えて

2

Faster way to find the first empty rowをご覧ください。その答えはあなたの状況に適応させることができます。

最も速い解決策はDon Kirby'sで、1列のデータがあるので理想的です。 headerRowから検索を開始するには、変更する必要があります。

/** 
* Search column A starting at the given row, to find 
* the first following empty row. Uses spreadsheet row numbers. 
* From: https://stackoverflow.com/a/38194740/1677912 
* 
* @param {Number} headerRow Row number to start search at. 
* 
* @returns {Number}   Target empty row. 
*/ 
function getFirstEmptyRowAfter(headerRow) { 
    var spr = SpreadsheetApp.getActiveSpreadsheet(); 
    var column = spr.getRange('A:A'); 
    var values = column.getValues(); // get all data in one call 
    var ct = headerRow; // Start at row after headerRow (0-adjusted) 
    while (values[ct][0] != "") { 
    ct++; 
    } 
    return (ct + 1); // (1-adjusted) 
} 
+0

ありがとうございました!私はその答えを見ましたが、何とかそれを試してもうまくいきませんでした。速度を最適化する方法を見ていきます。 – Dr3am3rz

関連する問題