我想刪除空行。行885是一個非空行,應該保留。但是,我的代碼說(並在msgbox中顯示)885是空的,應該刪除。當它到達i = 884時,它會打印出真正在第885行的內容,並表示它不會被刪除。所以,我很困惑。它似乎正確地處理了這些數據,但它報告的行號是錯誤的。我懷疑你會告訴我補償是基於零的,行從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)
對於在未來走來的人...... RocketDonkey讓我瞭解到,與上面的代碼的基本問題是,偏移量()函數需要的「i-1 「,我只用了」我「。 –
原因是offset()將其答案作爲基於零的值返回。所以我的範圍通常是1到LastRow的偏移量返回爲0到LastRow-1。必須小心,因爲像deleteRow()這樣的函數需要一行從1到LastRow,而不是從零開始。 –