Excelでの経費精算を支援するPHP+MySQLアプリ
前回まででAzure上でPHPとMySQLを動作させる環境が整いましたので、今回はその環境を使って簡単なサービスを作成してみます。今回作成するのは、経費精算の経理業務を少しだけ楽にするアプリケーションです。具体的には、Excelで作成した経費精算書をWebサイトにアップロードし、そこから会計ソフトでインポートできるCSVファイルを出力するものです。
最近は、Webサイト上で経費精算するための便利なサービスが増えてきました。こうしたサービスを利用するメリットの1つは、データやファイルを一元的に管理できることです。ユーザが入力したデータは会計ソフトなどでそのまま利用できることも多く、事務の効率化につながります。とは言え「実際にそこまでは必要ない」という方も多いでしょう。
一方、Excelを使った経費精算のメリットは、入力、編集のしやすさ、印刷品質の高さなどです。特に、印刷と押印が必要なシーンに対しては、Web上のアプリケーションは十分に対応できていないのが現状だと思います。とは言え、Excelの場合、ファイルをどこで管理するかなど煩雑になりがちです。また、データ自体も会計ソフトで利用されることはほとんどありません。
これらを踏まえ、以下のようなざっくりとしたシナリオを想定してサービスを作ることにします。
- ユーザがExcelを使って経費精算書を作成(印刷、押印)
- 上長などがサイトにXLSファイルをアップロード(承認)
- 経理担当者がサイトからCSVファイルをダウンロード
- 経理担当者が会計ソフトにCSVファイルをインポート
アプリケーションとしては、PHPとMySQLを使ったアップロード掲示板になります。実際の画面は、図1のようになります。
アップロードしたXLSファイルからセルのデータを読み取ってデータベースに格納し、あわせてCSVファイルを作成して、リストとして表示させます。XLSファイルの読み込みには、PHPExcelライブラリを使っています。
今回は、PHPとMySQLの設定手順とソースコードを紹介します。もっとも、この辺りはLAMP環境のノウハウですので、最小限にとどめます。
Excelの経費精算書を元にsqlファイルを作成
まず、実際に利用している経費精算書を見て、MySQLで利用するデータのフィールドや型を決めましょう。経費精算書は、図2のようなExcelファイルとします。
また、会計ソフトとしては、弥生会計を利用することにします。図3のように、月末に未払費用として振替伝票を作成しています。
ここでは、科目ごとに仕訳しています。データとして必要になるのは、「日付」のほか、「交際費」「会議費」「旅費交通費」「通信費」「消耗品費」「新聞図書費」「その他」の各科目。加えて、サイト上でファイルのリンクを表示するために「xls」「csv」の各ファイル名です。
これをもとにsqlファイルを作成します。sample_db.sqlとして以下の内容で作成します。
各科目はint型、日時はdate型、ファイル名はvarchar型にしています。
MySQLに登録するには、以下のようにします。データベース名はsample_db、テーブル名はsample_table、ユーザはsample_db_userです。
なお、MySQLは、第6回と第7回で行ったようにAzureドライブを利用することにします。ローカル環境でユーザ、データベース、データを作成し、仮想ディスク内に保存しておきます。
PHPアプリケーションの作成
では、次にLAMP環境で動作するPHPアプリケーションを作成しましょう。
使い勝手を考えると、XLSファイルをアップロードすると自動的にデータが一覧表示されたほうがいいと思います。また、画面遷移もできるだけ少ないほうがいいでしょう。ここでは、1つのファイル(index.php)として作成してみます。
必要な処理としては、次の5つがあります。
- ファイルのアップロードと保存
- MySQLへの接続
- XLSデータから内容の読み込みとMySQLへのデータ書き込み
- CSVファイルの作成
- MySQLからデータの読み込みと一覧表示
このうち、「3. XLSデータから内容の読み込み」と、「4. CSVファイルの作成」について、以下にコードを挙げておきます。
XLSデータから内容の読み込み
まず、PHPExcelを利用するので、最初に以下の記述が必要です。PHPExcelのClassesフォルダをルートディレクトリ配下に設置しておきます。
XLSデータを読み込むには、以下のようにします。なお、$xlsfileはアップロードしたファイル、$updirはアップロードしたファイルの保存先です。
CSVファイルの作成
アップロードしたファイル名をcsvに変えたうえで、弥生会計でインポート可能な形式(振替伝票)に書き換えて、保存しています。
部分的に見るとわかりにくいかもしれませんが、今回のアプリケーションで固有なのはこの辺りだけです。PHPでのファイルのアップロードやMySQLへの接続などは、少し修正すれば普通のLAMP環境と同じように動作させることができます。LAMP環境と明らかに異なると言えるのは、IISでのアクセス制限などでしょう。
次回は、作成したプログラム全体と、実際にAzureにデプロイしたうえで、IISでアクセス制限をどう行うかなどを紹介しようと思います。