GASで請求書を自動作成・Gmailで送信するワークフロー

先生

GASで請求書作成を自動化!時間を有効活用して、創造的な仕事に集中しよう。

GASで請求書自動作成・Gmail送信:業務効率化の決定版

請求書作成、毎月同じ作業に時間を取られていませんか?GAS(Google Apps Script)を使えば、請求書作成からGmailでの送信までを自動化し、大幅な業務効率化が可能です。この記事では、GASを使って請求書を自動作成し、Gmailで送信するワークフローを解説します。プログラミング初心者でも理解しやすいように、ステップごとに丁寧に説明します。

この記事を読めば、請求書作成にかかる時間を大幅に短縮し、より創造的な業務に集中できるようになります。ぜひ最後までお読みいただき、GASの可能性を体感してください。

GAS環境構築と請求書テンプレート準備

まず、GASを使うための環境を構築しましょう。Googleアカウントがあればすぐに利用できます。

1. Googleスプレッドシートを開き、メニューから「ツール」→「スクリプトエディタ」を選択します。これでGASのコードエディタが開きます。

次に、請求書テンプレートを準備します。Googleドキュメントで請求書のテンプレートを作成し、必要な箇所(請求先、請求金額、日付など)にプレースホルダーを設けておきます。例えば、{{請求先}}{{請求金額}}{{日付}}のように記述します。

請求書テンプレートをGoogleドキュメントで作成することで、デザインの自由度が高まり、企業のブランドイメージに合った請求書を作成できます。

