getLastRow()に問題があります。この関数は、データを含む最後の行を返すことになっていると思いました。しかし、私が取り組んでいるワークシートには、データで満たされた行の下にはるかに多くの空の行があるため、関数は、データを含む最後の行を選択するのではなく、実行時に最後の空の行を選択するように見えます。同じである。誰かがこの異常を修正する方法を教えてもらえますか?これはグーグルスクリプトのバグですか、それとも私は何をすべきか明確に理解していませんか?はっきりしなかった場合は、さらに質問してください。
質問する
6430 次
4 に答える
10
シートに「列全体」の数式はありますか?配列数式、または完全にコピーされた数式のいずれか?これらの数式が空白のセルを下に返すように設計されている場合でも、それらをgetLastRow()
キャッチします。
この場合は、次を試してください。
function getLastPopulatedRow(sheet) {
var data = sheet.getDataRange().getValues();
for (var i = data.length-1; i > 0; i--) {
for (var j = 0; j < data[0].length; j++) {
if (data[i][j]) return i+1;
}
}
return 0; // or 1 depending on your needs
}
于 2012-06-04T22:21:10.950 に答える
2
これが現在選択されている回答の別のバージョンです。これにより、アイテム間にスペースがない配列結合の内部ループがスワップアウトされます。これにより、行のすべての文字が結合されます。いずれかの位置にキャラクターがいる場合、それは現在の答えと同様にキックアウトします。
私はいくつかの速度テストを行いました、そして私は選択された答えがより速いかもしれないと思いましたが、何らかの理由でこれは私のテストに基づいてより速く処理するようです。私はこの概念を数年前にスタックオーバーフローで見つけたと思いますが、今はその参照を見ていません。
function getLastPopulatedRow(sheetX) {
var arrVals = sheetX.getDataRange().getValues();
for (var i = arrVals.length-1; i > 0; i--) {
if (arrVals[i].join('')){
return i+1
}
}
return 0;
}
于 2019-10-25T14:31:31.987 に答える
1
より簡単な方法は
var lastRow = sheet.getDataRange().getValues().length ;
于 2012-06-05T06:01:56.620 に答える
-1
Adamsのソリューションは微調整で機能しますが、検索を行うことで、この問題に対する別のソリューションに出くわしました。最初の空の行を見つけるはずのコードを見て、最初の空の行の後ろの行を返すだけで、最後に入力された行を取得できると考えました。ここにコードを添付しています:
function getLastPopulatedRow(sheet) {
var cell = sheet.getRange('a1');
var ct = 0;
while ( cell.offset(ct, 0).getValue() != "" ) {
ct++;
}
return (ct--);
}
于 2012-06-05T19:35:45.847 に答える