为什么这个反向循环在 Google Apps 脚本中给我一个错误?
Why does this reverse loop give me an error in Google Apps Script?
这个反向循环给我错误 TypeError: Cannot read property '0' of undefined
,我找不到原因。
这是代码部分:
function formatBoqPipework() {
const ss = SpreadsheetApp.getActiveSpreadsheet();
const boqPipeworkSheet = ss.getSheetByName('BOQ Pipework');
const boqPipeworkRng = boqPipeworkSheet.getRange(5, 1, boqPipeworkSheet.getLastRow(), 14);
const boqPipeworkValues = boqPipeworkRng.getValues();
let lastRow = boqPipeworkSheet.getLastRow();
for (let a = boqPipeworkValues.length; a >= 0; a--) {
Logger.log(a)
if (boqPipeworkValues[a][0] == 'Pipework' || boqPipeworkValues[a][0] == '') {
//let row = a + 5
boqPipeworkSheet.deleteRow(a+5);
}
}
}
感谢任何帮助。
此致,
安东尼奥
数组基于 0,.length 将为您提供“人类”长度。所以在下面的例子中(什么会出错)你将 4 分配给 i 并且 arr[4] 不存在。因为从0开始数的话,数组的个数最大为3。
错误:
function test(){
const arr = [[1,2],[2,2],[3,2],[4,2]];
console.log(arr.length) // Returns 4
for (let i = arr.length; i >= 0; i--){
console.log(arr[i][0])
}
}
所以在.length后面加一个-1:
function test(){
const arr = [[1,2],[2,2],[3,2],[4,2]];
for (let i = arr.length - 1; i >= 0; i--){
console.log(arr[i][0])
}
}
你也可以这样做:
function formatBoqPipework() {
const ss = SpreadsheetApp.getActiveSpreadsheet();
const sh = ss.getSheetByName('BOQ Pipework');
const rg = sh.getRange(5, 1, sh.getLastRow(), 14);
const vs = rg.getValues();
let d = 0;
for (let i = 0; i < vs.length; i++) {
if (vs[i][0] == 'Pipework' || vs[i][0] == '')sh.deleteRow(i + 5 - d++);
}
}
这个反向循环给我错误 TypeError: Cannot read property '0' of undefined
,我找不到原因。
这是代码部分:
function formatBoqPipework() {
const ss = SpreadsheetApp.getActiveSpreadsheet();
const boqPipeworkSheet = ss.getSheetByName('BOQ Pipework');
const boqPipeworkRng = boqPipeworkSheet.getRange(5, 1, boqPipeworkSheet.getLastRow(), 14);
const boqPipeworkValues = boqPipeworkRng.getValues();
let lastRow = boqPipeworkSheet.getLastRow();
for (let a = boqPipeworkValues.length; a >= 0; a--) {
Logger.log(a)
if (boqPipeworkValues[a][0] == 'Pipework' || boqPipeworkValues[a][0] == '') {
//let row = a + 5
boqPipeworkSheet.deleteRow(a+5);
}
}
}
感谢任何帮助。
此致, 安东尼奥
数组基于 0,.length 将为您提供“人类”长度。所以在下面的例子中(什么会出错)你将 4 分配给 i 并且 arr[4] 不存在。因为从0开始数的话,数组的个数最大为3。
错误:
function test(){
const arr = [[1,2],[2,2],[3,2],[4,2]];
console.log(arr.length) // Returns 4
for (let i = arr.length; i >= 0; i--){
console.log(arr[i][0])
}
}
所以在.length后面加一个-1:
function test(){
const arr = [[1,2],[2,2],[3,2],[4,2]];
for (let i = arr.length - 1; i >= 0; i--){
console.log(arr[i][0])
}
}
你也可以这样做:
function formatBoqPipework() {
const ss = SpreadsheetApp.getActiveSpreadsheet();
const sh = ss.getSheetByName('BOQ Pipework');
const rg = sh.getRange(5, 1, sh.getLastRow(), 14);
const vs = rg.getValues();
let d = 0;
for (let i = 0; i < vs.length; i++) {
if (vs[i][0] == 'Pipework' || vs[i][0] == '')sh.deleteRow(i + 5 - d++);
}
}