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行以上から1つのレコードを表示する最適化された方法ではないと思うソリューションを返します。

編集

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

=Filterスクリプトは複数の人が同時に使用できるため、tmp セルに式を適用することも問題になります。

4

2 に答える 2

37

最も簡単な方法、そして私が知っている方法は、次のことです。
を使用して配列の値を取得する

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) { ...
于 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 に答える