Google Scripts Search&返回单元格位置

时间:2015-07-23 07:05:52

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

我在使用我的第一个Google脚本时遇到了一些问题,并希望得到一些帮助。

目标:搜索多个工作表以获取值,然后在找到匹配项时返回单元格的位置。

我尝试过使用这个脚本:

/**
* Finds a value within a given range. 
* @param value The value to find.
* @param range The range to search in.
* @return A range pointing to the first cell containing the value, 
*     or null if not found.
*/
function find(value, range) {
var data = range.getValues();
for (var i = 0; i < data.length; i++) {
for (var j = 0; j < data[i].length; j++) {
if (data[i][j] == value) {
return range.getCell(i + 1, j + 1);
}
}
}
return null;
}

然而它返回错误&#34; TypeError:无法在对象中找到函数getValues&#34;

我的值将被定义为文本字符串,例如&#34; ABCD&#34;

我的范围是多张纸的范围,例如sheet1!A1:C4,sheet2!A1:C4

该函数应返回查找值

的工作表,列和行

目前我正在使用iferror索引匹配循环公式一次一页地搜索工作表(我使用间接作为我的范围是可变的)但是想要一个脚本来使这更容易和更快。

=IFERROR(index(INDIRECT(Sheet1!A:A),
iferror(MATCH(A2,INDIRECT(Sheet1!B:B),0),
iferror(MATCH(A2,INDIRECT(Sheet1!C:C),0),
...ETC

提前感谢您的帮助。

1 个答案:

答案 0 :(得分:1)

试试这个:

function find(value, range) {
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var sheet = range.split("!")[0];
  var A1Ref = range.split("!")[1];
  var activeRange = ss.getSheetByName(sheet).getRange(A1Ref);
  var data = activeRange.getValues();
  for (var i = 0; i < data.length; i++) {
    for (var j = 0; j < data[i].length; j++) {
      if (data[i][j] == value) {
        return (ss.getSheetByName(sheet).getRange(i + 1, j + 1));
      }
    }
  }
  return null;
}

这将返回范围。您可以更改该行以获取A1Notation:

return (ss.getSheetByName(sheet).getRange(i + 1, j + 1).getA1Notation());