GAS Body.getTextで経費精算を効率化!財務担当者向け徹底ガイド

GAS Body.getTextで経費精算を効率化!財務担当者向け徹底ガイド

この記事では、Google Apps Script(GAS)のBody.getText関数を活用して、経費精算業務を効率化する方法を解説します。財務・会計担当者が日々の業務で直面する課題を解決し、より正確かつ迅速な経費処理を実現するための実践的な情報を提供します。

経費精算業務の課題

多くの企業では、経費精算プロセスが煩雑で時間がかかるといった課題を抱えています。手作業による入力ミス、申請書類の紛失、承認フローの遅延などが、その主な原因です。これらの課題を解決するために、GASとBody.getText関数を活用することで、経費精算プロセスを自動化し、効率化することができます。

GAS Body.getText関数の基本

Body.getText関数は、GoogleドキュメントやGmailの本文からテキストデータを抽出するために使用されます。この関数を使うことで、特定のパターンに一致する情報を自動的に取得し、スプレッドシートに入力したり、他のシステムに連携したりすることができます。

Body.getTextの構文

Body.getText()

この関数は、ドキュメントまたはメールの本文全体を文字列として返します。

利用シチュエーション:経費精算の自動化

経費精算の申請書をGoogleドキュメントで作成し、その内容をGASで自動的に読み取り、スプレッドシートに転記する例を紹介します。これにより、手作業による入力ミスを減らし、経費処理の時間を大幅に短縮できます。

実装例1:経費申請書の自動読み取り

Googleドキュメントで作成された経費申請書から、申請日、申請者名、金額、摘要などの情報を自動的に抽出します。

function extractExpenseData() {
// ドキュメントIDを設定
const documentId = "YOUR_DOCUMENT_ID";
// ドキュメントを開く
const doc = DocumentApp.openById(documentId);
// 本文を取得
const body = doc.getBody();
const text = body.getText();

// 申請日、申請者名、金額、摘要を正規表現で抽出
const applicationDate = text.match(/申請日:(.*)/)[1].trim();
const applicantName = text.match(/申請者名:(.*)/)[1].trim();
const amount = text.match(/金額:(.*)/)[1].trim();
const description = text.match(/摘要:(.*)/)[1].trim();

// スプレッドシートに転記
const spreadsheetId = "YOUR_SPREADSHEET_ID";
const sheetName = "経費申請";
const ss = SpreadsheetApp.openById(spreadsheetId);
const sheet = ss.getSheetByName(sheetName);

// 最終行にデータを追加
sheet.appendRow([applicationDate, applicantName, amount, description]);
}

実装例2:Gmailの添付ファイルから経費情報を抽出

領収書が添付されたGmailのメールから、添付ファイルをダウンロードし、OCR(Optical Character Recognition)でテキストデータを読み取り、経費情報を抽出します。

function extractExpenseDataFromGmail() {
// 検索クエリを設定
const searchQuery = "from:receipt@example.com subject:領収書";
// スレッドを取得
const threads = GmailApp.search(searchQuery, 0, 1);
const message = threads[0].getMessages()[0];

// 添付ファイルを取得
const attachments = message.getAttachments();
if (attachments.length > 0) {
const attachment = attachments[0];
// 添付ファイルが画像かどうかを確認
if (attachment.getContentType().indexOf("image") > -1) {
// OCRでテキストデータを読み取る(Cloud Vision APIを使用)
const imageData = attachment.getDataAsString();
const base64Data = Utilities.base64Encode(imageData);
const resource = {
"requests": [
{
"image": {
"content": base64Data
},
"features": [
{
"type": "TEXT_DETECTION",
"maxResults": 1
}
]
}
]
};
const options = {
"method": "post",
"contentType": "application/json",
"payload": JSON.stringify(resource)
};
const response = UrlFetchApp.fetch("https://vision.googleapis.com/v1/images:annotate?key=YOUR_API_KEY", options);
const json = JSON.parse(response.getContentText());
const text = json["responses"][0]["textAnnotations"][0]["description"];

// 領収書の日付、金額などを正規表現で抽出
const receiptDate = text.match(/日付:(.*)/)[1].trim();
const receiptAmount = text.match(/金額:(.*)/)[1].trim();

// スプレッドシートに転記
const spreadsheetId = "YOUR_SPREADSHEET_ID";
const sheetName = "領収書";
const ss = SpreadsheetApp.openById(spreadsheetId);
const sheet = ss.getSheetByName(sheetName);

// 最終行にデータを追加
sheet.appendRow([receiptDate, receiptAmount]);
}
}
}

