GAS File.getBlobで財務・会計を効率化!請求書PDF自動作成と経費精算の効率化
財務・会計業務は、請求書作成、経費精算、予算管理など、多岐にわたります。これらの業務は、手作業が多く、時間と手間がかかることが課題です。Google Apps Script(GAS)とFile.getBlob()
を組み合わせることで、これらの業務を自動化し、大幅な効率化を実現できます。本記事では、File.getBlob()
関数の基本的な使い方から、財務・会計業務への応用例、よくある問題とその解決策、カスタマイズ方法まで、幅広く解説します。
File.getBlob()とは?
File.getBlob()
は、Google Driveに保存されているファイルをBlob(Binary Large Object)形式で取得するためのGAS関数です。Blob形式は、画像、PDF、テキストファイルなどのデータをバイナリデータとして扱うための形式で、他のAPIにデータを渡したり、ダウンロードさせたりする際に便利です。
File.getBlob()の基本的な使い方
File.getBlob()
を使用するには、まずDriveApp
サービスを使用してファイルを取得します。次に、取得したファイルオブジェクトに対してgetBlob()
メソッドを実行します。
// ファイルIDを指定してファイルを取得
const file = DriveApp.getFileById("ファイルID");
// Blob形式でファイルを取得
const blob = file.getBlob();
請求書PDF自動作成への応用
請求書をPDFで自動作成する例を見てみましょう。Googleドキュメントで請求書のテンプレートを作成し、GASでデータを差し込んでPDFを作成、さらにFile.getBlob()
でBlobを取得してメールに添付して送信します。
実装例:請求書PDF作成とメール送信
function createInvoiceAndSendEmail(data) {
// テンプレートファイルのID
const templateId = "テンプレートファイルのID";
// 出力先フォルダのID
const outputFolderId = "出力先フォルダのID";
// テンプレートファイルを取得
const templateFile = DriveApp.getFileById(templateId);
// テンプレートファイルをコピーして新しいドキュメントを作成
const newFile = templateFile.makeCopy("請求書_" + data.invoiceNumber, DriveApp.getFolderById(outputFolderId));
const newFileId = newFile.getId();
// ドキュメントを開く
const doc = DocumentApp.openById(newFileId);
const body = doc.getBody();
// データを差し込み(例:請求書番号、顧客名、請求金額)
body.replaceText("{{invoiceNumber}}", data.invoiceNumber);
body.replaceText("{{customerName}}", data.customerName);
body.replaceText("{{amount}}", data.amount);
// ドキュメントをPDFとして保存
doc.saveAndClose();
// PDFファイルを取得
const pdfFile = DriveApp.getFileById(newFileId);
const pdfBlob = pdfFile.getBlob().setName("請求書_" + data.invoiceNumber + ".pdf");
// メールを送信
const recipient = data.customerEmail;
const subject = "請求書をお送りします";
const bodyText = "請求書を添付いたしましたので、ご確認ください。";
MailApp.sendEmail({
to: recipient,
subject: subject,
body: bodyText,
attachments: [pdfBlob]
});
// 作成したファイルを削除 (必要に応じて)
// DriveApp.getFileById(newFileId).setTrashed(true);
}
// 請求書データ(例)
const invoiceData = {
invoiceNumber: "20240726-001",
customerName: "株式会社ABC",
customerEmail: "customer@example.com",
amount: "100,000円"
};
// 関数を実行
// createInvoiceAndSendEmail(invoiceData);
カスタマイズ方法
- テンプレートの変更:請求書のテンプレート(Googleドキュメント)を自由にカスタマイズできます。
- データソースの変更:スプレッドシートやデータベースから請求書データを取得するように変更できます。
- メール送信のカスタマイズ:メールの件名や本文を自由にカスタマイズできます。
経費精算システムへの応用
経費精算システムに、領収書の画像をアップロードさせ、その画像をFile.getBlob()
で取得してOCR処理を行い、経費データを自動入力する例を考えます。
実装例:領収書OCR処理とデータ自動入力
function processReceipt(fileId) {
// ファイルを取得
const file = DriveApp.getFileById(fileId);
const blob = file.getBlob();
// Cloud Vision APIでOCR処理 (APIキーの設定が必要)
const apiKey = "YOUR_API_KEY";
const url = "https://vision.googleapis.com/v1/images:annotate?key=" + apiKey;
const payload = {
"requests": [
{
"image": {
"content": Utilities.base64Encode(blob.getBytes())
},
"features": [
{
"type": "TEXT_DETECTION"
}
]
}
]
};
const options = {
"method": "post",
"contentType": "application/json",
"payload": JSON.stringify(payload)
};
const response = UrlFetchApp.fetch(url, options);
const json = JSON.parse(response.getContentText());
// OCR結果を取得
const textAnnotations = json.responses[0].textAnnotations;
if (textAnnotations && textAnnotations.length > 0) {
const ocrText = textAnnotations[0].description;
// ここでOCR結果を解析して、経費データ(日付、金額、店舗名など)を抽出する処理を実装
// 例:正規表現を使って日付や金額を抽出
const date = extractDate(ocrText);
const amount = extractAmount(ocrText);
const storeName = extractStoreName(ocrText);
// スプレッドシートにデータを書き込むなどの処理を実装
// 例:SpreadsheetApp.getActiveSheet().appendRow([date, amount, storeName]);
Logger.log("日付: " + date);
Logger.log("金額: " + amount);
Logger.log("店舗名: " + storeName);
} else {
Logger.log("OCR処理でテキストを検出できませんでした。");
}
}
// OCRテキストから日付を抽出する関数(例)
function extractDate(text) {
const regex = /(\d{4}[\/|年]\d{1,2}[\/|月]\d{1,2}日?)/;
const match = text.match(regex);
return match ? match[0] : "";
}
// OCRテキストから金額を抽出する関数(例)
function extractAmount(text) {
const regex = /(\d+[,|.]?\d+円)/;
const match = text.match(regex);
return match ? match[0] : "";
}
// OCRテキストから店舗名を抽出する関数(例)
function extractStoreName(text) {
// ここでは簡単な例として、最初の行を店舗名とみなす
const lines = text.split("\n");
return lines.length > 0 ? lines[0] : "";
}
// 例:DriveApp.createFile(blob).getId()などでファイルIDを取得して関数を実行
// processReceipt("ファイルID");
よくある問題とトラブルシューティング
- OCR精度が低い:OCRエンジンの選択、画像の品質向上、OCR後のデータ補正などで改善できます。
- API制限:Cloud Vision APIなどのAPIには利用制限があります。制限を超えないように設計するか、有料プランを検討してください。
- ファイル形式のサポート:
File.getBlob()
で取得できるファイル形式に制限がある場合があります。必要に応じて、ファイル形式を変換してください。
カスタマイズ方法と応用例
- OCR結果の自動補正:OCR結果を基に、過去のデータや辞書を使用して自動補正を行うことができます。
- AIによる経費科目の自動分類:OCR結果や過去のデータを用いて、AIによる経費科目の自動分類を行うことができます。
- RPA連携:UiPathなどのRPAツールと連携して、より複雑な業務フローを自動化することができます。
まとめ
File.getBlob()
は、GASでGoogle Driveのファイルを操作する上で非常に重要な関数です。財務・会計業務においては、請求書PDFの自動作成、経費精算の効率化など、様々な場面で活用できます。本記事で紹介したコード例やトラブルシューティングを参考に、ぜひFile.getBlob()
を活用して、業務効率化を実現してください。
CodeCampは、現役エンジニアからマンツーマンで学べるオンラインプログラミングスクールです。WebデザインやWebサービス開発、転職支援など、目的に合わせた多様なコースが選べます。
朝7時〜夜23時40分まで、365日レッスンが受けられるため、忙しい方でも自分のペースで学習を進めることが可能です。通過率8%の厳しい選考を通過した質の高い講師陣が、あなたのキャリアチェンジを強力にサポートします。
さらに、未経験者向けのカリキュラムや、学習開始から20日以内の全額返金保証制度もあるため、プログラミング学習に不安を感じている方でも安心して始めることができます。
CodeCampで理想の働き方を実現しよう