¿Cómo busco Google Spreadsheets?

Estoy haciendo algunas búsquedas exhaustivas y necesito determinar si un nuevo dominio (URL) ya está en una hoja de cálculo. Sin embargo, ninguno de los objetos de la hoja de cálculo tiene funciones de búsqueda, es decir, findText () que se encuentra en la mayoría de los objetos de documento. Siento que me estoy perdiendo algo significativo. ¿Qué me estoy perdiendo?

Función findText: https://developers.google.com/apps-script/class_table#findText

Objeto SearchResult: https://developers.google.com/apps-script/class_searchresult

Objeto de hoja de cálculo: https://developers.google.com/apps-script/class_sheet

Mi mejor bash es tratar de convertir rangos de hoja de cálculo específicos en tablas de documentos y luego realizar la búsqueda. Mendokusai

Lamentablemente, no hay funcionalidad de búsqueda en los servicios de hoja de cálculo. Puede obtener los datos para el rango que está buscando y luego iterar sobre él buscando una coincidencia. Aquí hay una función simple que hace eso:

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

Escribí una herramienta de búsqueda con una interfaz gráfica de usuario que realiza una búsqueda global en 3 columnas de una sola hoja. Se puede modificar fácilmente para adaptarse a sus necesidades. Supongo que sería una buena idea agregar un ancla en la interfaz de usuario para que pueda abrir la url que acaba de encontrar. Aquí está el código, esperando que te ayude a diseñar tu propia versión.

EDITAR: agregué el widget de anclaje en el siguiente código (obteniendo su referencia en la columna E)

 // G. Variables var sh = SpreadsheetApp.getActiveSheet(); var ss = SpreadsheetApp.getActiveSpreadsheet(); var lastrow = ss.getLastRow(); // function onOpen() { var menuEntries = [ {name: "Search GUI", functionName: "searchUI"}, ]; ss.addMenu("Search Utilities",menuEntries);// custom menu } // Build a simple UI to enter search item and show results + activate result's row function searchUI() { var app = UiApp.createApplication().setHeight(130).setWidth(400); app.setTitle("Search by name / lastname / adress"); var panel = app.createVerticalPanel(); var txtBox = app.createTextBox().setFocus(true); var label=app.createLabel(" Item to search for :") panel.add(label); txtBox.setId("item").setName("item"); var label0=app.createLabel("Row").setWidth("40"); var label1=app.createLabel("Name").setWidth("120"); var label2=app.createLabel("Lastname").setWidth("120"); var label3=app.createLabel("Street").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("hidden").setId("hidden"); var subbtn = app.createButton("next ?").setId("next").setWidth("250"); var link = app.createAnchor('', '').setId('link'); panel.add(txtBox); panel.add(subbtn); panel.add(hidden); panel.add(hpanel); panel.add(hpanel2); panel.add(link); var keyHandler = app.createServerHandler("click"); txtBox.addKeyUpHandler(keyHandler) keyHandler.addCallbackElement(panel); // var submitHandler = app.createServerHandler("next"); subbtn.addClickHandler(submitHandler); submitHandler.addCallbackElement(panel); // app.add(panel); ss.show(app); } // function click(e){ var row=ss.getActiveRange().getRowIndex(); var app = UiApp.getActiveApplication(); var txtBox = app.getElementById("item"); var subbtn = app.getElementById("next").setText("next ?") var txt0=app.getElementById("lab0").setText('--'); var txt1=app.getElementById("lab1").setText('no match').setStyleAttribute("background", "white");// default value to start with 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(); // item to search for var hidden=app.getElementById("hidden") var data = sh.getRange(2,2,lastrow,4).getValues();// get the 4 columns of data for(nn=0;nn

Terminé usando fórmulas de hoja de cálculo para resolver mi problema. Específicamente, utilicé la función MATCH () , que puede buscar una cadena en una matriz (en este caso una columna en otra hoja en el mismo documento).

Esto es significativamente más simple que el bucle a través de una matriz, aunque es menos eficiente y no permite la automatización completa. De hecho, cuando la columna llegó a 2.000 entradas, Google Drive se congeló con tanta frecuencia que tuve que empezar a usar Excel en su lugar. Sin embargo, la solución Match () era más adecuada para lo que estaba buscando.

Aunque aprecié todas las demás respuestas.

Puede “buscar” utilizando el parámetro de consulta Feed del listado de SIP de Spreadsheet. Esto devolverá cualquier fila que coincida con la coincidencia de palabras completas. Lanza algunos asteriscos alrededor de tu parámetro (URL codificada por supuesto) y se convierte en comodín.