使用谷歌应用脚本从电子表格数据中检索行
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
【讨论】:
以上是关于使用谷歌应用脚本从电子表格数据中检索行的主要内容,如果未能解决你的问题,请参考以下文章