這段代碼運行沒有錯誤,但有時它會給我Exception: Those rows are out of bounds.錯誤。
function formatBoqPipework() {
const ss = SpreadsheetApp.getActiveSpreadsheet();
const boqPipeworkSheet = ss.getSheetByName('BOQ Pipework');
let boqPipeworkRng = boqPipeworkSheet.getRange(5, 1, boqPipeworkSheet.getLastRow(), 14);
let boqPipeworkValues = boqPipeworkRng.getValues();
for (let a = boqPipeworkValues.length - 1; a >= 0; a--) {
if (boqPipeworkValues[a][0] === 'Pipework' || boqPipeworkValues[a][0] === '' || boqPipeworkValues[a][0] === 'Section Total') {
boqPipeworkSheet.deleteRow(a 5);
}
}
}
這實際上是在其他幾個函式之后呼叫的,但我確保其他函式在呼叫這個函式之前完成。我什至嘗試Utilities.sleep(3000)在此函式的開頭添加一個。
我知道有適當的方法可以做到這一點,但目前這對我來說太先進了。
感謝任何幫助。
uj5u.com熱心網友回復:
我認為在您的腳本中,let boqPipeworkRng = boqPipeworkSheet.getRange(5, 1, boqPipeworkSheet.getLastRow(), 14);需要修改此腳本。
在您當前的腳本中,從最后一行之后的第 5 到 4 行中檢索值。在這種情況下,它應該是boqPipeworkSheet.getRange(5, 1, lastRow - 4, 14)。但是,當 的值boqPipeworkSheet.getLastRow()小于 時4,就會發生錯誤。需要反映這一點。那么下面的修改呢?
從:
let boqPipeworkRng = boqPipeworkSheet.getRange(5, 1, boqPipeworkSheet.getLastRow(), 14);
到:
const lastRow = boqPipeworkSheet.getLastRow();
if (lastRow < 5) return;
let boqPipeworkRng = boqPipeworkSheet.getRange(5, 1, lastRow - 4, 14);
uj5u.com熱心網友回復:
試試這個方法:
function formatBoqPipework() {
const ss = SpreadsheetApp.getActiveSpreadsheet();
const sh = ss.getSheetByName('BOQ Pipework');
let vs = sh.getRange(5, 1, sh.getLastRow(), 1).getValues();
let d = 0;
for (let a = 0; a < vs.length; a ) {
if (vs[a][0] == 'Pipework' || vs[a][0] == '' || vs[a][0] == 'Section Total') {
sh.deleteRow(a 5 - d );
}
}
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/404513.html
標籤:
