4

Google Docs と Google Apps Script を使用して、スプリント用の自動生成レポートを作成しています。

チャートをシートに追加したいのですが、次のコードですべて正常に動作します。

    var lChartBuilder = SpreadsheetApp.getActiveSheet().newChart();
    lChartBuilder.addRange(SpreadsheetApp.getActive().getRange("Tasks!C39:S40"));
    lChartBuilder.setOption("title", "Task Burndown");

    var lChart = lChartBuilder.asLineChart().build();
    SpreadsheetApp.getActiveSheet().insertChart(lChart);

しかし、私のシリーズは縦ではなく横に編成されています。エディターで、「行/列を切り替える」オプションと「ラベルに列 C を使用する」というオプションを見ましたが、多くのオプション (lChartBuilder.setOption("reverseCategories", true);または などlChartBuilder.setOption("isStacked", true);) を試しましたが、それらはすべて最後のタブに関連しているようです開始タブ。

それで、それを行う方法(データを転置する以外)はありますか、それともチャートエディタを手動で起動して、生成するたびにこれを修正する必要がありますか?

おまけの質問: 最初の行/列がヘッダーであり、凡例として機能するように (Google Apps Script を使用して) どのように設定すればよいですか?

4

2 に答える 2

6

おまけの質問については、おまけの答えがあります。グラフを作成/変更するときにこのオプションを使用します。

setOption('useFirstColumnAsDomain','true')
于 2013-11-05T14:31:48.050 に答える
5

埋め込みチャートはスプレッドシート データを使用し、転置自体はサポートしていないため、埋め込みグラフの場合はデータを転置する必要があります。ただし、これはプログラムで処理でき、転置操作自体は簡単です。

以下のコードでは、転置されたデータの作業コピーを保存するために使用される「Scratch」という名前のシートが存在すると想定しています。邪魔にならないように、このシートを作成して非表示にすることができます。

// Uses 2D Arrays Library, see https://sites.google.com/site/scriptsexamples/custom-methods/2d-arrays-library

function buildChart() {
  var taskSheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Tasks");
  var lChartBuilder = taskSheet.newChart(); taskSheet.removeChart(chart)
  var srcData = taskSheet.getRange("Tasks!C39:S40").getValues();

  // Transpose the table (using 2D Array Library)
  var scratchData = ArrayLib.transpose(srcData);

  var numRows = scratchData.length;
  var numCols = scratchData[0].length; // assume all rows are same width

  // Write scratch values to scratch sheet.
  var scratchSheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Scratch");
  scratchSheet.getRange(1, 1, numRows, numCols).setValues( scratchData );
  SpreadsheetApp.flush();

  lChartBuilder.addRange(scratchSheet.getDataRange());
  lChartBuilder.setOption("title", "Task Burndown");

  var lChart = lChartBuilder.asLineChart().setPosition(1, 1, 1, 1).build();
  taskSheet.insertChart(lChart);
};

おまけに...このようにデータをフォーマットすると、最初の行/列がヘッダーになり、凡例として機能します。

結果チャート

さて、まだ解決すべき問題がいくつかあります。

  • このコードは、実行するたびに新しいグラフを作成しますが、代わりに変更する必要がある場合があります。(代わりに、転置されたデータを更新し、変更された場合は新しい範囲を取得するようにチャートを変更します。)
  • X 軸には、すべてのタスク名が表示されるわけではありません。制御できる場合があります。

あなたは、データを転置したくないと言います。残念ながら、現在のチャートの化身ではそれを回避する方法はありません。自分でデータを操作する必要があります。別のチャート ライブラリを使用してウィジェットを挿入すると機能する可能性がありますが、スプレッドシートのウィジェット サポートは廃止されました。幸いなことに、私はすでに同様のコードを持っていたので、見た目よりも簡単に作業できました。ArrayLib の他のフィルタリング機能のいくつかを確認する必要があります。それを使用して多くのことができます。

于 2013-01-14T18:53:55.547 に答える