Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/search/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Search 如何搜索谷歌电子表格?_Search_Spreadsheet_Google Apps Script - Fatal编程技术网

Search 如何搜索谷歌电子表格?

Search 如何搜索谷歌电子表格?,search,spreadsheet,google-apps-script,Search,Spreadsheet,Google Apps Script,我正在做一些详尽的搜索,需要确定一个新的域(URL)是否已经在电子表格中。但是,没有一个电子表格对象具有搜索功能,即在大多数文档对象中都可以找到findText()。我觉得我错过了一些重要的事情。 我错过了什么 findText函数: SearchResult对象: 电子表格对象: 我的最佳猜测是尝试转换文档表中的特定电子表格范围,然后执行搜索。Mendokusai我编写了一个带有图形用户界面的搜索工具,在一张表单的3列中执行全局搜索。它可以很容易地修改,以满足您的需要。我想最好在UI中添加一个

我正在做一些详尽的搜索,需要确定一个新的域(URL)是否已经在电子表格中。但是,没有一个电子表格对象具有搜索功能,即在大多数文档对象中都可以找到findText()。我觉得我错过了一些重要的事情。 我错过了什么

findText函数:

SearchResult对象:

电子表格对象:


我的最佳猜测是尝试转换文档表中的特定电子表格范围,然后执行搜索。Mendokusai

我编写了一个带有图形用户界面的搜索工具,在一张表单的3列中执行全局搜索。它可以很容易地修改,以满足您的需要。我想最好在UI中添加一个锚,让您打开刚刚找到的url。 下面是代码,希望它能帮助您设计自己的版本

编辑:我在下面的代码中添加了锚小部件(在E列中获取其引用)

//G.变量
var sh=SpreadsheetApp.getActiveSheet();
var ss=SpreadsheetApp.getActiveSpreadsheet();
var lastrow=ss.getLastRow();
//
函数onOpen(){
var menuEntries=[{name:“搜索GUI”,functionName:“搜索UI”},
];
ss.addMenu(“搜索实用程序”,菜单);//自定义菜单
}
//构建一个简单的用户界面,输入搜索项目并显示结果+激活结果行
函数searchUI(){
var app=UiApp.createApplication().setHeight(130)、setWidth(400);
app.setTitle(“按姓名/姓氏/地址搜索”);
var panel=app.createVerticalPanel();
var txtBox=app.createTextBox().setFocus(true);
var label=app.createLabel(“要搜索的项目:”)
面板。添加(标签);
txtBox.setId(“项目”).setName(“项目”);
var label0=app.createLabel(“行”).setWidth(“40”);
var label1=app.createLabel(“名称”).setWidth(“120”);
var label2=app.createLabel(“Lastname”).setWidth(“120”);
var label3=app.createLabel(“街道”).setWidth(“120”);
var hpanel=app.createHorizontalPanel();
hpanel.add(label0).add(label1).add(label2).add(label3)
//
var txt0=app.createTextBox().setId(“lab0”).setName(“0”).setWidth(“40”);
var txt1=app.createTextBox().setId(“lab1”).setName(“txt1”).setWidth(“120”);
var txt2=app.createTextBox().setId(“lab2”).setName(“txt2”).setWidth(“120”);
var txt3=app.createTextBox().setId(“lab3”).setName(“txt3”).setWidth(“120”);
var hpanel2=app.createHorizontalPanel();
hpanel2.add(txt0.add(txt1.add)(txt2.add)(txt3)
var hidden=app.createHidden().setName(“隐藏”).setId(“隐藏”);
var subbtn=app.createButton(“下一步”).setId(“下一步”).setWidth(“250”);
var link=app.createAnchor(“”,).setId('link');
面板。添加(txtBox);
面板。添加(子BTN);
面板。添加(隐藏);
面板。添加(hpanel);
面板。添加(hpanel2);
面板。添加(链接);
var keyHandler=app.createServerHandler(“单击”);
addKeyUpHandler(keyHandler)
keyHandler.addCallbackElement(面板);
//
var submitHandler=app.createServerHandler(“下一步”);
subbtn.addClickHandler(submitHandler);
submitHandler.AddCallback元素(面板);
//
应用程序添加(面板);
ss.show(app);
}
//
功能点击(e){
var row=ss.getActiveRange().getRowIndex();
var app=UiApp.getActiveApplication();
var txtBox=app.getElementById(“项目”);
var subbtn=app.getElementById(“下一步”).setText(“下一步”)
var txt0=app.getElementById(“lab0”).setText('--');
var txt1=app.getElementById(“lab1”).setText(“不匹配”).setStyleAttribute(“背景”、“白色”);//开始时的默认值
var txt2=app.getElementById(“lab2”).setText(“”);
var txt3=app.getElementById(“lab3”).setText(“”);
var link=app.getElementById('link').setText('').setHref('')
var item=e.parameter.item.toLowerCase();//要搜索的项
var hidden=app.getElementById(“隐藏”)
var data=sh.getRange(2,2,lastrow,4).getValues();//获取4列数据

对于(nn=0;nn不幸的是,电子表格服务中没有搜索功能。您可以获取正在搜索的范围的数据,然后在其上进行迭代以查找匹配项。下面是一个简单的函数:

/**
 * 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;
}
/**
*查找给定范围内的值。
*@param value要查找的值。
*@param range要搜索的范围。
*@返回指向包含该值的第一个单元格的范围,
*如果未找到,则返回null。
*/
函数查找(值、范围){
var data=range.getValues();
对于(变量i=0;i
您可以使用SpreadsheetAPI列表提要查询参数“搜索”。这将返回使用全字匹配匹配的任何行。在参数周围加上一些星号(当然是URL编码的)它变成了通配符。

我最终使用电子表格公式来解决我的问题。具体来说,我使用了函数,它可以在数组中查找字符串(在本例中,是同一文档中另一个工作表中的列)

这比在数组中循环要简单得多,但效率较低,不允许完全自动化。事实上,当列达到2000个条目时,Google Drive经常冻结,我不得不开始使用Excel。不过,Match()解决方案更适合我所寻找的


感谢所有其他回复。

我没有尝试过,但它似乎允许您对Google sheets执行SQL查询。

您能否提供更多信息,例如它是一个单一的电子表格,以及要在多少张工作表的特定列中搜索的URL。有很多方法可以接近pro问题取决于布局。在文档中插入表格,然后进行搜索可能不是最好的方法。如果有多个电子表格,所有电子表格是否都在同一文件夹中?此外,您是否需要知道url的位置
/**
 * 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;
}