出張報告書を毎回手書きで作成していませんか。経費精算と二重入力していると、時間がかかるうえにミスが発生しやすいものです。また、報告書のデータが散逸してしまうリスクも無視できません。この記事では、Googleドキュメントのテンプレート機能とApps Scriptを組み合わせて、出張報告書の作成から経費精算、Driveバックアップまでを自動連動する方法を解説します。
【要点】出張報告書テンプレートの作成から経費精算・バックアップ自動化までの流れ
- テンプレートギャラリーの利用: 統一フォーマットの報告書を簡単に複製でき、記入漏れを防止します。
- Apps Scriptによる自動転記: ドキュメント内の経費データをスプレッドシートに自動で反映し、集計作業を省力化します。
- スクリプトの定期実行とバックアップ: ドキュメントのコピーを指定フォルダに自動保存し、データ消失を防ぎます。
ADVERTISEMENT
目次
出張報告書テンプレートと自動化の仕組み
出張報告書の作成を効率化するには、まず定型フォーマットをテンプレート化します。Googleドキュメントには標準のテンプレートギャラリーがありますが、ここに自社専用の報告書を追加することも可能です。テンプレートから複製されたドキュメントにユーザーが記入した後、Apps Scriptを使って経費データをスプレッドシートに転記し、同時にドキュメントのコピーをバックアップフォルダに保存します。これにより、手入力の手間とミスが減り、データの一元管理が実現します。
必要なものはGoogleアカウントのみです。Apps Scriptの知識が少し必要ですが、サンプルコードをそのまま使えば初心者でも設定できます。この仕組みを導入すると、毎回の報告書作成時間が半分以下になり、経費精算もリアルタイムで把握できるようになります。
出張報告書テンプレートの作成手順
まず、Googleドキュメントで出張報告書のフォーマットを作成します。以下の項目を含むように設計しましょう。
- 新規ドキュメントを作成する
Googleドライブで「新規」→「Googleドキュメント」をクリックし、白紙のドキュメントを開きます。 - 報告書の項目をレイアウトする
出張日、氏名、目的地、目的、交通費、宿泊費、日当などを表形式で入力します。表は「挿入」→「表」から好きなサイズを選べます。
例:1行目に「項目」「金額」「備考」、2行目以降に「交通費」「宿泊費」など。 - テンプレートとして保存する
完成したドキュメントのタイトルを「出張報告書テンプレート」などに変更し、URLを控えておきます。テンプレートとして共有するには、ドキュメントを開いた状態で「共有」→「リンクを知っている全員」に設定し、書き込みは編集者に制限します。
テンプレートは直接編集しないように注意してください。利用者はテンプレートをコピーして使うことで、元のフォーマットが変更されるのを防げます。
経費精算スプレッドシートの準備
経費データを蓄積するためのスプレッドシートを作成します。以下の手順で行います。
- 新しいスプレッドシートを作成する
Googleドライブで「新規」→「Googleスプレッドシート」を選択し、ファイル名を「経費精算管理」とします。 - 列見出しを設定する
1行目に「報告書ID」「出張日」「氏名」「交通費」「宿泊費」「日当」「合計」「バックアップURL」など、必要な項目を入力します。 - スクリプト用のIDを控える
スプレッドシートのURLからスプレッドシートID(d/と/editの間の文字列)をメモします。また、シート名も確認しておきます(デフォルトは「シート1」)。
このスプレッドシートが、後でApps Scriptからデータを受け取る格納庫になります。
ADVERTISEMENT
Apps Scriptで自動転記とバックアップを設定する
ここが核心です。Googleドキュメントのスクリプトエディタを使って、報告書の内容をスプレッドシートに自動転記し、同時にドキュメントのコピーをバックアップフォルダに保存するコードを実装します。
スクリプトエディタを開く
- テンプレートドキュメントを開く
先ほど作成した出張報告書テンプレートを開きます。 - 拡張機能メニューからApps Scriptを起動する
「拡張機能」→「Apps Script」をクリックし、新しいスクリプトプロジェクトを作成します。
スクリプトコードを記述する
以下のコードをコピーして、スクリプトエディタに貼り付けます。ただし、SPREADSHEET_IDやFOLDER_IDはご自身の環境に合わせて変更してください。
function processReport() {
// 設定(各自書き換えてください)
var SPREADSHEET_ID = 'あなたのスプレッドシートID';
var SHEET_NAME = 'シート1';
var FOLDER_ID = 'あなたのバックアップフォルダID';
var TEMPLATE_DOC_ID = 'あなたのテンプレートドキュメントID';
// テンプレートをコピーして新しい報告書を作成(実際の運用ではフォームなどでトリガー)
// この例では、現在開いているドキュメントを処理対象とします
var doc = DocumentApp.getActiveDocument();
var body = doc.getBody();
// テーブル(経費データ)を取得
var tables = body.getTables();
if (tables.length == 0) {
Logger.log('テーブルが見つかりません');
return;
}
var table = tables[0];
var rows = table.getNumRows();
// スプレッドシートに書き込むデータを準備
var date = ''; // 出張日はドキュメントのどこかにテキストとしてあると仮定
var name = '';
// 実際はテーブル外のパラグラフから抽出するか、テーブルの特定セルに配置
// 簡単のため、テーブル2行目以降から経費項目を読み取る
var expenseData = [];
for (var i = 2; i < rows; i++) {
var row = table.getRow(i);
var cell0 = row.getCell(0).getText();
var cell1 = row.getCell(1).getText();
var cell2 = row.getCell(2).getText();
expenseData.push([cell0, cell1, cell2]);
}
// スプレッドシートに追記
var ss = SpreadsheetApp.openById(SPREADSHEET_ID);
var sheet = ss.getSheetByName(SHEET_NAME);
var lastRow = sheet.getLastRow();
var newRow = lastRow + 1;
// 見出しを除いて転記(例として経費の合計だけでも可)
// ここでは簡略化のため、最初の経費行を書き込み
if (expenseData.length > 0) {
sheet.getRange(newRow, 1, 1, expenseData[0].length).setValues([expenseData[0]]);
}
// バックアップ:ドキュメントのコピーを指定フォルダに保存
var folder = DriveApp.getFolderById(FOLDER_ID);
var copy = doc.makeCopy('出張報告書_' + new Date().toISOString().slice(0,10), folder);
Logger.log('バックアップ完了: ' + copy.getUrl());
}
上記コードはあくまでサンプルです。実際の運用では、テーブルの構造に合わせたデータ抽出ロジックや、エラーハンドリングが必要です。
トリガーを設定して自動実行する
- トリガーを追加する
スクリプトエディタの左メニューから「トリガー」アイコン(時計)をクリックし、「トリガーを追加」を選択します。 - イベントを選択する
「時間主導型」で「時間単位のタイマー」を選び、「1時間ごと」などに設定します。または、ドキュメントが編集されたときに実行したい場合は「ドキュメントのオープン時」なども選べますが、今回はシンプルに時間主導にします。 - 関数を指定する
「実行する関数」に「processReport」を選択し、「保存」します。初回は権限の承認を求められますので、内容を確認して許可してください。
これで、定期的にスクリプトが実行され、開かれているドキュメントの経費データがスプレッドシートに転記され、バックアップコピーが作成されるようになります。より実用的にするには、フォーム送信時に実行するトリガーや、ドキュメント内の特定のキーワードを検出して自動実行するように改良できます。
注意点とよくある失敗例
スクリプトの権限エラーが発生する
初回実行時に「このアプリは確認されていません」という画面が出ることがあります。これはGoogleのセキュリティポリシーによるもので、自分のアカウントであれば「詳細」→「安全でないページに移動」を選択して許可しても問題ありません。ただし、組織の管理者ポリシーによっては制限される場合もあるので、その場合はIT部門に相談してください。
テーブル構造が異なるとデータが正しく取得できない
スクリプトはテーブルの行数やセルの位置に依存します。テンプレートの表を変更した場合、スクリプトも修正する必要があります。対策として、テンプレートの表は固定し、編集者に変更させないように権限設定を行います。
バックアップフォルダの指定を間違える
FOLDER_IDの取得は、目的のフォルダを開いたときのURLの「folders/」以降の文字列です。誤ったIDを指定するとエラーになります。必ず正しいIDをコピーしましょう。
手動管理と自動化の比較
| 項目 | 手動管理 | 自動化(本手法) |
|---|---|---|
| 報告書作成時間 | 毎回書式を整える必要があり、1件あたり約15分 | テンプレートから5分で作成、記入のみ |
| 経費精算の正確性 | 転記ミスが発生する可能性がある | スクリプトが自動転記するのでミスがほぼなくなる |
| バックアップの確実性 | 手動で保存するため忘れることがある | 自動で指定フォルダにコピーされるので確実 |
| データ集計 | 手動でスプレッドシートに転記、集計に時間がかかる | スプレッドシートに自動蓄積され、集計が即座に可能 |
まとめ
この記事では、Googleドキュメントのテンプレートを活用した出張報告書の効率的な作成方法と、Apps Scriptによる経費精算スプレッドシートへの自動転記、Driveバックアップの自動化手順を解説しました。テンプレート化によって記入漏れが減り、スクリプトによる連動で手作業の二重入力とデータ散逸を解消できます。今後は、フォーム送信時にスクリプトが起動するようにトリガーを変更したり、経費データを月次で集計するダッシュボードを作成するなど、さらに発展させることが可能です。まずはテンプレートとサンプルスクリプトをコピーして、ご自身の環境で試してみてください。
ADVERTISEMENT
超解決 第一編集部
疑問解決ポータル「超解決」の編集チーム。正確な検証と、現場視点での伝わりやすい解説を心がけています。
Googleドキュメントの人気記事ランキング
- 【Googleドキュメント】上付き・下付き文字の入力方法!ショートカットと手動切替
- 【Googleドキュメント】ルビ(ふりがな)を振る方法!代替ツールとアドオンの活用
- 【Googleドキュメント】文字間隔(字間)を調整する方法!カーニングの代替手段
- 【Googleドキュメント】図表番号の自動採番!Figure 1, Table 2 の連番
- 【Googleドキュメント】Docs→Wordへエクスポート!docx出力での書式維持
- 【Googleドキュメント】縦書き表示を実現する方法!代替ツールと回避策
- 【Googleドキュメント】インデントを正確に調整する方法!ルーラーとタブストップの使い方
- 【Googleドキュメント】罫線を縦・横に挿入する方法!Wordの罫線機能との比較
- 【Googleドキュメント】共有後に閲覧履歴を確認!誰がいつ開いたかの追跡
- 【Googleドキュメント】共有先の名前が表示されない時の対処!匿名動物アイコンの正体
