首页 文章

使用谷歌应用程序脚本从电子表格数据中检索行

提问于
浏览
22

我正在使用Google应用脚本将表单数据写入电子表格 . 现在我想从Excel中获取符合条件的值(例如,按日期,用户名过滤)并使用app脚本显示它们 .

我的电子表格有

+-------------+-----------+----------------------+
| Date        | Username  | Comment              |
+-------------+-----------+----------------------+
| 2012-05-02  | palani    | My first comment     |
| 2012-05-02  | raja      | My second comment    |
| 2012-05-03  | palani    | My third comment     |
| 2012-05-03  | raja      | My fourth comment    |
+-------------+-----------+----------------------+

现在我想在日期上过滤 2012-05-02 的数据,在用户名上过滤 raja ,并在app-script(作为Web服务运行)中使用标签显示它们 .

我的所有搜索都使用SpreadsheetApp.getActiveSheet().getDataRange();返回解决方案,我认为这不是在工作表中显示1000行中的一条记录的优化方式 .

EDIT

现在,我只使用 .getValues() . 这里显示的数据仅供参考;我的实际工作表现在有15列和5000行 . 最终它将增长到数百万,因为这是一个时间表应用程序 . 我想知道有没有其他方法来过滤行 getValues()

在tmp单元格上应用 =Filter 公式也是一个问题,因为脚本可以由多个人同时使用 .

2 回答

  • 7

    最简单的方法,也就是我所知道的方法是:
    使用获取数组中的值

    var data = SpreadsheetApp.getActiveSheet().getDataRange().getValues();
    

    然后做一个循环

    for (i in data) {
    

    在此循环中检查日期( data[i][0] )是否等于您要查找的日期,以及名称( data[i][1] )是否等于您正在查找的名称 . 并将其推送到阵列

    var labels=new Array;
    label.push( [data[i][0], data[i][1], data[i][2]] );
    

    然后将所有数据放在此数组中,您可以使用for循环填充带有标签的窗格Ui

    for (i in labels) { ...
    
  • 30

    好吧,您可以考虑使用单元格并在其上使用“查询”公式 . 让我们假设Date在A列,Username = B列,Comment是C列,而空白单元是D1,您的脚本将如下所示:

    SpreadsheetApp.getActiveSheet().getRange("D1").setFormula('Query(A:C,"SELECT A,B,C WHERE B="' + "SomeOne'" + ',1)'; //filter the data and populate to D1 onwards    
    SpreadsheetApp.getActiveSheet().getRange("D:F").getValues();//this is the filtered data
    

相关问题