「差し込み印刷」といえば、Word文書にExcelのデータ(表)を差し込む・・・というのが定番ですが、Wordで帳票レイアウトを綺麗に組むのって、なかなか難しいですよね。
そんな時、帳票レイアウトもExcelやスプレッドシートで作れたら便利です。
この記事では、Googleスプレッドシートで作成した帳票の雛形に、スプレッドシートの表データを差し込む方法を説明します。
* この記事で紹介した方法を使用したことにより、ご利用者様または第三者に損害・トラブル等が発生した場合でも、当サイト運営者は一切の責任を負いません。出力結果を十分ご確認いただき、自己責任でご利用をお願いいたします。
スプレッドシート帳票への差込方法
帳票の雛形をつくる
まずは、Googleスプレッドシートで帳票の雛形を作成します。
データを差し込みたい部分には、二重波括弧{{ }}で囲んだ項目名を入力します。
* 社員番号を差し込む場合の入力例:{{ 社員番号 }}
差し込むデータを用意
次に、Googleスプレッドシートで表形式の差し込みデータを用意します。
1行目は必ずヘッダー行(項目名を入力する行)としてください。
帳票にデータを差し込むには、項目名を帳票に入力したものと一致させる必要があります。(二重波括弧{{ }}は不要です。)
ツールに情報を入力して処理を実行
下記のリンク先からコピーを作成を押して、ツールをコピーしてください。(マイドライブにコピーされます)
ツールを開き、①帳票テンプレートのURL・シート名を入力、②差込データのURL・シート名を入力、③差し込み実行ボタンを押してください。
なお、初めて差し込み実行を行う際は、承認作業が必要になります。下記を参考に承認作業を進めてください。
「承認が必要です」というダイアログが表示されますので、権限を確認 をクリックします。
* この部分の解説画像は、他の記事から流用しているため、実際のものと若干異なる場合があります。
このスクリプトを使うGoogleアカウントを選択します。
(この画面が表示された場合のみ)左下の 詳細 をクリックします。
(この画面が表示された場合のみ)左下の プロジェクト名(安全ではないページ)に移動 をクリックします。
右下の 許可 をクリックします。
処理が完了すると、下図のようなダイアログが表示されますので、記載されているファイルを開いてください。
下図のように、差込が反映されたスプレッドシートが作成されています。
今回の例では、差込データが12行だったので、12個のシートが作成されています。
印刷・PDF出力
このツールが対応しているのは、先述した差込後ファイル(スプレッドシート)を作成するところまでです。
PDF出力や紙へのプリントアウトは、Googleスプレッドシートの標準機能で行なってください。
PDF出力する場合
ファイル > ダウンロード > PDF(.pdf) > お好みの設定*をしてエクスポート
印刷する場合
ファイル > 印刷 > お好みの設定*をして次へ > プリンタの選択等をして印刷
* 設定項目の「エクスポート」は「ワークブック」を選択する
参考:ソースコード
参考までに、ソースコードを掲載します。
差し込み(≒置換)を行うにあたって、スプレッドシートの検索と置換に相当する、TextFinderを利用して、replaceAllWithメソッドで一括置換してみました。
function createMergedSpreadsheet(){
// ダイアログで実行確認
const ui = SpreadsheetApp.getUi();
const response = ui.alert("差込データ作成を実行しますか?", ui.ButtonSet.OK_CANCEL);
if (response !== ui.Button.OK) return;
// ツールシートの入力値および参照するシートを取得
const toolSheet = SpreadsheetApp.getActiveSheet();
const modelSheetUrl = toolSheet.getRange("C3").getValue();
const modelSheetName = toolSheet.getRange("C4").getValue();
const modelSheet = SpreadsheetApp.openByUrl(modelSheetUrl).getSheetByName(modelSheetName);
const dataSheetUrl = toolSheet.getRange("C7").getValue();
const dataSheetName = toolSheet.getRange("C8").getValue();
const dataSheet = SpreadsheetApp.openByUrl(dataSheetUrl).getSheetByName(dataSheetName);
// 差込データシートから差込前後情報をもつオブジェクトを作成する
const table = dataSheet.getDataRange().getDisplayValues();
const keys = table[0];
const rows = table.slice(1);
const replaceLists = rows.map(row => {
const replaceList = row.map((cell, index) => {
return { before: keys[index], after: cell };
});
return replaceList;
});
// 出力シートを作成する
const now = Utilities.formatDate(new Date(), "JST", "yyyy-MM-dd HH:mm:ss");
const outputSS = SpreadsheetApp.create(`${modelSheetName}(差込:${now})`);
// 差し込みリストの行数分、差し込みを行い出力シートを作る
replaceLists.forEach((replaceList, index) => {
// 出力シートの作成(テンプレートをコピー)
const outputSheet = modelSheet.copyTo(outputSS).setName(`${index + 1}`);
// 差し込みを反映
replaceList.forEach((item) => {
outputSheet
.createTextFinder(`\\{\\{ *${item.before} *\\}\\}`) // {{ 項目名 }} で検索
.matchCase(true) // 大文字小文字を区別
.useRegularExpression(true) // 正規表現を使用
.replaceAllWith(`${item.after}`); // 該当する全セルを置換
});
});
// 先頭に作成されている「シート1」を削除
outputSS.deleteSheet(outputSS.getSheets()[0]);
// 終了メッセージ
SpreadsheetApp.getUi().alert(
"差込データ作成が完了しました。" + "\n"
+ "\n"
+ "出力先:" + "\n"
+ `マイドライブ > ${outputSS.getName()}` + "\n"
+ "\n"
+ "URL:" + "\n"
+ outputSS.getUrl()
);
}
コメント