請求書テンプレートのIDを控えておきましょう。これはGASからテンプレートを操作するために必要になります。ドキュメントのURLから取得できます。(例:https://docs.google.com/document/d/xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx/editxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx の部分)

GASで請求書を自動生成するコード

GASのコードエディタに、以下のコードを記述します。このコードは、スプレッドシートの情報を読み込み、請求書テンプレートに値を埋め込み、PDFとして保存するものです。

function createInvoice() {
  // スプレッドシートのIDとシート名
  const spreadsheetId = 'YOUR_SPREADSHEET_ID';
  const sheetName = '請求データ';

  // 請求書テンプレートのID
  const templateId = 'YOUR_DOCUMENT_ID';

  // スプレッドシートから請求データを取得
  const ss = SpreadsheetApp.openById(spreadsheetId);
  const sheet = ss.getSheetByName(sheetName);
  const lastRow = sheet.getLastRow();

  // 請求データをループ処理(2行目からデータがあると仮定)
  for (let i = 2; i <= lastRow; i++) {
    const customerName = sheet.getRange(i, 1).getValue(); // 顧客名
    const amount = sheet.getRange(i, 2).getValue();       // 請求金額
    const invoiceDate = sheet.getRange(i, 3).getValue();    // 請求日

    // 請求書テンプレートをコピー
    const doc = DocumentApp.openById(templateId).copy(customerName + '様_請求書');
    const docId = doc.getId();
    const body = doc.getBody();

    // プレースホルダーを置換
    body.replaceText('{{請求先}}', customerName);
    body.replaceText('{{請求金額}}', amount);
    body.replaceText('{{日付}}', Utilities.formatDate(invoiceDate, 'JST', 'yyyy/MM/dd'));

    // ドキュメントをPDFとして保存
    doc.saveAndClose();
    const pdfBlob = DriveApp.getFileById(docId).getAs('application/pdf');

    // PDFを保存するフォルダを指定(フォルダID)
    const folderId = 'YOUR_FOLDER_ID';
    const folder = DriveApp.getFolderById(folderId);
    folder.createFile(pdfBlob).setName(customerName + '様_請求書.pdf');

    // コピーしたドキュメントを削除(必要に応じて)
    DriveApp.getFileById(docId).setTrashed(true);
  }
}

上記のコードでは、以下の点を変更する必要があります。

YOUR_SPREADSHEET_ID: 請求データが記載されたスプレッドシートのID

YOUR_DOCUMENT_ID: 請求書テンプレートのドキュメントID

YOUR_FOLDER_ID: PDFファイルを保存するGoogleドライブのフォルダID

また、スプレッドシートの構造に合わせて、getRange()の引数を調整してください。上記の例では、1列目に顧客名、2列目に請求金額、3列目に請求日が記載されていることを想定しています。

このスクリプトを実行すると、スプレッドシートのデータに基づいて請求書が自動生成され、指定したGoogleドライブのフォルダにPDFファイルとして保存されます。

Gmailで請求書を自動送信するコード

次に、作成した請求書をGmailで自動送信するコードを追加します。

function sendInvoiceByEmail() {
  // スプレッドシートのIDとシート名
  const spreadsheetId = 'YOUR_SPREADSHEET_ID';
  const sheetName = '請求データ';

  // PDFが保存されているフォルダID
  const folderId = 'YOUR_FOLDER_ID';

  const ss = SpreadsheetApp.openById(spreadsheetId);
  const sheet = ss.getSheetByName(sheetName);
  const lastRow = sheet.getLastRow();

  // 請求データをループ処理(2行目からデータがあると仮定)
  for (let i = 2; i <= lastRow; i++) {
    const customerName = sheet.getRange(i, 1).getValue(); // 顧客名
    const emailAddress = sheet.getRange(i, 4).getValue(); // メールアドレス

    // PDFファイルを取得
    const folder = DriveApp.getFolderById(folderId);
    const files = folder.getFilesByName(customerName + '様_請求書.pdf');
    let pdfFile;
    while (files.hasNext()) {
      pdfFile = files.next();
    }

    // メールを送信
    if (pdfFile) {
      const subject = customerName + '様_請求書';
      const body = customerName + '様

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

請求書をお送りいたしますので、ご確認よろしくお願いいたします。';
      const attachment = pdfFile.getAs(MimeType.PDF);
      GmailApp.sendEmail(emailAddress, subject, body, {
        attachments: [attachment],
        name: '請求書自動送信システム'
      });
    } else {
      Logger.log(customerName + '様の請求書が見つかりませんでした。');
    }
  }
}

上記のコードでは、以下の点を変更する必要があります。

YOUR_SPREADSHEET_ID: 請求データが記載されたスプレッドシートのID

YOUR_FOLDER_ID: PDFファイルが保存されているGoogleドライブのフォルダID

また、スプレッドシートの構造に合わせて、getRange()の引数を調整してください。上記の例では、1列目に顧客名、4列目にメールアドレスが記載されていることを想定しています。

このスクリプトを実行すると、作成された請求書PDFが、スプレッドシートに記載されたメールアドレス宛に自動送信されます。

GASの実行トリガーを設定

最後に、GASの実行トリガーを設定します。これにより、定期的に請求書作成・送信処理を自動実行できます。

1. GASのコードエディタで、メニューから「編集」→「現在のプロジェクトのトリガー」を選択します。

2. 「トリガーを追加」をクリックし、以下の設定を行います。

* 実行する関数: createInvoicesendInvoiceByEmail をそれぞれ設定

* イベントのソース: 「時間主導型」

* 時間ベースのトリガーの種類: 「日単位」または「月単位」など、目的に合わせて選択

* 時間: 実行する時間帯を選択

3. 「保存」をクリックします。

これで、設定した時間になると、GASが自動的に請求書を作成し、Gmailで送信するようになります。

参考リンク

まとめ

この記事では、GASを使って請求書を自動作成し、Gmailで送信するワークフローを解説しました。GASを活用することで、請求書作成にかかる時間を大幅に短縮し、業務効率化を実現できます。ぜひ、この記事を参考に、GASを使った請求書自動化に挑戦してみてください。

最初は少し難しいかもしれませんが、一つずつステップを踏んでいけば、必ずできるようになります。頑張ってください!