0

这个反向循环给了我错误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);
    }
  }
}

感谢任何帮助。

问候,安东尼奥

4

2 回答 2

1

数组是基于 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])
  }
}
于 2022-01-05T20:45:53.130 回答
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++);
  }
}
于 2022-01-05T21:17:46.480 回答