「毎月、請求書とか案内状とか、同じような内容の書類を何十通も作るの大変ですよね」
そんなあなたに朗報!
Google Apps Script (GAS) を使えば、スプレッドシートのデータからGoogleドキュメントに自動で差し込み印刷できるってご存じですか?
今回は、そんな魔法みたいなスクリプトの作り方を、ステップバイステップで徹底解説します!
コピペOKのコードも用意しましたので、プログラミング初心者でもご安心ください!
こんな感じのイメージです↓
氏名 |
敬称 |
会社名 |
役職 |
郵便番号 |
住所 |
山田太郎 |
様 |
株式会社ABC |
営業部長 |
100-0001 |
東京都千代田区… |
田中花子 |
様 |
XYZ株式会社 |
企画課長 |
530-0001 |
大阪府大阪市… |
佐藤次郎 |
殿 |
有限会社DEF |
経理担当 |
812-0011 |
福岡県福岡市… |
ポイント:
次に、差し込み印刷のひな形となるGoogleドキュメントを作成します!
例えば、こんな感じ↓
〒
いつもお世話になっております。
... (本文) ...
ポイント:
いよいよ、魔法の呪文(スクリプト)を書いていきます!
スプレッドシートのメニューから「拡張機能」>「App Script」を選択。
表示されたエディタに、以下のコードをコピペします!
JavaScript
/**
* 設定情報を取得する関数
* @return {Object} 設定オブジェクト
*/
function getConfig() {
return {
spreadsheetId: 'あなたのスプレッドシートID', // スプレッドシートのID
templateDocId: 'あなたのテンプレートドキュメントID', // テンプレートドキュメントのID
outputFolderId: '', // 出力先フォルダのID (マイドライブのルートの場合は空文字)
dataSheetName: 'データ', // データが格納されているシートの名前
pdfOutputFolderId: '', // PDFの出力先フォルダID (指定がない場合はDocsと同じ場所)
};
}
/**
* メインの差し込み印刷処理関数(ドキュメント生成)
*/
function createDocuments() {
// 設定情報を取得
const config = getConfig();
// スプレッドシートとテンプレートドキュメントを取得
const spreadsheet = SpreadsheetApp.openById(config.spreadsheetId);
const templateDoc = DocumentApp.openById(config.templateDocId);
// データシートを取得
const dataSheet = spreadsheet.getSheetByName(config.dataSheetName);
// データ範囲を取得 (ヘッダー行を除く)
const dataRange = dataSheet.getDataRange();
const values = dataRange.getValues();
const headers = values[0]; // ヘッダー行
// 出力先フォルダを取得
const outputFolder = config.outputFolderId
? DriveApp.getFolderById(config.outputFolderId)
: DriveApp.getRootFolder();
// データ行ごとに処理
for (let i = 1; i < values.length; i++) { // ヘッダー行を除いてループ
const rowData = values[i];
// 新しいドキュメントを作成(ファイル名を先に生成)
const newDocName = `${rowData[0]}様_${new Date().toLocaleDateString()}`;
const newDoc = DocumentApp.create(newDocName);
const newDocBody = newDoc.getBody();
// テンプレートドキュメントの内容を新しいドキュメントに要素ごとにコピー
const templateElements = templateDoc.getBody().getParagraphs();
for (let k = 0; k < templateElements.length; k++) {
const elementType = templateElements[k].getType();
if (elementType == DocumentApp.ElementType.PARAGRAPH) {
//テキストと書式をコピー
newDocBody.appendParagraph(templateElements[k].copy());
} else if (elementType == DocumentApp.ElementType.TABLE) {
//表をコピー(必要に応じて)
newDocBody.appendTable(templateElements[k].copy());
} else {
// 他の要素タイプへの対応が必要な場合はここに追加
}
}
// ヘッダーと各行のデータを対応付けてプレースホルダーを置換
for (let j = 0; j < headers.length; j++) {
const placeholder = `}`;
const value = rowData[j] || ''; // データがない場合は空文字にする
// 段落ごとにプレースホルダーを置換
let paragraphs = newDocBody.getParagraphs();
for (let p = 0; p < paragraphs.length; p++) {
paragraphs[p].replaceText(placeholder, value);
}
}
newDoc.saveAndClose();
// 指定したフォルダに移動
DriveApp.getFileById(newDoc.getId()).moveTo(outputFolder);
}
// 処理完了メッセージ
Browser.msgBox("差し込み印刷(ドキュメント生成)が完了しました.");
}
/**
* 生成されたドキュメントをPDFに変換する関数
*/
function convertToPdf() {
const config = getConfig();
// ドキュメントの出力先フォルダを取得(PDFの出力先とは異なる可能性がある)
const docOutputFolder = config.outputFolderId
? DriveApp.getFolderById(config.outputFolderId)
: DriveApp.getRootFolder();
// PDFの出力先フォルダを取得。指定がなければドキュメントと同じ場所
const pdfOutputFolder = config.pdfOutputFolderId
? DriveApp.getFolderById(config.pdfOutputFolderId)
: docOutputFolder;
// ドキュメントの出力先フォルダ内のファイルを取得
const files = docOutputFolder.getFilesByType(MimeType.GOOGLE_DOCS);
// 各ファイルをPDFに変換
while (files.hasNext()) {
const docFile = files.next();
const docId = docFile.getId();
// PDFに変換
const pdfBlob = docFile.getAs(MimeType.PDF);
// PDFファイルを作成 (ファイル名は元のドキュメント名 + ".pdf")
pdfOutputFolder.createFile(pdfBlob).setName(docFile.getName() + ".pdf");
// 元のドキュメントファイルを削除する場合(オプション)
//DriveApp.getFileById(docId).setTrashed(true);
}
Browser.msgBox("PDFへの変換が完了しました.");
}
/**
* スプレッドシートが開かれたときにカスタムメニューを追加する関数
*/
function onOpen() {
const ui = SpreadsheetApp.getUi();
ui.createMenu('差し込み印刷')
.addItem('ドキュメント生成', 'createDocuments')
.addItem('PDF出力', 'convertToPdf') // PDF出力メニューを追加
.addToUi();
}
スプレッドシートのメニューから、スクリプトを直接実行できるようにしましょう!
上記のコードには、onOpen関数が既に含まれているので、
スプレッドシートを再読み込みするだけでOKです!
「差し込み印刷」という項目がメニューに追加されています。
準備は整いました!さっそく差し込み印刷を実行してみましょう!
「コピペしたけど、中で何やってるかよくわからない…」って人のために、コードの解説も載せてみます!
JavaScriptfunction getConfig() {
return {
spreadsheetId: 'あなたのスプレッドシートID',
templateDocId: 'あなたのテンプレートドキュメントID',
outputFolderId: '',
dataSheetName: 'データ',
pdfOutputFolderId: '',
};
function createDocuments() {
// ... (省略) ...
}
function convertToPdf() {
// ... (省略) ...
}
function onOpen() {
const ui = SpreadsheetApp.getUi();
ui.createMenu('差し込み印刷')
.addItem('ドキュメント生成', 'createDocuments')
.addItem('PDF出力', 'convertToPdf')
.addToUi();
}
今回は、GASを使ってスプレッドシートからGoogleドキュメントに差し込み印刷する方法を紹介しました!
最初は少し難しく感じますが、慣れると非常に便利ですので、ぜひチャレンジしてください!
「ここがわからない!」「もっとこんな機能が欲しい!」などあれば、コメントでお教え頂けますと嬉しいです!