ADVERTISEMENT

【Googleスプレッドシート】グラフを画像として一括出力する!複数グラフのエクスポート

【Googleスプレッドシート】グラフを画像として一括出力する!複数グラフのエクスポート
🛡️ 超解決

Googleスプレッドシートで作成したグラフを画像として保存したい場面は多いものです。しかし、グラフを1つずつ右クリックして保存するのは手間がかかります。特に大量のグラフを扱う場合は、一括でエクスポートする方法が必要です。この記事では、Apps Scriptを活用して複数のグラフを画像として一括出力する手順を詳しく解説します。スクリプトのコード例も示しますので、コピー&ペーストで簡単に実装できます。

【要点】複数グラフを画像ファイルとして一括エクスポートする方法

  • Apps Scriptのグラフ画像化メソッド: スクリプト内でchart.getAs('image/png')を使用して、グラフをPNG画像として取得します。
  • Googleドライブへの保存: 取得した画像をDriveApp.createFile()でドライブに保存します。ファイル名にはグラフタイトルやシート名を含められます。
  • 全シートのグラフをループ処理: SpreadsheetApp.getActiveSpreadsheet().getSheets()で全シートを取得し、各シート内の全グラフをループして画像出力します。

ADVERTISEMENT

グラフの一括画像出力が必要な理由と基本的な仕組み

Googleスプレッドシートの標準機能では、グラフを画像として保存する際に手動操作が必要です。グラフを右クリックして「画像として保存」を選ぶか、グラフをコピーして画像編集ソフトに貼り付ける方法があります。これらの方法はグラフが数個なら問題ありませんが、10個や20個になると非常に非効率です。また、毎回同じ形式で出力したい場合、手動ではばらつきが生じます。

そこで役立つのがApps Scriptです。Googleスプレッドシートは組み込みのスクリプトエディタを持ち、JavaScriptベースのコードで操作を自動化できます。グラフオブジェクトにはgetAs()メソッドがあり、これを呼び出すことで画像データ(Blob)を取得できます。そのBlobをGoogleドライブに保存すれば、PNG形式の画像ファイルが完成します。スクリプトで全シートをループしながら各グラフを処理することで、一括出力が実現します。

Apps Scriptで複数グラフを一括エクスポートする手順

  1. スクリプトエディタを開く
    Googleスプレッドシートを開き、メニューから「拡張機能」→「Apps Script」をクリックします。新しいタブでスクリプトエディタが開きます。
  2. スクリプトファイルにコードを記述する
    デフォルトで「コード.gs」というファイルが開きます。以下のコードをコピー&ペーストしてください。
    function exportAllChartsToDrive() {
    var ss = SpreadsheetApp.getActiveSpreadsheet();
    var sheets = ss.getSheets();
    var folderName = ss.getName() + "_グラフ画像";
    // フォルダがなければ作成
    var folders = DriveApp.getFoldersByName(folderName);
    var folder;
    if (folders.hasNext()) {
    folder = folders.next();
    } else {
    folder = DriveApp.createFolder(folderName);
    }

    sheets.forEach(function(sheet) {
    var charts = sheet.getCharts();
    charts.forEach(function(chart, index) {
    var title = chart.getOptions().get('title') || 'グラフ' + (index+1);
    var safeTitle = title.replace(/[\/:*?"<>|]/g, '_');
    var fileName = sheet.getName() + "_" + safeTitle + ".png";
    var blob = chart.getAs('image/png').setName(fileName);
    folder.createFile(blob);
    });
    });

    SpreadsheetApp.getUi().alert('完了しました。フォルダ「' + folderName + '」に画像を保存しました。');
    }

  3. スクリプトを保存して実行する
    ツールバーの「保存」アイコンをクリックし、プロジェクト名を適宜設定します。次に「実行」ボタン(▶)をクリックします。初回実行時は権限の承認が必要です。表示されるダイアログで「許可」を選びます。
  4. 出力結果を確認する
    スクリプトが正常に終了すると、Googleドライブのマイドライブ直下に「スプレッドシート名_グラフ画像」というフォルダが作成され、その中に各グラフのPNG画像が保存されます。ファイル名は「シート名_グラフタイトル.png」の形式です。グラフにタイトルがない場合は「グラフ1」「グラフ2」のように連番が付きます。

スクリプトのカスタマイズポイント

上記のコードは基本的な形です。次のように変更して用途に合わせられます。

  • 保存先フォルダを指定する: var folder = DriveApp.getFolderById('フォルダID'); として特定のフォルダに保存できます。
  • 画像形式を変更する: getAs('image/png') の部分を getAs('image/jpeg') に変えるとJPEG形式で出力されます。
  • 特定のシートだけ処理する: sheets 配列をフィルターして、特定のシート名だけに絞り込めます。

一括出力でよく起きるトラブルと対処法

グラフが見つからないエラーになる

スクリプト実行時に「グラフが見つかりません」というエラーが表示される場合があります。これは、対象のシートにグラフが1つもないときに発生します。スプレッドシートにグラフが存在することを確認してください。また、グラフが画像として埋め込まれているのではなく、セル内の図形や画像である場合は、getCharts()では取得できません。グラフは「挿入」メニューから追加した本物のグラフである必要があります。

権限承認でエラーが出る

初回実行時に権限承認の画面が表示されず、代わりにエラーが表示されることがあります。これは、Google Workspaceの管理者によってApps Scriptの実行が制限されている場合に起こります。組織の管理者に問い合わせて、スクリプトの実行を許可してもらうか、個人のGoogleアカウントで試してください。また、スクリプトエディタの「実行」メニューから「関数を実行」を選び、明示的に「exportAllChartsToDrive」を選択してから実行すると改善することがあります。

ファイル名に使えない文字があるとエラーになる

グラフのタイトルに「/」「:」「*」などのファイル名に使えない文字が含まれていると、DriveApp.createFile()でエラーが発生します。上のコードではreplace(/[\/:*?"<>|]/g, '_')でこれらをアンダースコアに置換していますが、他の文字も適宜処理してください。特に見えない制御文字は事前に取り除くことをおすすめします。

ADVERTISEMENT

手動エクスポートとスクリプト一括出力の比較

項目 手動エクスポート スクリプト一括出力
作業時間(グラフ10個) 5〜10分 1分以内(スクリプト実行時間含む)
ファイル名の一貫性 ばらつきやすい 自動で統一された書式
画像形式の指定 PNG固定(GUI上はPNGのみ) PNG、JPEGなど選択可能
保存先の自由度 ダウンロードフォルダのみ 任意のGoogleドライブフォルダ
繰り返し実行 毎回手動 スクリプトを再度実行するだけ

この表からもわかるように、グラフの数が多いほどスクリプト一括出力のメリットが大きくなります。特に定期的にグラフを更新して画像をエクスポートする業務では、スクリプトをトリガーで定期実行することも可能です。

まとめ

この記事では、Googleスプレッドシートの複数グラフを画像として一括出力する方法を解説しました。Apps Scriptを使うことで、手動では時間のかかる作業を数秒で完了できます。紹介したコードをそのまま使えば、全シートの全グラフがPNG形式でGoogleドライブに保存されます。応用として、条件に応じて特定のグラフだけ出力したり、画像形式をJPEGに変更したりするのも簡単です。次は、グラフをPDF形式で一括出力するスクリプトにも挑戦してみてください。


ADVERTISEMENT

この記事の監修者
✍️

超解決 第一編集部

疑問解決ポータル「超解決」の編集チーム。正確な検証と、現場視点での伝わりやすい解説を心がけています。