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
_式を適用することも問題になります。多くの人がスクリプトを同時に使用できるからです。
最も簡単な方法、そして私が知っている方法は:
を使用して配列の値を取得
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) { ...
さて、セルの使用を検討し、そのセルで「クエリ」式を使用できます。日付が列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