GoogleスプレッドシートをPDF化したいと思うシーンは少なくないですが、スプレッドシートの一部分をPNG化したいと思う時も稀にあるかと思います。
毎日特定のデータをPNG化したいと思うと手動ではやや面倒なので、そのような時はGASで自動化です。
私が作成したサンプルコードの主な仕様は以下の通りです。
<サンプルコードの仕様>
・GAS内で必要な設定値を指定し、スプレッドシート内の特定のセル範囲をPNGにします。
・"GoogleドライブのフォルダーID"の部分を、実際のフォルダーIDに差し替えてください。
・"シート1"の部分を、実際の対象シート名に差し替えてください。
・"A1:G20"の部分を、画像化したいセル範囲に差し替えてください。
・"table_export"の部分を、任意で差し替えてください。
・このPNG化処理においては、対象範囲のセル書式をそのまま画像に反映させることはできません。
そのままご使用いただけるサンプルコードになっていますが、カスタマイズすれば更に便利にご利用いただけるかと思いますので、ぜひ、ご自由にお使いください!
※ご質問にはお答えできませんので予めご承知おきくださいませ。
スプレッドシートイメージ

作成されたPNGイメージ

コード
function exportRangeToPng() {
// 設定値を指定
const driveId = "GoogleドライブのフォルダーID"; // 格納先のGoogleドライブのフォルダーID
const targetSheetName = "シート1"; // 対象シート名
const targetRange = "A1:G5"; // 画像化する範囲
const fileNamePart = "table_export"; // ファイル名の一部
const targetSheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName(targetSheetName);
// データ範囲を取得
const range = targetSheet.getRange(targetRange);
const data = range.getDisplayValues();
// データテーブルを作成
let table = Charts.newDataTable();
// 列数分の列を作成
for (let i = 0; i < data[0].length; i++) {
table.addColumn(Charts.ColumnType.STRING, '');
}
// データ範囲を入力
for (let j = 0; j < data.length; j++) {
table.addRow(data[j]);
}
// 範囲のサイズを取得
const numRows = range.getNumRows();
const numCols = range.getNumColumns();
// 画像のサイズを計算
const cellWidth = 100; // 1セルの幅(ピクセル単位)
const cellHeight = 40; // 1セルの高さ(ピクセル単位)
const width = numCols * cellWidth;
const height = numRows * cellHeight;
// 表グラフを作成&画像化
const blob = Charts.newTableChart()
.setDataTable(table.build())
.setDimensions(width, height)
.setOption("alternatingRowStyle", false)
.build()
.getBlob();
// Googleドライブに保存
const today = Utilities.formatDate(new Date(), 'JST', 'yyyy-MM-dd');
const folder = DriveApp.getFolderById(driveId);
const fileName = today + '_' + fileNamePart + '.png';
const file = folder.createFile(blob).setName(fileName);
Logger.log('画像がGoogleドライブに保存されました: ' + file.getUrl());
}
トリガー設定
対象関数:exportRangeToPng
以下は例です。
イベントのソースを選択:[ 時間主導型 ]
時間ベースのトリガーのタイプを選択:[ 日付ベースのタイマー ]
時刻を選択:[ 午前8時~9時 ]