1

私はstackexchangeに新しいですので、この質問が広すぎるか、すでに私が見つけることができなかった答えがある場合は私の謝罪です。スプレッドシートhere、スクリプトhere、ダッシュボード(開発版)hereがあります。日付の列の代わりにarrayToDataTable

私は、Google Appsスクリプトの視覚化の日付を数日間処理することに頭を悩ましています。

究極の目標は、注釈付きタイムラインと、スプレッドシートのデータセットに基づく他のチャートを含むダッシュボードを作成することです。私はMogsdad tutorialを使用して3層のGoogleビジュアライゼーションダッシュボードを作成しました。このダッシュボードでは、データが外部スプレッドシートから取得され、次にarrayToDataTableを使用してDataTableにプルされます。すべてが箱からすぐに出ました。しかし、私のデータには日付が含まれているので、元のデータに日付の列を追加しましたが、alasのarrayToDataTableはthis postの日付の型を受け入れません。私も日付の書式設定を確保するために複数のアプローチを試してみました

ScriptError: The script completed but the returned value is not a supported return type.

:日付列が追加されたときに私は次のような結果を得る(オプションはnew Date(dateColumn[i])dateColumn[i].toJSON()を通じて日付列の値を入れ含んをダッシュ​​ボードをレンダリングし、日付は処理できません)、スプレッドシート内の強制的な日付フォーマット(yyyy-MM-dd)、上記のポストに記載されているDataView(ダッシュボードは 'Loading'を過ぎていない)などを使用します。

私の質問は、この3階層アプローチで日付列を受け入れるarrayToDataTableの代替案は何ですか?あるいは、以下の方法のエラーは何ですか? (

  1. は手動で列を追加し、手動で追加したデータではない:私は次のことを試してみましたvar data = google.visualization.DataTable()

    var data = google.visualization.arrayToDataTable(response,false)からのコードを変更している私は列を追加しようとしてきたすべてのケースについて

    //Add Columns 
    data.addColumn('string','Name'); 
    data.addColumn('string','Gender'); 
    data.addColumn('number','Age'); 
    data.addColumn('number','Donuts eaten'); 
    data.addColumn('date','Last Donut Eaten'); 
    
    //Add Rows 
    data.addRows([ 
        ['Miranda','Female', 22,6,6], 
        ['Jessica','Female',22,6,12], 
        ['Aaron','Male',3,1,13] 
    ]); 
    
  2. 自動的に行を追加します(行は追加されますが、何の日付列が存在しない場合NLY列を追加すると、自動的に(どちらも、作業していないではないループでカラムを追加自動的に行(動作していない、1の組み合わせ及び2)

  3. を追加する手動

    //Add Rows 
    for (var i=1; i<response.length; i++) { 
        data.addRow(response[i]); 
    } 
    
  4. )動作します日付またはない)

    for (var i=0; i<response[0].length; i++) { 
        if (response[1][i] instanceof Date) { //Checks if first value is Date 
        data.addColumn('date',response[0][i]); 
        }; 
        else if (response[1][i] instanceof Number) //Checks if first value is Number 
        data.addColum('number',response[0][i]); 
        else data.addColumn('string',response[0][i]; //Otherwise assume string 
        }; 
    

はあなたの助けのためにありがとうございました場合は!

答えて

0

クエリ(google.visualization.Query)クラスを使用してスプレッドシートからデータを取り出すことができます。
これは、日付列を正しく変換します...

google.charts.load('current', { 
 
    packages:['table'] 
 
}).then(function() { 
 
    var queryURL = 'https://docs.google.com/spreadsheets/d/1aaxYNLCuPz3o3TA1jdryenUP01Qbkdaut4AR5eIhe9s/edit#gid=0'; 
 
    var query = new google.visualization.Query(queryURL).send(function (response) { 
 
    var data = response.getDataTable(); 
 

 
    // show column types 
 
    for (var i = 0; i < data.getNumberOfColumns(); i++) { 
 
     console.log(data.getColumnLabel(i), '=', data.getColumnType(i)); 
 
    } 
 

 
    // draw table chart 
 
    var table = new google.visualization.Table(document.getElementById('chart-table')); 
 
    table.draw(data); 
 
    }); 
 
});
<script src="https://www.gstatic.com/charts/loader.js"></script> 
 
<div id="chart-table"></div>


注:例では、ライブラリをロードするためにjsapiを使用して、
このライブラリは使われなくなりました。
release notes ...

The version of Google Charts that remains available via the jsapi loader is no longer being updated consistently. Please use the new gstatic loader.js from now on.

によると、これが唯一の私があまりにも速く入力してクリック申し訳ありません

+0

...スニペット上記参照、load文を変更します。 お返事ありがとうございました。私はそれが私が行く必要がある方向だと思う。 しかし、私は実際にそれを実装する方法はわかりません。私はスクリプトファイルに4つのシートを持っていますが、これはcode.gsとjavascript.htmlの2つです。 あなたはjavascriptファイルの中に入ると思われるクエリのようですが、私はMogsdadがダッシュボードの背後にあるスプレッドシートへのアクセスを阻止し、javascriptファイルにのみ "応答"を送るために別のシートを作成したと信じています。実装に関するいくつかの方向を教えてください。おかげで –

+0

さて、私は最終的には、基本的に既存の例からコードのほとんどを取り除くことができました。そして、基礎となるスプレッドシートへのアクセスを避けるために、私はクエリーが引き出す仲介スプレッドシートを作成し、中間スプレッドシートをソースから取り出しますが、公開できる情報のみを取り出します。 –

+0

いいね、apps-scriptを使用しないでください。 – WhiteHat

関連する問題