2012-05-09 39 views
19

我正在使用Google應用腳本將表單數據寫入電子表格。現在我想從符合條件的Excel中獲取值(例如,按日期,用戶名過濾)並使用應用程序腳本顯示它們。使用Google應用腳本從電子表格數據中檢索行

我的電子表格有

+-------------+-----------+----------------------+ 
| 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過濾數據,並使用應用程序腳本標籤(這是運行作爲Web服務)顯示它們。

我所有的搜索都使用SpreadsheetApp.getActiveSheet().getDataRange();返回解決方案,我認爲這並不是優化的方式,可以在表格中顯示1000多行中的一條記錄。

編輯

現在,我只用.getValues()。此處顯示的數據僅供參考。我的真實表單現在有15列和5000+行。最終它將增長到數百萬,因爲這是一個時間表應用程序。我想知道是否有任何其他方式getValues()過濾行?

在tmp單元格上應用=Filter公式也會成爲一個問題,因爲腳本可以被多個人同時使用。

+1

遺憾的是沒有辦法與應用的過濾器的GetValues。但是,如果數據增長到數百萬行,那麼腳本將不會成爲您的主要關注點,因爲電子表格只能容納40萬個單元格。 –

回答

26

最簡單的方法,和一個我知道,就是:使用

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循環

for (i in labels) { ... 
+0

謝謝@cartman。但我有成千上萬的記錄,並且循環似乎是不好的解決方案。 – palaniraja

+0

它真的很快,你知道...... – Cartman

+0

成千上萬的行絕對是很少的,特別是只有3列。一次完成getValues和循環是解決方案。除非我們不瞭解您的數據或使用情況。例如過濾器是靜態的,或者數據是。 –

4

那麼,你可以考慮使用一個細胞填充panen UI與標籤使用「查詢」公式就可以了。讓我們假設日期是在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 
相關問題