0

主な質問: 以下のスクリプトが何も返さないのはなぜですか? バージョンを指定してデプロイすると、スクリプトは「スクリプトは完了しましたが、何も返しませんでした」を返します。

(おまけの質問: 同じダッシュボードと同じスクリプト内の 2 つの異なるデータテーブルで 2 つのグラフを実行できますか?)

入力は、4 つの列とヘッダー行を持つ Google スプレッドシートです: Year|Month|Group|Count、Group を除くすべての数値 (1 文字)。

目的は、yearmo (201001、201002...) ごとの合計カウントの折れ線グラフを作成することです。理想的には、同じスクリプト内で年ごとの合計数の別の折れ線グラフを生成したいのですが、一度に 1 ステップずつ...

データはロールアップされていないため (Google Apps スクリプトは初めてで、スプレッドシート自体をピボットする以外に集計を見つけることができません)、ハッシュを使用して、年ごとのカウントを合計します。年組も同様に行います。

エレガントではないかもしれませんが (たまたま js も初めてです)、私には理にかなっています。残念ながらうまくいきません。ポインタをありがとう。

編集 2013-04-25

1 つのスクリプトで多くのことをやりすぎて、足場を失いました。そこで、スクリプトの外で集計を行い、新しいスプレッドシートを作成し、ここにあるコードを実行しましたhttps://sites.google.com/site/appsscripttutorial/chart-services/line-chart : 折れ線グラフを取得しました。

function doGet(){
  // counts by yearmo
  var ss = SpreadsheetApp.openById('0Atd6tVDA1d3UOI-jfkdlRHbk85Y19BcU9BNFdPNXBlVlE');
  var data = ss.getDataRange().getValues();
  var yr = [];
  var mo = [];
  for (var i = 1; i < data.length; i++) {
    yr[data[i][0]] = 0;
    mo[data[i][1]] = 0;
  }
  Logger.log( yrLvls = Object.keys(yr) );
  Logger.log( moLvls = Object.keys(mo) );
  // initialize hash
  var yearmo = [];
  for (var i = 0; i < yrLvls.length; i++){
    for (var j = 0; j < moLvls.length; j++){
      var key = yrLvls[i] + '-' + moLvls[j]
      yearmo[ key ] = 0;
    }
  }
  // aggregation
  for (var i = 1; i < data.length; i++) {
    yearmo[  data[i][0] + '-' + data[i][1] ]  +=  data[i][3];
  }
  // check
  var values = Object.keys(yearmo).map(function(key){
    return yearmo[key];
  });
  Logger.log( values );
  // Year Mo
  Logger.log( "--------------" );
  var data_yearmo = Charts.newDataTable()
  .addColumn(Charts.ColumnType.STRING, 'YearMo')
  .addColumn(Charts.ColumnType.NUMBER, 'Count');
  Logger.log( Object.keys(yearmo) );
  for ( key in Object.keys(yearmo) ) {
      Logger.log( key );
      data_yearmo.addRow(  [ key , yearmo[key] ]  );
  }
  data_yearmo.build()

  var lineChart_yearmo = Charts.newLineChart()
   .setTitle('Counts')
   .setXAxisTitle('YearMo')
   .setYAxisTitle('Counts')
   .setCurveStyle(Charts.CurveStyle.SMOOTH)
   .setPointStyle(Charts.PointStyle.MEDIUM)
   .setDataTable(data_yearmo);

  var uiApp = UiApp.createApplication().setTitle('Yearmo');
  uiApp.add(lineChart_yearmo);
  return uiApp;
}
4

2 に答える 2

1

展開したアプリのバージョンを更新していない可能性があります。「最新のコード」開発リンク (アプリをデプロイするときにダイアログから取得できます) を使用してみてください。それが機能する場合は、[バージョンの管理] メニューから新しいバージョンを作成し、デプロイされたアプリを更新してそのバージョンを使用します。

于 2013-04-25T05:13:01.590 に答える
0

電話に追加.build()するのを忘れていました。Charts.newLineChart()

data_yearmo.build()明らかに必要ではありませんが、「.build()」は間違いなく必要Charts.newLineChart()です。クレジットは、上記の編集のリンクに移動します。

于 2013-04-25T14:52:28.790 に答える