Google脚本按列搜索电子表格,返回行

时间:2013-08-28 07:49:54

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

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

我已经通过ID打开了电子表格,而且我已经获得了表格&范围,但不确定搜索特定列的最有效方法,不仅仅抓取该值而是整个行。

谢谢,

5 个答案:

答案 0 :(得分:38)

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

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;
} 

答案 1 :(得分:4)

您可能要使用Google Apps脚本textFinder类。

此示例函数将搜索字符串并在警报对话框中显示第一个匹配项的行:

    /**
     * @Route("/{id}/data", name="person_data_ajax", methods={"GET"}, options={"expose": true})
     */
    public function dataAjax(Person $person, PhoneNumberHelper $phonenumberHelper)
    {
        $arr = [
            'id' => $person->id,
            'gender' => $person->getGender(),
            'title' => $person->getTitle(),
            'firstName' => $person->getFirstName(),
            'lastName' => $person->getLastName(),
            'email' => $person->getEMail(),
            'telephone' => $person->getTelephone() ? $phonenumberHelper->format($person->getTelephone(), PhoneNumberFormat::NATIONAL) : null,
            'company' => $person->getCompany() ? [
                'id' => $person->getCompany()->id,
                'text' => $person->getCompany()->__toString()
            ] : null
        ];

        return new JsonResponse($arr);
    }

答案 2 :(得分:0)

INDEX 和 MATCH 的组合应该可以工作:

=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 的数字部分应该匹配。

答案 3 :(得分:-1)

function onSearch()
{
    var searchString = "SD0023";
    var sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Form Responses 1"); 
    var column =1; //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, 3)).setValue("found here");
    }
}

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

  return -1;
} 

对搜索内联文字的答案做了一些小改动。

答案 4 :(得分:-1)

My lookup script on GitHub

用途:

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");

Lookup_(Sheetinfo,"Sheet1!A:B",1,[1,3,0,2],"return","y","n","n");

Lookup_("female","Sheet1!A:G",4,[2],"Database!A1","y","y","y");

Lookup_(Sheetinfo,LocationsArr,4,[0],"return","y","n","y");

Lookup_(/RegEx+/i,LocationsArr,4,[0],"return","y","n","y");

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

参数说明:

- &#34; SEARCH_KEY&#34; - 可以是字符串,数组或正则表达式,以便一次查找多个内容

- &#34; RefSheetRange&#34; - 参考信息来源。可以是本地工作表引用和范围,也可以是变量中的数据数组。

- &#34; SearchKey_RefMatch_IndexOffSet&#34; - 您引用的哪一列信息&#39; Search_Key&#39;到#RefSheetRange&#39;数据

- &#34; IndexOffSetForReturn&#34; - 一旦&#39; Search_Key&#39;已找到匹配将从&#39; RefSheetRange&#39;返回的数据列。

- &#34; SetSheetRange&#34; - 您将从哪里提取“RefSheetRange&#39;”中的所选信息?匹配&#39; Search_Key&#39;或者您可以使用&#39; return&#39;当函数完成时,它将返回,因此您可以将函数输出到变量。

- &#34; ReturnMultiResults&#34; - 如果&#39; Y&#39;说你&#39; Search_Key&#39;是&#39; NW&#39;并且您希望在数据集中找到位于西北方向的链中的每个商店。所以声明“Y&#39;在找到第一个匹配后它不会停止,它将继续搜索剩余的数据。

- &#34; Add_Note&#34; - 如果&#39; Y&#39;您将结果设置为电子表格而不将其返回到内存,然后它将设置“SetSheetRange”中的第一个单元格。注意什么和什么时候。

- &#34; Has_NAs&#34; - 如果&#39; Y&#39;它会放入#N / A&#39;它没有找到&#39; Search_Key&#39;的数据的列。另外,它会将列留空。