【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つやった経験があるだけでも、その経験が役にたつ時は来ます!
まだ実務でやったことのない方は、是非試してみてください!

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

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

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

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

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

などについて学べます。

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

コメントを残す

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

CAPTCHA