说我有此列:
[ ][ A ]
[ 1 ][ hello ]
[ 2 ][ world ]
[ 3 ][ waaah ]
[ 4 ][ waaah ]
[ 5 ][ waaah ]
Sheet: WALUIGI_SAYS_"HI"
我想找到waaah
的第一个实例。我知道它在列A
中,但我不知道该行。
如何通过应用脚本找到它?
答案 0 :(得分:2)
至少有3种方法可以完成您的要求。
将=MATCH("waaah",A1:A5,0)
之类的公式手动放入单元格,然后在脚本中读取该单元格的值。
从脚本中将公式放入单元格中,然后按如上所述进行阅读。
制作自己的脚本以遍历范围,并检查每个位置的值是否匹配。在每个循环上增加一个计数器,并在找到匹配项时退出循环。计数器将成为索引。
编辑:为演示每种方法添加了一些示例代码。
/**
* Finds first matching row in a column
* @customfunction
*/
function findFirstMatchingRow() {
var ss = SpreadsheetApp.getActiveSpreadsheet();
var sheet = ss.getActiveSheet();
//Method 1 - Formula manually placed in B1
var row = sheet.getRange("B1").getValue();
if (row=="#N/A"){
Logger.log("NoMatch");
}else
{
Logger.log(row); // shows 3
}
//Method 2 - Formula placed in B2 via script.
row = sheet.getRange("B2").setFormula("=MATCH(\"waaah\",A1:A5,0)").getValue();
if (row=="#N/A"){
Logger.log("NoMatch");
}else
{
Logger.log(row); // shows 3
}
//Method 3 - Make your own search loop
// first load the values into an array (in one trip to the server)
var valuesArray = sheet.getRange("A1:A5").getValues();
var lengthOfArray = valuesArray.length;
var matchFound = false;
var n;
for (n=0; n<lengthOfArray; n++){ // loop through the values looking for a match
if (valuesArray[n] == "waaah")
{
matchFound=true;
n++; // add one because arrays start at 0 not
break;
}
}
if (matchFound){
Logger.log(n); // shows 3
}
else {
Logger.log("No match");
}
}
产生此日志输出:
[18-10-22 08:43:49:917 HKT] 3.0
[18-10-22 08:43:50:176 HKT] 3.0
[18-10-22 08:43:50:300 HKT] 3.0