26

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

我的电子表格有

+-------------+-----------+----------------------+
| 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 多行中的一条记录的优化方式。

编辑

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

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

4

2 回答 2

37

最简单的方法,也是我知道的一种方法是:
使用 Array 获取值

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 循环使用标签填充 panen Ui

for (i in labels) { ...
于 2012-05-10T09:18:43.433 回答
9

好吧,您可以考虑使用一个单元格并在其上使用“查询”公式。假设日期在 A 列,用户名 = B 列,评论是 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
于 2013-03-06T23:53:39.027 回答