搜索电子表格并获取行

时间:2013-08-03 21:24:41

标签: google-apps-script

我正在创建一个应用程序,可以帮助查找包含搜索查询的行并在Ui中显示结果。我已经编写了这段代码,但有些东西可能有问题而且不起作用:

 // Global variables
    var sh = SpreadsheetApp.getActiveSheet();
    var ss = SpreadsheetApp.getActiveSpreadsheet();
    var lastrow = ss.getLastRow();
    var lastcol = ss.getLastColumn();

 // Menu additions
    function onOpen() {
        var menuEntries = [{name: 'search', functionName: 'ui'}];
        ss.addMenu('Ui',menuEntries);
    }

 // UI
    function ui() {
        var app = UiApp.createApplication().setHeight('400').setWidth('900').setTitle('UI');
        var panel = app.add(app.createHorizontalPanel());
        var input = panel.createTextBox().setId('input').setFocus(true);

        panel.add(input).add(printBtn).add(saveBtn).add(emailBtn);

        var table = app.createFlexTable().setId('table').setBorderWidth(1).setCellPadding(1);

        var handler = app.createServerHandler('search');
        input.addChangeHandler(handler);
        handler.addCallbackElement(table);

        app.add(table);
        ss.show(app);
    }

    function search(e) {
        var app = UiApp.getActiveApplication();
        var table = app.getElementById('table');
        var query = e.toLowerCase();

        var data = sh.getRange(2,1,lastrow,lastcol).getValues();
        for (var row = 1; row < data.length; row++) {
            for (var col = 0; col < data[row].length; col++) {

                if(data[row][col].toString().toLowerCase().match(e.toString()) == e.toString() && e != '');

                table.setText(row, col, data[row][col].toString());
         }
    }
return app;
}

调试器表示函数的搜索中的对象 e 未定义。另外我在js中绝对是noob而根本不知道如何让这个 e 参数起作用。

提前谢谢。

1 个答案:

答案 0 :(得分:0)

e是一个具有多个属性的对象,对于任何js对象,您应该告诉您要读取此对象的哪个属性。在此代码中,您需要的值是textBox的值,您可以在其中输入文本值,因此您需要做两件事:

  1. 为此textBox(.setName('input'))命名,以便您可以使用与var inputValue = e.parameter.input
  2. 形式的对象属性相同的名称
  3. 为了使其工作,textBox本身也必须是处理程序的callbackElement的一部分。你使用你的表作为callbackElement,但查询textBox(输入)不是这个表的子项,所以你可以在某种程度上将textBox添加到表中,或者在这种情况下可能更简单,添加textBox作为第二个回调元素,如下所示:

    handler.addCallbackElement(table).addCallbackElement(input);

  4. 您还可以查看this simple example,它大致可以满足您的需求。


    编辑:可能的处理函数 :

    function search(e) {
      var app = UiApp.getActiveApplication();
      var table = app.getElementById('table');
      var query = e.parameter.input.toLowerCase();
      var tableRow = 0 ;
      var data = sh.getRange(2,1,lastrow,lastcol).getValues();
      for (var row = 1; row < data.length; row++) {
        for (var col = 0; col < data[row].length; col++) {
    
          if(data[row][col].toString().toLowerCase().match(query) == query && query!= ''){
            for(c=0 ; c<data[row].length;++c){
            table.setText(tableRow, c, data[row][c].toString());
            }
              ++tableRow
              continue;
          }
        }
      }
      return app;
    }