Search 按列搜索电子表格,返回行

Search 按列搜索电子表格,返回行,search,google-apps-script,google-sheets,Search,Google Apps Script,Google Sheets,我正在努力寻找在运行时方面最好的脚本来完成任务。我有一个相当大的电子表格,需要检查某些已知列中的值,并根据匹配情况返回该行。理想情况下,我想要一个包含返回行的新电子表格 我已经用ID打开了电子表格,并且得到了表格和范围,但不确定搜索特定列的最有效方法,不仅要获取该值,还要获取整行。您可以使用下面的代码在特定列中搜索。代码是自解释的 function onOpen() { var ss = SpreadsheetApp.getActiveSpreadsheet(); var menuEnt

我正在努力寻找在运行时方面最好的脚本来完成任务。我有一个相当大的电子表格,需要检查某些已知列中的值,并根据匹配情况返回该行。理想情况下,我想要一个包含返回行的新电子表格


我已经用ID打开了电子表格,并且得到了表格和范围,但不确定搜索特定列的最有效方法,不仅要获取该值,还要获取整行。

您可以使用下面的代码在特定列中搜索。代码是自解释的

function onOpen() {
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var menuEntries = [ {name: "Search", functionName: "onSearch"} ];
  ss.addMenu("Commands", menuEntries);    
}

function onSearch()
{
    var searchString = "Test11";
    var sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("SheetName"); 
    var column =4; //column Index   
    var columnValues = sheet.getRange(2, column, sheet.getLastRow()).getValues(); //1st is header row
    var searchResult = columnValues.findIndex(searchString); //Row Index - 2

    if(searchResult != -1)
    {
        //searchResult + 2 is row index.
        SpreadsheetApp.getActiveSpreadsheet().setActiveRange(sheet.getRange(searchResult + 2, 1))
    }
}

Array.prototype.findIndex = function(search){
  if(search == "") return false;
  for (var i=0; i<this.length; i++)
    if (this[i] == search) return i;

  return -1;
} 
函数onOpen(){ var ss=SpreadsheetApp.getActiveSpreadsheet(); var menuEntries=[{name:“Search”,functionName:“onSearch”}]; ss.addMenu(“命令”,菜单); } 函数onSearch() { var searchString=“Test11”; var sheet=SpreadsheetApp.getActiveSpreadsheet().getSheetByName(“SheetName”); var column=4;//列索引 var columnValues=sheet.getRange(2,column,sheet.getLastRow()).getValues();//第一个是标题行 var searchResult=columnValues.findIndex(searchString);//行索引-2 如果(搜索结果!=-1) { //searchResult+2是行索引。 SpreadsheetApp.getActiveSpreadsheet().setActiveRange(sheet.getRange(searchResult+2,1)) } } Array.prototype.findIndex=函数(搜索){ 如果(search==“”)返回false; 对于(var i=0;i
函数onSearch()
{
var searchString=“SD0023”;
var sheet=SpreadsheetApp.getActiveSpreadsheet().getSheetByName(“表单响应1”);
var column=1;//列索引
var columnValues=sheet.getRange(2,column,sheet.getLastRow()).getValues();//第一个是标题行
var searchResult=columnValues.findIndex(searchString);//行索引-2
如果(搜索结果!=-1)
{
//searchResult+2是行索引。
SpreadsheetApp.getActiveSpreadsheet().setActiveRange(sheet.getRange(searchResult+2,3)).setValue(“在此处找到”);
}
}
Array.prototype.findIndex=函数(搜索){
如果(search==“”)返回false;
对于(var i=0;i-1)返回i;
返回-1;
} 
对搜索内联文本的答案进行了一些小更改。

用途:

Lookup(SheetinfoArray,“Sheet1!A:B”,0[1],“Sheet1!I1”,“n”,“y”,“n”);

Lookup(Sheetinfo,“Sheet1!A:B”,0[1],“return”,“n”,“n”,“y”);

Lookup(SheetinfoArray,“Sheet1!A:B”,0[0,1],“return”,“n”,“n”,“y”);

查找(Sheetinfo,“Sheet1!A:B”,1[1,3,0,2],“return”,“y”,“n”,“n”);

Lookup((“女性”、“Sheet1!A:G”、4[2]、“数据库!A1”、“y”、“y”、“y”);

Lookup(Sheetinfo,LocationsArr,4[0],“return”,“y”,“n”,“y”);

查找(/RegEx+/i,LocationsArr,4[0],“return”,“y”,“n”,“y”);

///////////////////////////////////////////////////////

参数说明:

-“Search_Key”-可以是字符串、数组或正则表达式,用于同时查找多个内容

-“RefSheetRange”-信息的参考源。可以是本地工作表参考和范围,也可以是来自变量的数据数组

-“SearchKey\u RefMatch\u IndexOffSet”-您正在引用“Search\u Key”到“RefSheetRange”数据的哪一列信息

-“IndexOffSetForReturn”-一旦找到“搜索键”匹配项,将从“RefSheetRange”返回哪些数据列

-“SetSheetRange”-您将从“RefSheetRange”中选择与“Search_Key”匹配的信息放在哪里,或者您可以使用“return”,当函数完成时,它将返回,以便您可以将函数输出到变量

-“ReturnMultiResults”-如果“Y”表示您的“Search_Key”为“NW”,并且您希望在数据集中查找属于西北方向的链中的每个商店。因此,在找到第一个匹配项后,声明“Y”不会停止,它将继续搜索其余数据

-“添加注释”-如果“Y”将结果设置为电子表格,而不是将其返回内存,则它将在“SetSheetRange”中设置第一个单元格,并注明内容和时间


-“Has_NAs”-如果是“Y”,它将在未找到“Search_Key”数据的列中输入“N/A”。否则,它会将该列留空。

您可能需要使用Google Apps脚本类

此示例函数将搜索字符串,并在警报对话框中显示第一次出现的行:

function searchString(){
  var sheet = SpreadsheetApp.getActiveSheet()
  var search_string = "dog"
  var textFinder = sheet.createTextFinder(search_string)
  var search_row = textFinder.findNext().getRow()
  var ui = SpreadsheetApp.getUi();
  ui.alert("search row: " + search_row)
}

索引和匹配的组合应该有效:

=INDEX($B$2:$D$1000,MATCH(S2,$A$2:$A$1000,0))
S2是一个搜索键

$A$2:$A$1000是一个范围,我们将在其中查找

$B$2:$D$1000是一个范围,我们将返回


请记住,$B$2:$D$1000和$A$2:$A$1000的数字部分应该匹配。

代码胜于雄辩。你能发布你的代码吗?如果你已经开始写了一些东西,我们可以帮助优化谢谢,你的问题让我来回答我的问题……)你能告诉我在哪里可以找到“findIndex”吗功能?无法在官方文件中看到此功能documentation@Aseemgautam。我想检查列中的项目数组。我如何使用您的函数来确定这些数组项目是否在列中不存在,然后在它们不存在的情况下插入它们?请注意,此解决方案不会按问题中的要求在特定列中搜索。它是搜索整个电子表格。
=INDEX($B$2:$D$1000,MATCH(S2,$A$2:$A$1000,0))