注意:このコードを実行するには、Google Cloud Vision APIのAPIキーが必要です。また、APIを有効にする必要があります。

実装例3:経費精算承認ワークフローの自動化

経費申請があった際に、承認者に自動的にメールを送信し、承認結果をスプレッドシートに記録するワークフローを構築します。

function automateExpenseApprovalWorkflow() {
// スプレッドシートIDとシート名を設定
const spreadsheetId = "YOUR_SPREADSHEET_ID";
const sheetName = "経費申請";
// スプレッドシートを開く
const ss = SpreadsheetApp.openById(spreadsheetId);
const sheet = ss.getSheetByName(sheetName);
// 最終行のデータを取得
const lastRow = sheet.getLastRow();
const data = sheet.getRange(lastRow, 1, 1, sheet.getLastColumn()).getValues()[0];

// 申請日、申請者名、金額、摘要を取得
const applicationDate = data[0];
const applicantName = data[1];
const amount = data[2];
const description = data[3];

// 承認者にメールを送信
const approverEmail = "approver@example.com";
const subject = "【経費申請】" + applicantName + "さんからの申請";
const body = "申請日:" + applicationDate + "
申請者名:" + applicantName + "
金額:" + amount + "
摘要:" + description + "

承認する場合は、以下のリンクをクリックしてください。
https://script.google.com/macros/s/YOUR_WEB_APP_ID/exec?action=approve&row=" + lastRow + "

否認する場合は、以下のリンクをクリックしてください。
https://script.google.com/macros/s/YOUR_WEB_APP_ID/exec?action=reject&row=" + lastRow;
MailApp.sendEmail(approverEmail, subject, body, {htmlBody: body});
}

注意:このコードを実行するには、ウェブアプリケーションとしてデプロイし、承認・否認のアクションを処理するコードを追加する必要があります。

よくある問題とトラブルシューティング

  • 正規表現がうまく動作しない:正規表現の記述が誤っている可能性があります。正規表現チェッカーなどを利用して、パターンが正しいか確認してください。
  • APIの制限に引っかかる:Google Apps Scriptには、1日に実行できるAPIの回数に制限があります。制限を超えないように、コードの実行回数を減らすか、時間をおいてから再実行してください。
  • OCRの精度が低い:領収書の画質が悪い場合、OCRの精度が低下する可能性があります。より高画質の画像を使用するか、別のOCRエンジンを試してみてください。

カスタマイズ方法と応用例

  • 複数のドキュメントからデータを抽出:複数のGoogleドキュメントを処理するために、forループを使用してドキュメントIDを順番に処理します。
  • 特定のキーワードを含む行のみを抽出:if文とindexOfメソッドを組み合わせて、特定のキーワードを含む行のみを抽出します。
  • 抽出したデータをBigQueryに連携:BigQuery APIを使用して、抽出したデータをBigQueryに直接連携します。

まとめ

GASのBody.getText関数を活用することで、経費精算業務を大幅に効率化することができます。この記事で紹介した実装例を参考に、自社の業務に合わせてカスタマイズし、より効率的な経費処理を実現してください。

PR

CodeCampは、現役エンジニアからマンツーマンで学べるオンラインプログラミングスクールです。WebデザインやWebサービス開発、転職支援など、目的に合わせた多様なコースが選べます。
朝7時〜夜23時40分まで、365日レッスンが受けられるため、忙しい方でも自分のペースで学習を進めることが可能です。通過率8%の厳しい選考を通過した質の高い講師陣が、あなたのキャリアチェンジを強力にサポートします。
さらに、未経験者向けのカリキュラムや、学習開始から20日以内の全額返金保証制度もあるため、プログラミング学習に不安を感じている方でも安心して始めることができます。

CodeCampで理想の働き方を実現しよう