GASでグラフを自動作成!EmbeddedChartBuilder.addRangeで業務効率化:定期レポート、メール送信、ファイル操作を自動化

GASでグラフを自動作成!EmbeddedChartBuilder.addRangeで業務効率化:定期レポート、メール送信、ファイル操作を自動化

本記事では、Google Apps Script(GAS)のEmbeddedChartBuilder.addRangeメソッドに焦点を当て、グラフ作成の自動化について解説します。特に、定期レポートの作成、メール送信、ファイル操作といった業務における利用シチュエーションに特化した内容をお届けします。これらの処理を自動化することで、大幅な業務効率化を実現できます。

EmbeddedChartBuilder.addRangeとは?

EmbeddedChartBuilder.addRangeは、スプレッドシートのデータ範囲をグラフに追加するために使用されるGASのメソッドです。このメソッドを使用することで、スプレッドシート上の特定の範囲のデータをグラフとして可視化し、レポート作成などを自動化することができます。

構文:

chart.addRange(range)

  • chartEmbeddedChartBuilderオブジェクト
  • range:グラフに追加するデータ範囲(Rangeオブジェクト)

利用シチュエーション別実装方法

1. 定期レポートの自動作成

スプレッドシートに蓄積されたデータを定期的にグラフ化し、レポートを作成する例です。例えば、日々の売上データを集計し、週次レポートとして自動生成する場合などに活用できます。

function createWeeklySalesReport() {
// スプレッドシートを開く
const spreadsheet = SpreadsheetApp.getActiveSpreadsheet();
const sheet = spreadsheet.getSheetByName("売上データ");

// データ範囲を指定(A1から最終行まで)
const lastRow = sheet.getLastRow();
const dataRange = sheet.getRange("A1:B" + lastRow);

// グラフを作成
const chart = sheet.newChart()
.setChartType(Charts.ChartType.COLUMN)
.addRange(dataRange)
.setPosition(5, 5, 0, 0) // グラフの位置を指定
.build();

// シートにグラフを挿入
sheet.insertChart(chart);
}

2. メール送信時のグラフ添付

スプレッドシートのデータをグラフ化し、そのグラフをメールに添付して送信する例です。例えば、KPIの達成状況をグラフで可視化し、関係者に定期的にメールで共有する場合などに利用できます。

function sendKpiReportByEmail() {
// スプレッドシートを開く
const spreadsheet = SpreadsheetApp.getActiveSpreadsheet();
const sheet = spreadsheet.getSheetByName("KPIデータ");

// データ範囲を指定
const dataRange = sheet.getRange("A1:B10");

// グラフを作成
const chart = sheet.newChart()
.setChartType(Charts.ChartType.PIE)
.addRange(dataRange)
.build();

// グラフを画像として取得
const blob = chart.getAs('image/png');

// メールを送信
MailApp.sendEmail({
to: "recipient@example.com",
subject: "KPIレポート",
body: "KPIレポートを添付します。",
attachments: [blob]
});
}

3. ファイル操作と連携したグラフ作成

特定のフォルダに保存されたデータを読み込み、グラフを作成して別のファイルに保存する例です。例えば、複数のCSVファイルからデータを集計し、グラフを作成してPDFファイルとして保存する場合などに活用できます。

function createGraphFromCsvFiles() {
// フォルダIDを指定
const folderId = "YOUR_FOLDER_ID";
const folder = DriveApp.getFolderById(folderId);

// フォルダ内のCSVファイルを取得
const files = folder.getFilesByType("text/csv");

// データを格納する配列
let data = [];

// 各CSVファイルからデータを読み込む
while (files.hasNext()) {
const file = files.next();
const content = file.getBlob().getDataAsString();
const csvData = Utilities.parseCsv(content);
data = data.concat(csvData);
}

// スプレッドシートを作成し、データを書き込む
const spreadsheet = SpreadsheetApp.create("集計データ");
const sheet = spreadsheet.getActiveSheet();
sheet.getRange(1, 1, data.length, data[0].length).setValues(data);

// データ範囲を指定
const dataRange = sheet.getDataRange();

// グラフを作成
const chart = sheet.newChart()
.setChartType(Charts.ChartType.LINE)
.addRange(dataRange)
.setPosition(5, 5, 0, 0)
.build();

// シートにグラフを挿入
sheet.insertChart(chart);

// スプレッドシートをPDFとして保存(必要に応じて)
// const pdf = spreadsheet.getAs('application/pdf');
// DriveApp.createFile(pdf);
}

実用的なコード例

複数のデータ範囲をグラフに追加する

addRangeを複数回使用することで、複数のデータ範囲を1つのグラフに追加できます。

function addMultipleRangesToChart() {
const spreadsheet = SpreadsheetApp.getActiveSpreadsheet();
const sheet = spreadsheet.getSheetByName("データ");

// 複数のデータ範囲を指定
const range1 = sheet.getRange("A1:B5");
const range2 = sheet.getRange("D1:E5");

// グラフを作成
const chart = sheet.newChart()
.setChartType(Charts.ChartType.COLUMN)
.addRange(range1)
.addRange(range2) // 2つ目の範囲を追加
.setPosition(5, 5, 0, 0)
.build();

// シートにグラフを挿入
sheet.insertChart(chart);
}

よくある問題とトラブルシューティング

  • データ範囲が正しく認識されない:getRangeで指定する範囲が正しいか確認してください。A1形式の表記ミス、行数・列数の指定ミスなどが考えられます。
  • グラフの種類が適切でない:データの種類に適したグラフの種類を選択してください。例えば、割合を示す場合は円グラフ、時系列データの場合は折れ線グラフなどが適しています。
  • 権限エラー:スプレッドシートやDriveへのアクセス権限が不足している可能性があります。スクリプトの実行時に権限の許可を求められるので、適切に許可してください。

カスタマイズ方法と応用例

  • グラフのタイトル、軸ラベルの変更:.setTitle().setXAxisTitle().setYAxisTitle()メソッドを使用して、グラフの見た目をカスタマイズできます。
  • グラフの色の変更:.setColors()メソッドを使用して、グラフの色を変更できます。
  • トリガー設定による自動実行:GASのトリガー機能を設定することで、特定の時間間隔でスクリプトを自動実行できます。例えば、毎日午前9時にレポートを自動生成し、メールで送信するなどの設定が可能です。

まとめ

EmbeddedChartBuilder.addRangeメソッドを活用することで、GASによるグラフ作成の自動化が実現し、定期レポート、メール送信、ファイル操作といった業務を大幅に効率化できます。本記事で紹介したコード例を参考に、ぜひ業務効率化に役立ててください。