GASで超簡単!スプレッドシートから差し込み印刷でラクラク書類作成術!

 2025,06,27 2025.06.27

はじめに

「毎月、請求書とか案内状とか、同じような内容の書類を何十通も作るの大変ですよね」

そんなあなたに朗報!
Google Apps Script (GAS) を使えば、スプレッドシートのデータからGoogleドキュメントに自動で差し込み印刷できるってご存じですか?

今回は、そんな魔法みたいなスクリプトの作り方を、ステップバイステップで徹底解説します!
コピペOKのコードも用意しましたので、プログラミング初心者でもご安心ください!

🚀 準備するもの

  • Googleアカウント 
  • 差し込み印刷したいデータの入ったスプレッドシート
  • 差し込み印刷のテンプレートとなるGoogleドキュメント

📝 ステップ1: スプレッドシートの準備

まずは、差し込み印刷の元データとなるスプレッドシートを準備しましょう!
  1. Googleスプレッドシートを新規作成。
  2. 1行目に、差し込みたい項目の見出しを入力(例: 氏名、会社名、住所など)。
  3. 2行目以降に、実際のデータを入力。

こんな感じのイメージです↓

氏名

敬称

会社名

役職

郵便番号

住所

山田太郎

株式会社ABC

営業部長

100-0001

東京都千代田区…

田中花子

XYZ株式会社

企画課長

530-0001

大阪府大阪市…

佐藤次郎

殿

有限会社DEF

経理担当

812-0011

福岡県福岡市…

ポイント:

  • シートの名前は「データ」にしておくと、後でコードをコピペしやすいです!
  • 見出し(1行目)は、後でテンプレートのプレースホルダーと対応させるので、わかりやすい名前をつけてください!

🎨 ステップ2: テンプレートドキュメントの作成

次に、差し込み印刷のひな形となるGoogleドキュメントを作成します!

  1. Googleドキュメントを新規作成。
  2. 差し込みたい場所に、 の形式で、スプレッドシートの見出しに対応する文字列を入力。

例えば、こんな感じ↓
 







いつもお世話になっております。

... (本文) ...

ポイント:

  • の中身は、スプレッドシートの1行目の見出しと完全に一致させてください!
    (大文字・小文字、スペースなども!)
  • フォントや文字サイズ、色などの書式は、ここで設定したものが反映されます!

💻 ステップ3: GASスクリプトの作成と設定

いよいよ、魔法の呪文(スクリプト)を書いていきます!
スプレッドシートのメニューから「拡張機能」>「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();
}

超重要!IDの書き換え!
  1. getConfig 関数の中にある 'あなたのスプレッドシートID''あなたのテンプレートドキュメントID' を、
    自分のスプレッドシートとテンプレートドキュメントのIDに書き換えてください!
    (IDは、スプレッドシートやドキュメントのURLの、/d//edit の間の部分となります)
  2. 必要に応じて、outputFolderId (ドキュメントの出力先)
    pdfOutputFolderId (PDFの出力先) も書き換えてださい。
  3. 指定しない場合は、マイドライブのルートフォルダになります。
  4. スクリプトエディタのメニューバーにある「保存」アイコンをクリック

 

✨ ステップ4: カスタムメニューの追加(おまけ)

スプレッドシートのメニューから、スクリプトを直接実行できるようにしましょう!
上記のコードには、onOpen関数が既に含まれているので、
スプレッドシートを再読み込みするだけでOKです!
 「差し込み印刷」という項目がメニューに追加されています。

🏃‍♀️ ステップ5: 実行!

準備は整いました!さっそく差し込み印刷を実行してみましょう!

  1. スプレッドシートのメニューから「差し込み印刷」>「ドキュメント生成」を選択。
  2. 初回実行時は、スクリプトがスプレッドシートやドキュメントにアクセスするための許可を求められるので、画面の指示に従って許可してださい
  3. しばらく待つと…指定したフォルダに、差し込み印刷されたドキュメントが生成されます!
  4. ドキュメントをPDFで出力する場合は、「差し込み印刷」>「PDF出力」を選択

🤖 コードの解説

「コピペしたけど、中で何やってるかよくわからない…」って人のために、コードの解説も載せてみます!

  • getConfig 関数

JavaScript
function getConfig() {
  return {
    spreadsheetId: 'あなたのスプレッドシートID',
    templateDocId: 'あなたのテンプレートドキュメントID',
    outputFolderId: '',
    dataSheetName: 'データ',
    pdfOutputFolderId: '',
  };

スクリプト内で使う設定値をまとめて定義してる関数となります。
spreadsheetIdtemplateDocIdoutputFolderIddataSheetNamepdfOutputFolderId
自分の環境に合わせて書き換える必要があります

  • createDocuments 関数

JavaScript
function createDocuments() {
  // ... (省略) ...
}

これが差し込み印刷のメイン処理を行う関数です
  1. スプレッドシートからデータを読みこみます
  2. テンプレートドキュメントをコピーして、プレースホルダーを置換。
  3. 新しいドキュメントを生成しています。
  4. スプレッドシートとテンプレート、データ範囲を取得します。
  5. データ行ごとにループ開始
  6. ドキュメント名を決めます。
  7. テンプレートをコピーします。
  8. プレースホルダーを置換します
  9. 名前を付けて保存、指定フォルダに移動します
  10. ループ終了します
  • convertToPdf 関数

    JavaScript
    function convertToPdf() {
     // ... (省略) ...
    }

 createDocuments関数で作成されたドキュメントをPDFに変換する関数となります。
  1. ドキュメントの出力先フォルダにあるGoogleドキュメント形式のファイルを取得
  2. 各ファイルについてループ開始
  3. PDFに変換
  4. 名前を付けて保存
  5. ループ終了
  • onOpen 関数

    JavaScript
    function onOpen() {
      const ui = SpreadsheetApp.getUi();
      ui.createMenu('差し込み印刷')
        .addItem('ドキュメント生成', 'createDocuments')
        .addItem('PDF出力', 'convertToPdf')
        .addToUi();
    }
  • スプレッドシートを開いたときに、自動的にカスタムメニューを追加するための関数となります。
    createMenu でメニューを作成し、addItem でメニュー項目と実行する関数を紐付けています。

🌈 まとめ

今回は、GASを使ってスプレッドシートからGoogleドキュメントに差し込み印刷する方法を紹介しました!
最初は少し難しく感じますが、慣れると非常に便利ですので、ぜひチャレンジしてください!
「ここがわからない!」「もっとこんな機能が欲しい!」などあれば、コメントでお教え頂けますと嬉しいです!


GASで超簡単!スプレッドシートから差し込み印刷でラクラク書類作成術!

BACK TO LIST