空行を削除したい。行 885 は空でない行であり、保持する必要があります。ただし、私のコードは、885 が空であり、削除する必要があることを示しています (およびメッセージボックスに表示されます)。i=884 に達すると、885 行に実際にあるものを出力し、削除されないことを示します。だから、私は混乱しています。データに対して適切に動作しているように見えますが、行番号が間違っていると報告しています。オフセットは 0 ベースで、行は 1 から始まるので、lastrow=888 (1 ベース) の場合は、オフセットを一致させるために 1 を減算する必要があります。スプレッドシートの行 885 は、実際にはオフセットとしての行 884 です。
しかし... i=行885にデータがある場合、オフセットは884です。そして、i=884の場合、オフセットは883です...では、なぜ行885にあるものを印刷するのですか??? ここで大混乱。私は何を間違えていますか?
最後になりましたが、最も重要なことは、間違った行を削除しているということです! 正しいデータを参照しながら、間違った行を削除するにはどうすればよいでしょうか?
var s = SpreadsheetApp.getActiveSheet();
var range = SpreadsheetApp.getActiveSheet().getDataRange();
var i = range.getLastRow();
var msg;
var colNum;
for (; i > 1; i--) { // I like to start at the end
var foundAvalue=0; // reset flag for each row
rowRange = range.offset(i, 0, 1);
var valArray=rowRange.getValues();
var foundAvalue=0;
var msg;
var totalColumns=rowRange.getNumColumns();
colNum=0;
while (colNum < totalColumns && (foundAvalue==0)) {
if (valArray[0][colNum] != '') {
foundAvalue=1;
msg="Row " + i + " =" + valArray[0];
Browser.msgBox(msg);
msg="Row " + i + " will not be deleted";
Browser.msgBox(msg);
}
colNum++;
}
if (foundAvalue == 0) {
msg="Row " + i + " =" + valArray[0] + "WILL be deleted";
Browser.msgBox(msg);
// delete empty row
// s.deleteRow(i);
}
} // end for(i)