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

Posted

技术标签:

【中文标题】使用谷歌应用脚​​本从电子表格数据中检索行【英文标题】:Retrieve rows from spreadsheet data using google app script 【发布时间】:2012-05-18 02:03:56 【问题描述】:

我正在使用 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 公式也将是一个问题,因为脚本可以由多个人同时使用。

【问题讨论】:

不幸的是,无法通过应用过滤器获取值。但是,如果您的数据增长到数百万行,则脚本将不是您的主要关注点,因为电子表格只能容纳 40 万个单元格。 【参考方案1】:

我知道的最简单的方法是: 使用

获取数组中的值
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)  ...

【讨论】:

感谢@cartman。但是我有数千条记录并且循环它似乎是一个不好的解决方案。 几千行肯定很少,特别是只有3列。使用 getValues 和循环一次获取所有内容是这里的解决方案。除非我们不知道您的数据或使用情况。例如过滤器是静态的,或者数据是静态的。【参考方案2】:

好吧,您可以考虑使用一个单元格并在其上使用“查询”公式。假设日期在 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

【讨论】:

以上是关于使用谷歌应用脚​​本从电子表格数据中检索行的主要内容,如果未能解决你的问题,请参考以下文章

谷歌应用脚​​本从 gmail 中删除特定附件

如何从公共谷歌电子表格中检索简单的xml

谷歌应用程序脚本电子表格字符串检索问题

谷歌脚本从电子表格中获取 json 数据

谷歌电子表格和谷歌应用引擎如何实现交互

是否可以使用谷歌电子表格中的数据“预填”谷歌表单?