我如何遍历一个无组织的范围并提取数据,直到不再使用 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++
}
}
我一直在尝试遍历一系列数据并将数据带到另一个 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++
}
}