web-dev-qa-db-ja.com

Googleアプリスクリプトを使用してスプレッドシートデータから行を取得する

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(); を使用してソリューションを返します。

[〜#〜] edit [〜#〜]

現在、.getValues()のみを使用しています。また、ここに示すデータはサンプル用です。私の実際のシートには、今のところ15列と5000行以上があります。これはタイムシートアプリケーションであるため、最終的には数百万に成長します。フィルター処理された行のgetValues()に他の方法はありますか?

Tmpセルに_=Filter_式を適用することも問題になります。多くの人がスクリプトを同時に使用できるからです。

24
palaniraja

最も簡単な方法、そして私が知っている方法は:
を使用して配列の値を取得

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
Cartman

さて、セルの使用を検討し、そのセルで「クエリ」式を使用できます。日付が列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
9
kckoay