2013-07-29 19 views
6

ログインしているユーザーに基づいて別のスプレッドシートのデータをフィルタ処理するスプレッドシートをプログラムで作成する方法を探しています。Googleのスプレッドシート 'クエリ'機能をGoogle Appsスクリプトで使用できますか?

スプレッドシート内のクエリ機能を使用してこれを行うことができます。 しかし、アプリスクリプトからクエリ関数を呼び出す方法を見つけることができませんか?

これはできますか?サンプルコードに感謝します。おかげさまで

答えて

5

いいえ、Google Apps Scriptから呼び出すことができるクエリ機能のAPIはありません。 (実際にこのようにスプレッドシート関数を呼び出す方法はありません。)

あなたはそれを自分で書くことなく、いくつかの同様の機能を得ることができます。 2D Arrays Libraryには、一致する行を検索するためのさまざまな「フィルタ」機能が含まれています。

+0

これは仕事をしなければならない何かのように聞こえます。ありがとう! – awsamar

+0

Mogsdad、Arraysライブラリは便利ですが、依然としてクエリ関数ほど有効ではありません。私は、ユーザーダッシュボードを構築するために可視化/グラフAPIを使用しようとしています。ダッシュボードをパーソナライズするには、ログインしたユーザーに基づいてスプレッドシートからデータをフィルタリングする機能が必要です。しかし、フィルタでは、複数の列を比較する必要がありました。これは、クエリ関数 '... col5 = "&cell1&"またはcol6 = "&cell2&"で簡単です。 – awsamar

3

おそらく、数式を使って、必要以上に何かを得ることができます。

function testFormula() { 
    var ss = SpreadsheetApp.getActiveSpreadsheet(); 
    var sheet = ss.getSheets()[1]; 
    var cell = sheet.getRange("A1"); 
    cell.setFormula("=QUERY('Sheet0'!A1:B5;\"SELECT A, B\"; 0)"); 
} 
+0

ウィリアム、提案をありがとう。私はすでにスクリプトを通じて更新されたセルで 'Query'を使用しています。しかし、その行動は私が必要とするものではありません。しかし、ありがとう。 – awsamar

7

私はその上の制約があるかどうかわからない...

function test() { 
    var req = query("=QUERY(shopT!B2:E; \"select min(E) where (B=3 or B=4 and D=2) group by C, D\")"); 

    Logger.log(req); 
} 

function query(request) { 
    var sheet = sp.insertSheet(); 
    var r = sheet.getRange(1, 1).setFormula(request); 

    var reply = sheet.getDataRange().getValues(); 
    sp.deleteSheet(sheet); 

    return reply; 
} 
+0

これは私にとってはうまくいくが、Googleアプリでは多くの回避策として非常に醜いように見える。 :-) –

+0

"sp"はどのように定義されていますか:var sheet = sp.insertSheet()そして、このプロセスにシートのIDを渡すにはどうしたらいいですか? sheetIDまたはsheetURLを介して – Calcutta

+0

var sp = SpreadsheetApp.openById( "*******************"); – zizix

関連する問題