1. ホーム
  2. /
  3. [GAS]
  4. /
  5. GAS getDataTable()メソッドでスプレッドシートのデータをグラフ化する徹底解説

GAS getDataTable()メソッドでスプレッドシートのデータをグラフ化する徹底解説

GAS getDataTable()メソッドでスプレッドシートのデータをグラフ化する徹底解説

スプレッドシートのデータを手動でグラフにする作業、面倒に感じていませんか? Google Apps Script (GAS) を使えばその作業を自動化できますが、データをグラフに適した形に整えるのは少し手間がかかります。

そんな課題を解決するのが getDataTable() メソッドです。このメソッドを使えば、スプレッドシートのデータをたった1行でグラフ用のデータ形式に変換でき、データ可視化のプロセスを劇的に効率化できます。

本記事では、getDataTable() の基本的な使い方から、getValues() との違い、Google Charts APIと連携した動的なグラフ生成、大規模データを扱う際の注意点まで、実用的なサンプルコードを交えて分かりやすく解説します。

Google Apps Script 始め方 スプレッドシート 活用例
Google Apps Script 始め方 スプレッドシート 活用例 を各ショップで検索

getDataTable() とは? getValues() との違い

GASでセルの値を取得する際によく使われる getValues() は、データを二次元配列(Object[][])として返します。これは汎用性が高い一方、グラフ作成で使うには、データ型を自分で変換したり、ヘッダー行を別に処理したりする必要があります。

一方、getDataTable() は、データを DataTable というグラフ作成に特化したオブジェクト形式で直接取得します。

メソッド返り値の型特徴
getValues()Object[][]二次元配列。汎用性が高いが、グラフ化には加工が必要。
getDataTable()DataTableグラフ用に構造化されたオブジェクト。ヘッダーやデータ型を自動認識。

getDataTable() を使う最大のメリットは、Google Charts APIとシームレスに連携できる点です。データ加工の手間を省き、コードをシンプルに保てます。

getDataTable() の基本的な使い方

それでは、getDataTable() の基本的な使い方を見ていきましょう。

構文と基本的なコード

getDataTable() は、Range オブジェクトから呼び出します。

// "サンプルA" という名前のシートを取得
const sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("サンプルA");
// E2:F4 の範囲を取得
const range = sheet.getRange("E2:F4");
// 範囲内のデータを DataTable として取得
const dataTable = range.getDataTable();

これだけで、指定範囲のデータが DataTable オブジェクトに変換されます。

ヘッダー行を自動で認識させる方法

データ範囲の1行目をヘッダーとして扱いたい場合、引数に true を渡します。

// 最初の行をヘッダーとして認識させる
const dataTableWithHeader = range.getDataTable(true);

こうすることで、Charts APIが自動的にヘッダー情報を読み取り、グラフの軸ラベルなどに設定してくれるため非常に便利です。

DataTable をカスタマイズする

getDataTable() で取得したデータをそのまま使うだけでなく、Charts.newDataTable() を使ってデータ構造をより細かく定義することも可能です。

列のデータ型を厳密に定義する

addColumn() メソッドで、各列のデータ型(例: DATE, NUMBER, STRING)を明示的に指定できます。これにより、データの整合性が高まり、意図通りのグラフ描画が可能になります。

const dataTable = Charts.newDataTable()
    .addColumn(Charts.ColumnType.DATE, '日付')
    .addColumn(Charts.ColumnType.NUMBER, '売上高')
    .addRow([new Date(2023, 0, 15), 150000])
    .addRow([new Date(2023, 0, 16), 180000])
    .build();

DataTable のメタ情報を活用する

DataTable オブジェクトは、データそのものだけでなく、列数や列ラベルといったメタデータも保持しています。これらを利用することで、データの構造に応じた動的な処理を実装できます。

// DataTable の列数を取得
const numberOfColumns = dataTable.getNumberOfColumns();
// 最初の列(インデックス0)のラベルを取得
const columnLabel = dataTable.getColumnLabel(0);

console.log(`列数: ${numberOfColumns}, 最初の列のラベル: ${columnLabel}`);

Google Charts API と連携してグラフを生成する

getDataTable() の真価は、Google Charts API との連携で発揮されます。

DataTable から動的にグラフを作成

取得した DataTablesetDataTable() メソッドに渡すだけで、棒グラフ、折れ線グラフ、円グラフなど、様々なグラフを簡単に生成できます。

以下は、棒グラフと折れ線グラフを組み合わせたコンボチャートを作成する例です。

