按值获取单元格

时间:2018-10-20 22:37:53

标签: javascript google-apps-script google-sheets

如何使用其获取单元格的范围?

说我有此列:

[   ][   A   ]
[ 1 ][ hello ]
[ 2 ][ world ]
[ 3 ][ waaah ]
[ 4 ][ waaah ]
[ 5 ][ waaah ]
Sheet: WALUIGI_SAYS_"HI"

我想找到waaah的第一个实例。我知道它在列A中,但我不知道该行。

如何通过应用脚本找到它?

1 个答案:

答案 0 :(得分:2)

至少有3种方法可以完成您的要求。

  1. =MATCH("waaah",A1:A5,0)之类的公式手动放入单元格,然后在脚本中读取该单元格的值。

  2. 从脚本中将公式放入单元格中,然后按如上所述进行阅读。

  3. 制作自己的脚本以遍历范围,并检查每个位置的值是否匹配。在每个循环上增加一个计数器,并在找到匹配项时退出循环。计数器将成为索引。

编辑:为演示每种方法添加了一些示例代码。

/**
 * 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