我如何遍历一个无组织的范围并提取数据,直到不再使用 Apps 脚本满足条件?

How can I iterate over an unorganized range and pull data until criteria is not met anymore using Apps Script?

我一直在尝试遍历一系列数据并将数据带到另一个 sheet 直到循环遇到以下单词之一(工具、绘画)并停在那里。

我打算使用 for 循环 + while,但我不确定这是否是最好的方法。

这是我正在处理的代码草稿:

function importPipeworkData() {
  const ss = SpreadsheetApp.getActiveSpreadsheet();
  const input4File = ss.getSheetByName('Input Files Mapping').getRange('B4').getValue()
  const pipeworkSheet = SpreadsheetApp.openByUrl(input4File).getSheetByName('Sheet1');
  const inputPipeworkRng = pipeworkSheet.getRange(2, 1, pipeworkSheet.getLastRow(), 4);
  const inputPipeworkData = inputPipeworkRng.getValues();

  const boqPipeworkSheet = ss.getSheetByName('BOQ Pipework');
  const boqPipeworkRng = boqPipeworkSheet.getRange(4, 1, boqPipeworkSheet.getLastRow(), 4);
  //boqPipeworkRng.clear(); //Clears the sheet to receive updated data;

  const pipeworkData = [];

  for (let a = 0; a < inputPipeworkData.length; a++) {
    while (inputPipeworkData[a][0] != 'Valves') //This is one of the unclear parts

      Logger.log(inputPipeworkData[a][1])
  }
}

这是数据集的示例:https://docs.google.com/spreadsheets/d/1W9zPt1nYKv59j9kjgFqy5Z4KPgvXZUoCusTk06kRQUk/edit?usp=sharing

如果能在这里提供任何帮助,我将不胜感激。

干杯, 安东尼奥

在您的情况下,您应该只使用一个循环

因此,

  • 如果 for 循环,则需要额外的 if 语句。
  • while 循环的情况下,您应该确保增加计数器变量。

带有 for 循环的示例:

  const keyWords = ["Tools", "Painting"];
  for (let a = 0; a < inputPipeworkData.length; a++) {
    if (keyWords.indexOf(inputPipeworkData[a][0]) > - 1){
      break;
     }
      Logger.log(inputPipeworkData[a][1]);
      pipeworkData.push(inputPipeworkData[a]);
  }
}

带有 while 循环的示例:

  const keyWords = ["Tools", "Painting"];
  var a = 0;
  while (keyWords.indexOf(inputPipeworkData[a][0]) == - 1){
    Logger.log(inputPipeworkData[a][1]);
    pipeworkData.push(inputPipeworkData[a]);
    a++
  }
}