【ASP.NET MVC5】ClosedXMLでExcelファイル出力

ASP.NET MVC5 ClosedXMLでExcel出力

業務システム開発において
画面やデータベースの情報をExcelファイルに出力する機能は、本当によくあります!
今まで色んな現場でシステム開発を経験してきましたが、なかったところはなかったくらいです。。

そこで、この記事では、ASP.NET MVC5のプロジェクトにて、
画面やデータベースなどのデータをClosedXMLを用いてExcel出力する方法をまとめています。

事前準備

使用ツール

・Visual Studio Community 2019
こちらでダウンロード可能です。(無料)

・SQL Server 2019 Developer エディション
こちらでダウンロード可能です。(無料)

使用プロジェクト

今回は「ClosedXMLSample」というプロジェクト名で、
ASP.NET MVCのプロジェクトを作成しました。

Entity FrameWorkのバージョン:6.0.2
bootstrapのバージョン:3.4.1

データベース構築

今回は、Microsoft SQL Server でデータベースを作成して、商品テーブル(T_COM)を作成します。
SQL Serverのインストールに関しては、ここでは割愛します。

商品テーブルのカラム情報

No. 論理名 物理名 データ型 Not Null デフォルト 備考
1 商品ID com_id bigint identity Yes (PK)
2 商品名 com_name nvarchar(100)
3 商品詳細 com_detail nvarchar(max)
4 削除フラグ del_flag tinyint Yes 未削除:0 削除済:1
5 登録日時 create_date datetime Yes
6 登録ユーザー create_user nvarchar(50)
7 更新日時 update_date datetime Yes
8 更新ユーザー update_user nvarchar(50)

SQL Server上で、以下のSQLを実行してください。

商品テーブル(T_COM)

商品テーブル(T_COM)の初期データ

Entity Data Model更新

データベースでテーブルの追加、初期データ追加ができたら、プロジェクト上でADO.NET Enitiy Data Modelも更新して、データベースの情報をマッピングする為のEDMファイルを作成します。
(Visual Studio上でEDMファイルを作成する方法は、こちらの記事を参照ください。)

対象のEDMファイルのデザイナー画面を開き、右クリック→「データベースからモデルを更新」を選択します。

EDMのデザイナー画面に、商品テーブル(T_COM)が追加された事を確認できたら、
Ctrl+Sで上書き保存しましょう!

ClosedXMLインストール

ClosedXMLは、システム上でExcelファイル(*.xlsx形式)を読み書きなどするためのライブラリです。
まずは、NuGetのパッケージの管理からインストールを行います。

・「ソリューションエクスプローラー」のプロジェクトを右クリック→「NuGetパッケージの管理」をクリックします。

・参照タブをクリックして、ClosedXMLと検索すると、ClosedXMLと一覧に表示されるので、インストールします。

Excelテンプレートファイルを使用しないで出力する方法

まずはExcelテンプレートファイルを使用しないで、商品テーブルのデータを直接Excelファイルに出力する方法です。

今回は、出力する事がメインなので、画面には拘らず、デフォルトのトップ画面に「Excel出力」というボタンを配置して、
クリックすることで処理が開始されるようにしましょう。

Viewの修正

Excel出力のボタンを追加する為、
[Views]→[Home]→index.cshtmlを選択してください。

9~12行目にHomeContollerのListExportメソッドで出力処理がされるようにformで囲みます。

Controllerの修正

トップページでの処理になる為、
[Controller]→HomeController.csを選択してください。

まずは6~9行目に必要なusingディレクティブを追加、。
次に33行目からListExportメソッドを追加することで実装完了です。

商品テーブルのデータを取得後、DataTable型のオブジェクトにコピー、
その後、DataTable型のオブジェクトをワークブックのオブジェクトに設定します。
※9、11行目のClosedXMLSampleの部分は、私が作成したプロジェクト名の為、ご自身で設定したプロジェクト名にしてください。
※SAMPLEDB01Entitiesは、私がEDMファイルを作成した際に設定したエンティティの名前の為、ご自身で設定したエンティティ名に変更してください。

動作確認

ここまで実装できたら、実行してみましょう。

「Excel出力」ボタンをクリックして、無事にExcelファイルのダウンロードが開始されました。

Excelテンプレートファイルを使用して出力する方法

次に事前にテンプレートとなるExcelファイルを用意しておいて、
そのテンプレートファイルの指定したセル位置にデータを出力する方法です。

今回は商品詳細画面で各商品の情報をExcel出力するようにします。
同じファイルとセル位置で試したい場合は、こちらで作成したテンプレートファイルをご使用ください。

プロジェクトにテンプレートファイルを追加

作成したExcelテンプレートファイルをプロジェクトに追加します。
こちらでは、ExcelTmpというディレクトリを新規作成して、その中にテンプレートファイルを追加しました。
・プロジェクト(ClosedXMLSample)を右クリック → [追加] → [新しいフォルダ]
・[作成したフォルダを任意の名前に変更] → [作成したフォルダを右クリック] → [追加] → [既存の項目]で、
用意しているExcelファイルを選択します。

※追加したテンプレートファイルを選択し、プロパティの「出力ディレクトリにコピー」を「常にコピーする」に変更してください。
これを設定しないとアプリの実行ファイルパス内にテンプレートファイルのディレクトリおよびファイルがコピーされません。

Viewの修正

テンプレートなしの時と同じように、今回は画面にこだわりはないので、
トップページのソース(index.cshtml)に、ボタンを追加します。

Controllerの修正

まずは10行目に必要なusingディレクティブを追加、
ビルドした際に、Excelテンプレートファイルも実行ファイルのパスにコピーされる為、
その実行ファイルを参照するコード(82~84行目)の為に必要になります。
次に74行目からDetailExportメソッドを追加することで実装完了です。

今回はセルに設定する内容は、固定値にしていますが、
データベースから取得してきた情報でも、なんでもいいです。
とにかく、ワークブックのオブジェクトからシートのオブジェクトを開いて、
Cellメソッドの引数にExcelのセル位置を指定すれば、そのセルに値が設定される事が理解できればOKです!

動作確認

それでは、実行してみましょう。

まとめ

このようにClosedXMLを使用することで、
データベースなどの情報を簡単にExcelファイルに出力できました。

業務システム開発では、ほぼ確実にある機能です。
ClosedXML以外にも方法はありますが、
1つやった経験があるだけでも、その経験が役にたつ時は来ます!
まだ実務でやったことのない方は、是非試してみてください!

それでは、今回もありがとうございました!

この記事を書いた人

石井 よしまさ
石井 よしまさフリーエンジニア / Webデザイナー / LPコーディング講師 / シンガーソングライター
歌うプログラマーとして
IT業界、プログラミングの"あるある"を歌にしている。プログラミングもデザインも音楽も色々とやるパラレルキャリアな人。

フリーランスエンジニア歴10年のセールスデザインができるWeb制作者 石井よしまさのメルマガ

常駐型のフリーランスエンジニアとして10年。
10年で関わった現場は13社。
その中で4社から正社員オファーを頂くことができた私が
主にフリーランス初心者向けに、

以下のような内容を配信していきます。

「常駐型のフリーランスで評価される為に大切な5つのマインド」
「10年で13社の案件に関わり、なぜ4社から正社員オファーがあったのか?」
「セールスデザイナーが依頼すべき良いコーダーとは?」..

などについて学べます。

是非、フリーランスとしてやっていきたい!
という方は、ご登録ください(^^)

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

CAPTCHA