<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>PDF自動生成 &#8211; biz-tactics</title>
	<atom:link href="https://mashukabu.com/tag/pdf%e8%87%aa%e5%8b%95%e7%94%9f%e6%88%90/feed/" rel="self" type="application/rss+xml" />
	<link>https://mashukabu.com</link>
	<description></description>
	<lastBuildDate>Sat, 04 Jul 2026 01:48:56 +0000</lastBuildDate>
	<language>ja</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=7.0</generator>

<image>
	<url>https://mashukabu.com/wp-content/uploads/2022/04/cropped-site-icon-32x32.png</url>
	<title>PDF自動生成 &#8211; biz-tactics</title>
	<link>https://mashukabu.com</link>
	<width>32</width>
	<height>32</height>
</image> 
	<item>
		<title>【コピペで動く】GASでスプレッドシートから請求書PDFを自動生成してメール送付する方法</title>
		<link>https://mashukabu.com/gas-spreadsheet-invoice-pdf/</link>
					<comments>https://mashukabu.com/gas-spreadsheet-invoice-pdf/#respond</comments>
		
		<dc:creator><![CDATA[まっしゅ]]></dc:creator>
		<pubDate>Sat, 13 Jun 2026 01:10:09 +0000</pubDate>
				<category><![CDATA[仕事効率化]]></category>
		<category><![CDATA[GAS]]></category>
		<category><![CDATA[Google Apps Script]]></category>
		<category><![CDATA[PDF自動生成]]></category>
		<category><![CDATA[スプレッドシート]]></category>
		<category><![CDATA[業務効率化]]></category>
		<category><![CDATA[請求書]]></category>
		<guid isPermaLink="false">https://mashukabu.com/?p=8028</guid>

					<description><![CDATA[スプレッドシートの請求データをテンプレートに差し込み、GASでPDF化してGmailで自動送付する方法をコピペコード付きで解説。テンプレシートの作り方・PDF変換のURLパラメータ・ファイル名の動的命名・Drive保存まで、毎月の請求書発行を丸ごと自動化します。]]></description>
										<content:encoded><![CDATA[
<p class="wp-block-paragraph">毎月の請求書発行、いまだに次のような手作業を繰り返していませんか。</p>



<ul class="wp-block-list"><li>1社ずつテンプレートをコピーする</li><li>取引先名と金額を打ち替える</li><li>PDFに書き出す</li><li>メールに添付する</li></ul>



<p class="wp-block-paragraph">取引先が10社・20社と増えるほど、この単純作業に半日とられてしまいますよね。転記ミスや添付忘れも怖いところです。</p>



<p class="wp-block-paragraph">実はこの一連の流れ、Google Apps Script（GAS）を使えば<strong>ボタン1つで丸ごと自動化できます</strong>。スプレッドシートの請求データをテンプレートに差し込み、PDF化して、Driveに保存して、Gmailで送付するまでを全部やってくれます。</p>



<p class="wp-block-paragraph">この記事では、コピペでそのまま動く完成コードと、つまずきやすいポイントの対処法まで、実務で使える形でまとめました。</p>




  <div id="toc" class="toc tnt-number toc-center tnt-number border-element"><input type="checkbox" class="toc-checkbox" id="toc-checkbox-1" checked><label class="toc-title" for="toc-checkbox-1">目次</label>
    <div class="toc-content">
    <ol class="toc-list open"><li><a href="#toc1" tabindex="0">GASで請求書PDFを自動生成する仕組みとは？｜全体の流れを把握する</a><ol><li><a href="#toc2" tabindex="0">必要な前提条件</a></li></ol></li><li><a href="#toc3" tabindex="0">スプレッドシートを準備する｜データシートとテンプレシートを作る</a><ol><li><a href="#toc4" tabindex="0">データシートの作り方</a></li><li><a href="#toc5" tabindex="0">テンプレートシートの作り方</a></li></ol></li><li><a href="#toc6" tabindex="0">請求書PDFを自動生成するGASコード【コピペOK】</a><ol><li><a href="#toc7" tabindex="0">差し込みとPDF変換の関数を追加する</a></li></ol></li><li><a href="#toc8" tabindex="0">PDF変換のURLパラメータを使いこなす｜余白・向き・範囲を制御する</a></li><li><a href="#toc9" tabindex="0">ファイル名を動的に付ける｜日付と取引先名で自動命名する</a></li><li><a href="#toc10" tabindex="0">Drive保存とGmail送信を組み込む｜送付まで全自動にする</a><ol><li><a href="#toc11" tabindex="0">実行ボタンを付けて誰でも使えるようにする</a></li></ol></li><li><a href="#toc12" tabindex="0">うまくいかないときの対処法｜よくあるトラブルと解決策</a><ol><li><a href="#toc13" tabindex="0">2社目から差し込みがされない・プレースホルダーが残る</a></li><li><a href="#toc14" tabindex="0">「承認が必要です」と表示されて実行できない</a></li><li><a href="#toc15" tabindex="0">PDFの一部が切れる・2ページに分かれてしまう</a></li><li><a href="#toc16" tabindex="0">スクリプトの実行時間が長すぎてエラーになる</a></li></ol></li><li><a href="#toc17" tabindex="0">まとめ｜請求書発行を丸ごと自動化して毎月の手間を消す</a></li></ol>
    </div>
  </div>

<h2 class="wp-block-heading"><span id="toc1">GASで請求書PDFを自動生成する仕組みとは？｜全体の流れを把握する</span></h2>



<p class="wp-block-paragraph">最初に、これから作るものの全体像をつかんでおきましょう。やっていることはシンプルで、次の5ステップを GAS が順番に実行するだけです。</p>



<ol class="wp-block-list"><li>請求データ（取引先・品目・金額）が並んだ「データシート」を1行ずつ読み込む</li><li>レイアウトを整えた「テンプレートシート」にその値を差し込む</li><li>テンプレートシートをPDFに変換する</li><li>PDFをGoogle Driveの指定フォルダに保存する</li><li>取引先のメールアドレス宛にPDFを添付してGmailで送信する</li></ol>



<p class="wp-block-paragraph">ちょっとむずかしく見えますが、やっていることはシンプルです。「スプレッドシートを差し込み印刷して、PDFにして、メールで送る」という、ふだん手作業でやっていることをそのままコードにしただけなんです。</p>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow"><p><strong>NOTE: GASは追加費用ゼロで使えます</strong><br>GAS（Google Apps Script）はGoogleが提供する無料のスクリプト環境で、JavaScriptに似た言語で書きます。Googleアカウントさえあれば、インストール不要でブラウザ上のエディタからすぐに使えます。基本操作に不安がある方は<a href="https://mashukabu.com/spreadsheet-gas-getting-started-recipes/">GAS入門記事</a>を先に読んでおくと、この記事がスムーズに理解できますよ。</p></blockquote>



<h3 class="wp-block-heading"><span id="toc2">必要な前提条件</span></h3>



<p class="wp-block-paragraph">実装を始める前に、次のものを準備しておいてください。</p>



<ul class="wp-block-list"><li>Googleアカウント（無料のもので問題ありません）</li><li>編集権限のあるGoogleスプレッドシート1つ</li><li>請求書PDFを保存するGoogle Driveのフォルダ1つ</li><li>取引先のメールアドレスが分かっていること（自動送信する場合）</li></ul>



<p class="wp-block-paragraph">特別な有料サービスやプラグインは一切不要です。すべてGoogle標準の機能だけで完結します。</p>



<h2 class="wp-block-heading"><span id="toc3">スプレッドシートを準備する｜データシートとテンプレシートを作る</span></h2>



<p class="wp-block-paragraph">GASを書く前に、土台となるスプレッドシートを整えます。1つのスプレッドシートの中に「データシート」と「テンプレートシート」という2枚のシートを用意するのがポイントです。</p>



<h3 class="wp-block-heading"><span id="toc4">データシートの作り方</span></h3>



<p class="wp-block-paragraph">まず1枚目に、請求データを並べる「データ」という名前のシートを作ります。1行目を見出しにして、2行目以降に取引先ごとのデータを1行ずつ入れていきましょう。</p>



<figure class="wp-block-table"><table><thead><tr><th>取引先名</th><th>メールアドレス</th><th>品目</th><th>金額</th></tr></thead><tbody><tr><td>株式会社サンプル</td><td>sample@example.com</td><td>Webサイト保守</td><td>50000</td></tr><tr><td>田中商事株式会社</td><td>tanaka@example.com</td><td>コンサルティング</td><td>120000</td></tr></tbody></table></figure>



<p class="wp-block-paragraph">金額の列は、カンマ区切りの文字列ではなく<strong>数値のまま</strong>入れておきましょう。あとでコード側で <code>toLocaleString()</code> を使ってカンマ表示に整えるので、ここでは生の数値にしておくのがポイントです。</p>



<h3 class="wp-block-heading"><span id="toc5">テンプレートシートの作り方</span></h3>



<p class="wp-block-paragraph">次に2枚目に、請求書のレイアウトを整えた「テンプレート」という名前のシートを作ります。ここは実際の請求書として見栄えするように、セルの結合や罫線、フォントサイズを調整してデザインします。</p>



<p class="wp-block-paragraph">差し込みたい場所には、あとでGASが置き換えるための<strong>目印（プレースホルダー）</strong>を入れておきます。たとえば次のように書いておきます。</p>



<ul class="wp-block-list"><li>宛名のセル: <code>{{取引先名}} 御中</code></li><li>品目のセル: <code>{{品目}}</code></li><li>金額のセル: <code>{{金額}}</code></li><li>発行日のセル: <code>{{発行日}}</code></li></ul>



<p class="wp-block-paragraph">このように <code>{{ }}</code> で囲んだ文字列を目印にしておけば、GASが「この目印を見つけたら、データシートの値に置き換える」という処理をしてくれますよ。Word差し込み印刷の差し込みフィールドと同じ発想ですね。</p>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow"><p><strong>NOTE: 印刷範囲を意識してレイアウトする</strong><br>テンプレートシートはそのままPDFになります。A4縦1枚にきれいに収まるよう、列幅と行の高さを調整しておきましょう。余計な列や行が広がっていると、PDFに余白として写り込んでしまいます。</p></blockquote>



<h2 class="wp-block-heading"><span id="toc6">請求書PDFを自動生成するGASコード【コピペOK】</span></h2>



<p class="wp-block-paragraph">それでは本体のコードです。スプレッドシートのメニューから「拡張機能」→「Apps Script」を開き、エディタに次のコードを貼り付けてください。</p>



<pre class="wp-block-code"><code>function createInvoicePdf() {
  // --- 設定（ここだけ自分の環境に合わせて変更）---
  const DATA_SHEET_NAME = 'データ';        // データシートの名前
  const TEMPLATE_SHEET_NAME = 'テンプレート'; // テンプレシートの名前
  const SAVE_FOLDER_ID = 'ここにDriveフォルダのIDを貼る'; // PDF保存先フォルダ
  const SEND_MAIL = false; // true にするとメール送信も実行する

  const ss = SpreadsheetApp.getActiveSpreadsheet();
  const dataSheet = ss.getSheetByName(DATA_SHEET_NAME);
  const templateSheet = ss.getSheetByName(TEMPLATE_SHEET_NAME);
  const saveFolder = DriveApp.getFolderById(SAVE_FOLDER_ID);

  // データシートを2行目から最終行まで読み込む
  const lastRow = dataSheet.getLastRow();
  const data = dataSheet.getRange(2, 1, lastRow - 1, 4).getValues();

  // 発行日（今日の日付）を「2026年6月8日」形式で作る
  const today = new Date();
  const issueDate = Utilities.formatDate(today, 'JST', 'yyyy年M月d日');

  // 1行ずつ処理する
  data.forEach(function(row) {
    const clientName = row[0]; // 取引先名
    const email = row[1];      // メールアドレス
    const item = row[2];       // 品目
    const amount = row[3];     // 金額

    if (!clientName) return; // 取引先名が空の行はスキップ

    // テンプレートに差し込む
    fillTemplate(templateSheet, {
      '{{取引先名}}': clientName,
      '{{品目}}': item,
      '{{金額}}': '¥' + Number(amount).toLocaleString(),
      '{{発行日}}': issueDate
    });

    // 差し込み結果を確実に反映させる
    SpreadsheetApp.flush();

    // テンプレシートをPDFに変換する
    const fileName = issueDate.replace(/[年月]/g, '-').replace('日', '')
      + '_' + clientName + '_請求書.pdf';
    const pdfBlob = exportSheetAsPdf(ss, templateSheet, fileName);

    // Driveに保存する
    const pdfFile = saveFolder.createFile(pdfBlob);

    // メール送信する（SEND_MAIL が true のときだけ）
    if (SEND_MAIL &amp;&amp; email) {
      sendInvoiceMail(email, clientName, pdfFile.getBlob());
    }

    Logger.log(clientName + ' のPDFを作成しました: ' + pdfFile.getUrl());
  });
}</code></pre>



<p class="wp-block-paragraph">このコードは「設定」の部分だけ自分の環境に合わせれば、あとはそのまま動きます。それぞれの値を順番に説明します。</p>



<ul class="wp-block-list"><li><code>DATA_SHEET_NAME</code>: 請求データを入れたシートの名前</li><li><code>TEMPLATE_SHEET_NAME</code>: 請求書レイアウトのシートの名前</li><li><code>SAVE_FOLDER_ID</code>: PDFを保存したいDriveフォルダのID（次の項目で取得方法を説明します）</li><li><code>SEND_MAIL</code>: 最初は <code>false</code> のままにして、PDF生成だけテストしてから <code>true</code> に切り替えるのが安全です</li></ul>



<h3 class="wp-block-heading"><span id="toc7">差し込みとPDF変換の関数を追加する</span></h3>



<p class="wp-block-paragraph">上のコードから呼び出している補助関数を、同じファイルの下に続けて貼り付けます。</p>



<pre class="wp-block-code"><code>// テンプレートのプレースホルダーを実際の値に置き換える
function fillTemplate(sheet, replaceMap) {
  const range = sheet.getDataRange();
  const values = range.getValues();

  for (let r = 0; r &lt; values.length; r++) {
    for (let c = 0; c &lt; values[r].length; c++) {
      let cell = values[r][c];
      if (typeof cell === 'string') {
        for (const key in replaceMap) {
          if (cell.indexOf(key) !== -1) {
            cell = cell.split(key).join(replaceMap[key]);
          }
        }
        values[r][c] = cell;
      }
    }
  }
  range.setValues(values);
}</code></pre>



<p class="wp-block-paragraph">ここで注意したいのは、<code>fillTemplate</code> でテンプレートシートの値を<strong>直接書き換えている</strong>点です。1社目の差し込みで <code>{{取引先名}}</code> が実際の名前に変わってしまうと、2社目では目印が見つからなくなってしまいます。</p>



<p class="wp-block-paragraph">これを防ぐ仕組みは、このあと「うまくいかないときの対処法」で解説していきましょう。</p>



<h2 class="wp-block-heading"><span id="toc8">PDF変換のURLパラメータを使いこなす｜余白・向き・範囲を制御する</span></h2>



<p class="wp-block-paragraph">GASでスプレッドシートをPDF化するときは、Googleの<strong>エクスポート用URL</strong>にアクセスして変換します。このURLにパラメータを付けることで、用紙の向きや余白、印刷範囲を細かく指定できるのがポイントです。</p>



<pre class="wp-block-code"><code>// 指定したシートだけをPDFに変換する
function exportSheetAsPdf(ss, sheet, fileName) {
  const ssId = ss.getId();
  const gid = sheet.getSheetId();

  // エクスポート用URLとパラメータ
  const url = 'https://docs.google.com/spreadsheets/d/' + ssId
    + '/export?'
    + 'format=pdf'        // PDF形式で出力
    + '&amp;gid=' + gid       // 対象シートのID
    + '&amp;portrait=true'    // 縦向き（横向きは false）
    + '&amp;size=A4'          // 用紙サイズ
    + '&amp;fitw=true'        // 幅をページに合わせる
    + '&amp;gridlines=false'  // 枠線（グリッド線）を非表示
    + '&amp;sheetnames=false' // シート名を非表示
    + '&amp;printtitle=false' // ファイル名を非表示
    + '&amp;top_margin=0.5'   // 上余白（インチ）
    + '&amp;bottom_margin=0.5'
    + '&amp;left_margin=0.5'
    + '&amp;right_margin=0.5';

  // 認証トークンを付けてアクセスする
  const token = ScriptApp.getOAuthToken();
  const response = UrlFetchApp.fetch(url, {
    headers: { 'Authorization': 'Bearer ' + token }
  });

  // PDFのデータ（Blob）にファイル名を付けて返す
  return response.getBlob().setName(fileName);
}</code></pre>



<p class="wp-block-paragraph">主要なURLパラメータの意味を整理しておきます。請求書の見た目を調整したいときは、ここを書き換えてください。</p>



<ul class="wp-block-list"><li><code>format=pdf</code>: 出力形式。PDFのほかに <code>xlsx</code> や <code>csv</code> も指定できます</li><li><code>gid</code>: PDF化したいシートのID。<code>sheet.getSheetId()</code> で取得します</li><li><code>portrait</code>: <code>true</code> で縦向き、<code>false</code> で横向き</li><li><code>gridlines</code>: <code>false</code> にすると、セルの枠線（グリッド線）が消えてすっきりします</li><li><code>fitw</code>: <code>true</code> にすると、列がページ幅に収まるよう自動調整されます</li><li><code>top_margin</code> などの余白: インチ単位で指定します（0.5でだいたい1.3cm程度）</li></ul>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow"><p><strong>NOTE: gid はシートのURLで確認できる</strong><br>シートのIDは、対象シートを開いたときのURL末尾 <code>#gid=0</code> の数字部分です。コードでは <code>getSheetId()</code> を使って自動取得するので手入力は不要ですが、仕組みを知っておくと応用が利きます。</p></blockquote>



<h2 class="wp-block-heading"><span id="toc9">ファイル名を動的に付ける｜日付と取引先名で自動命名する</span></h2>



<p class="wp-block-paragraph">請求書PDFは、あとから探しやすいファイル名にしておくことが大切です。本体コードでは、次のようにファイル名を組み立てていました。</p>



<pre class="wp-block-code"><code>const fileName = issueDate.replace(/[年月]/g, '-').replace('日', '')
  + '_' + clientName + '_請求書.pdf';</code></pre>



<p class="wp-block-paragraph">これで「2026-6-8_株式会社サンプル_請求書.pdf」のような名前が自動で付きます。日付が先頭にあると、フォルダ内で日付順に並ぶので管理がラクになりますよ。</p>



<p class="wp-block-paragraph">請求書番号を入れたい場合は、データシートに「請求番号」の列を追加して、次のように組み込むと便利です。</p>



<pre class="wp-block-code"><code>// 例: INV-2026-001 のような請求番号を先頭に付ける
const invoiceNo = row[4]; // データシートの5列目に請求番号があると仮定
const fileName = invoiceNo + '_' + clientName + '_請求書.pdf';</code></pre>



<p class="wp-block-paragraph">ファイル名に使えない記号（<code>/</code> や <code>:</code> など）が取引先名に含まれる場合は、<code>replace()</code> で除去しておくと安全です。</p>



<pre class="wp-block-code"><code>const safeName = clientName.replace(/[\/:*?&quot;&lt;&gt;|]/g, '');</code></pre>



<h2 class="wp-block-heading"><span id="toc10">Drive保存とGmail送信を組み込む｜送付まで全自動にする</span></h2>



<p class="wp-block-paragraph">ここまでで「PDFを作ってDriveに保存する」までができました。最後に、そのPDFをGmailで取引先に送る関数を追加します。</p>



<pre class="wp-block-code"><code>// 請求書PDFをメールに添付して送信する
function sendInvoiceMail(email, clientName, pdfBlob) {
  const subject = clientName + ' 御中｜請求書のご送付';
  const body = clientName + ' 御中nn'
    + 'いつもお世話になっております。n'
    + '今月分の請求書をお送りいたします。n'
    + '添付のPDFをご確認のうえ、お手続きをお願いいたします。nn'
    + '何卒よろしくお願い申し上げます。';

  GmailApp.sendEmail(email, subject, body, {
    attachments: [pdfBlob],
    name: '請求担当'
  });
}</code></pre>



<p class="wp-block-paragraph"><code>GmailApp.sendEmail()</code> の <code>attachments</code> オプションにPDFのBlobを渡すだけで、添付ファイル付きメールが送れます。差出人の表示名は <code>name</code> で変えられるので、会社名や担当部署を入れておくと親切です。</p>



<p class="wp-block-paragraph">メール本文を取引先ごとに個別化したり、HTMLメールで送りたい場合は、<a href="https://mashukabu.com/spreadsheet-gmail-batch-send-gas/">スプレッドシートからGmailを一括送信する方法</a>で差し込みメールのテクニックを詳しく解説しているので、あわせて読んでみてください。</p>



<h3 class="wp-block-heading"><span id="toc11">実行ボタンを付けて誰でも使えるようにする</span></h3>



<p class="wp-block-paragraph">毎月使うものなので、スプレッドシートにカスタムメニューを追加して、ワンクリックで実行できるようにしておきましょう。</p>



<pre class="wp-block-code"><code>// スプレッドシートを開いたときにメニューを追加する
function onOpen() {
  SpreadsheetApp.getUi()
    .createMenu('請求書ツール')
    .addItem('請求書PDFを作成', 'createInvoicePdf')
    .addToUi();
}</code></pre>



<p class="wp-block-paragraph">このコードを保存してスプレッドシートを開き直すと、メニューバーに「請求書ツール」という項目が増えます。あとはそこから「請求書PDFを作成」を選ぶだけで、全自動で処理が走ります。</p>



<h2 class="wp-block-heading"><span id="toc12">うまくいかないときの対処法｜よくあるトラブルと解決策</span></h2>



<p class="wp-block-paragraph">実装中につまずきやすいポイントと、その解決策をまとめました。エラーが出ても落ち着いて確認してください。</p>



<h3 class="wp-block-heading"><span id="toc13">2社目から差し込みがされない・プレースホルダーが残る</span></h3>



<p class="wp-block-paragraph">一番ハマりやすいのがこれです。前述のとおり、<code>fillTemplate</code> がテンプレートシートを直接書き換えるため、1社目の処理で <code>{{取引先名}}</code> が消えてしまうのが原因です。</p>



<p class="wp-block-paragraph">解決策は、<strong>毎回テンプレートシートを元の状態に戻す</strong>ことです。テンプレートを別シートとして複製してから差し込み、PDF化後に削除する方法が確実です。本体コードの差し込み部分を次のように書き換えてください。</p>



<pre class="wp-block-code"><code>data.forEach(function(row) {
  // ...（変数の取り出しは同じ）...

  // テンプレートをコピーして作業用シートを作る
  const workSheet = templateSheet.copyTo(ss).setName('_work');

  fillTemplate(workSheet, {
    '{{取引先名}}': clientName,
    '{{品目}}': item,
    '{{金額}}': '¥' + Number(amount).toLocaleString(),
    '{{発行日}}': issueDate
  });
  SpreadsheetApp.flush();

  // 作業用シートをPDF化
  const pdfBlob = exportSheetAsPdf(ss, workSheet, fileName);
  saveFolder.createFile(pdfBlob);

  // 作業用シートを削除して元に戻す
  ss.deleteSheet(workSheet);
});</code></pre>



<p class="wp-block-paragraph">これなら原本のテンプレートは触らないので、何社処理しても目印が消えません。</p>



<h3 class="wp-block-heading"><span id="toc14">「承認が必要です」と表示されて実行できない</span></h3>



<p class="wp-block-paragraph">GASが初めてDriveやGmailにアクセスするときは、Googleの<strong>認可（承認）</strong>が必要です。実行時に出るダイアログで「権限を確認」→自分のアカウントを選択→「詳細」→「（プロジェクト名）に移動」→「許可」の順に進めば承認できます。これは初回だけの操作です。</p>



<h3 class="wp-block-heading"><span id="toc15">PDFの一部が切れる・2ページに分かれてしまう</span></h3>



<p class="wp-block-paragraph">テンプレートシートの内容がA4の1枚に収まっていないのが原因です。次の点を確認してください。</p>



<ul class="wp-block-list"><li>テンプレートシートの列幅を狭めて、横幅をA4内に収める</li><li>不要な列・行が広がっていないか確認する</li><li>URLパラメータに <code>fitw=true</code>（幅をページに合わせる）を入れる</li><li>それでも収まらなければ <code>portrait=false</code> で横向きにする</li></ul>



<h3 class="wp-block-heading"><span id="toc16">スクリプトの実行時間が長すぎてエラーになる</span></h3>



<p class="wp-block-paragraph">GASには1回あたり6分という実行時間の上限があります。取引先が数十社を超えて時間切れになる場合は、処理する行数を分割したり、<code>Utilities.sleep()</code> の不要な待機を入れていないか確認しましょう。</p>



<p class="wp-block-paragraph">請求業務に複数のGAS自動化を組み合わせたい方は、<a href="https://mashukabu.com/gas-deadline-reminder-alert/">GASで締め切りリマインダーを自動通知する方法</a>も参考になります。</p>



<h2 class="wp-block-heading"><span id="toc17">まとめ｜請求書発行を丸ごと自動化して毎月の手間を消す</span></h2>



<p class="wp-block-paragraph">GASを使えば、スプレッドシートの請求データから、PDF生成・Drive保存・メール送付までを全自動にできます。一度コードを組んでしまえば、翌月からはデータシートを更新してボタンを押すだけです。半日かかっていた請求業務が、文字どおり<strong>数分で終わる</strong>ようになります。</p>



<p class="wp-block-paragraph">最後に、実装のポイントを振り返っておきましょう。</p>



<ul class="wp-block-list"><li>データシートとテンプレートシートを分けて作る</li><li>テンプレートには <code>{{取引先名}}</code> などの目印を置く</li><li>PDF変換はエクスポート用URLにパラメータを付けて制御する</li><li>ファイル名は日付と取引先名で動的に命名する</li><li>2社目以降の差し込みは「テンプレートを複製してから差し込む」で解決する</li></ul>



<p class="wp-block-paragraph">まずは <code>SEND_MAIL</code> を <code>false</code> にしたまま、PDF生成だけテストしてみてください。狙いどおりのPDFができることを確認してから、メール送信を有効にするのが安全な進め方です。</p>



<p class="wp-block-paragraph">GASをもっと活用したい方は、<a href="https://mashukabu.com/gas-form-reservation-google-calendar/">予約フォームとGoogleカレンダーを連携する方法</a>など、ほかの自動化レシピもぜひ試してみてください。</p>
]]></content:encoded>
					
					<wfw:commentRss>https://mashukabu.com/gas-spreadsheet-invoice-pdf/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
	</channel>
</rss>
