我正在尝试在运行时找到最好的脚本来完成任务。我有一个相当大的电子表格,我需要检查某些已知列中的值,并根据匹配情况返回该行。理想情况下,我想要一个包含返回行的新电子表格。
我已经通过ID打开了电子表格,而且我已经获得了表格&范围,但不确定搜索特定列的最有效方法,不仅仅抓取该值而是整个行。
谢谢,
答案 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)
用途:
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;的数据的列。另外,它会将列留空。