const chart = Charts.newComboChart()
    .setDataTable(dataTable)
    .setTitle('売上分析')
    .setSeriesType(Charts.ChartType.COLUMN) // デフォルトを棒グラフに
    .setOption('series', { 1: { type: 'line' } }) // 2番目の系列だけ折れ線グラフに
    .setDimensions(800, 600)
    .build();

グラフのデザインをカスタマイズする

setOption() メソッドを使えば、グラフの色、線の太さ、凡例の位置など、デザインを細かく調整できます。

const styledChart = Charts.newAreaChart()
    .setDataTable(dataTable)
    .setOption('series', {
        0: { color: '#FF6D00', lineWidth: 3 }, // 1番目の系列のスタイル
        1: { dataLabel: 'value', annotations: { textStyle: { color: '#2962FF' } } } // 2番目の系列のスタイル
    })
    .build();

大規模データを扱う際の注意点と最適化

数万行を超える大規模なデータセットに getDataTable() を使用すると、メモリ上限や実行時間制限に達する可能性があります。

メモリ消費を抑えるバッチ処理

対策として、一度に全てのデータを読み込むのではなく、データを小さな塊(バッチ)に分割して処理する方法が有効です。この場合、まず getValues() でデータを配列として取得し、slice() で分割しながら処理を進めるのが定石です。

const sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('LargeData');
const values = sheet.getDataRange().getValues(); // まずは全データを配列で取得
const totalRows = values.length;
const batchSize = 5000; // 一度に処理する行数

// ヘッダー行(1行目)をスキップしてループ
for (let i = 1; i < totalRows; i += batchSize) {
    const batchValues = values.slice(i, i + batchSize);
    
    // ここでバッチごとに処理を実行する
    // 例: データを加工して別のシートに書き出す、APIに送信するなど
    console.log(`${i}行目から${batchSize}行分のデータを処理しました。`);
}

大規模データを直接グラフ化する際は、getDataTable() よりも、このように手動でデータを間引いたり集計したりするアプローチが必要になることを覚えておきましょう。

まとめ

この記事では、GASの getDataTable() メソッドについて解説しました。

  • getDataTable() はスプレッドシートのデータをグラフ化に適した DataTable 形式で取得する
  • getValues() よりもデータ加工の手間が少なく、コードがシンプルになる
  • 引数 true でヘッダー行を自動認識できる
  • Google Charts API との連携がスムーズで、動的なグラフ生成が容易になる
  • 大規模データを扱う際は、バッチ処理などのメモリ最適化が必要

getDataTable() を使いこなせば、面倒なデータ可視化作業を大幅に効率化できます。ぜひ本記事を参考に、あなたの業務自動化に役立ててください。

Google Apps Script 始め方 スプレッドシート 活用例
Google Apps Script 始め方 スプレッドシート 活用例 を各ショップで検索
Class Range | Apps Script | Google for Developers

GoogleVisualization API リファレンス | Charts | Google for Developers

関連記事

GAS getDataTable(true) でヘッダー行を正しく扱う方法【グラフ作成】

GAS getDataTable(true) でヘッダー行を正しく扱う方法【グラフ作成】

GASの getDataTable() を使ってグラフを作ったら、「ヘッダー(見出し)までデータとして扱われてしまい、グラフがおかしくなった」という経験はありませんか?

これは getDataTable() の非常に重要なパラメータ firstRowIsHeader の設定が原因です。この設定を正しく理解するだけで、データ取得の精度が格段に上がり、グラフ作成の自動化がスムーズに進みます。

本記事では、getDataTable()firstRowIsHeader パラメータに焦点を当て、その役割と true / false の使い分け、そして実践的な応用例までを分かりやすく解説します。

GAS `getWraps()`でスプレッドシートのテキスト折り返しを一括制御!応用例と最適化

GAS `getWraps()`でスプレッドシートのテキスト折り返しを一括制御!応用例と最適化

Google Apps Script(GAS)でスプレッドシートを効率的に操作する際、セルのテキスト折り返し設定を一括で管理することは、大規模なデータセットの視認性を高め、プロフェッショナルなレポート作成において不可欠です。getWraps()メソッドは、このテキスト折り返し設定を複数のセルから一度に取得するための強力なツールです。

本記事では、GASのRange.getWraps()メソッドを徹底解説します。基本的な使い方から、データ量が多い場合のパフォーマンス最適化(キャッシュ活用)、さらには取得した情報を元にした列幅の自動調整、堅牢なスクリプト開発のためのエラー処理、そしてsetWraps()メソッドと連携した一括設定方法まで、具体的なコードを交えて分かりやすく紹介します。