EPPlus のバージョン 5 以降(最新のバージョン 7 を含む)を 商用目的で利用する場合は、商用ライセンスが必要になりました。
ライセンスに関するよくある質問
ASP.NET MVCで、C#を使用してExcelテンプレートファイルを基にエクスポート機能を作成し、AJAXでデータ通信を行うサンプルを以下に示します。ここでは、EPPlus
を使用してExcelを操作し、jQuery
と Ajax
を使って非同期でデータを取得し、エクスポート処理を実行します。また、Bootstrap 5.3.2
を使って基本的なUIを構築します。
1. ASP.NET MVC コントローラーの作成
まず、エクスポート機能を担当するコントローラーを作成します。
using EPPlus;
using System;
using System.Data;
using System.IO;
using System.Web;
using System.Web.Mvc;
public class ExportController : Controller
{
// エクスポートの処理
[HttpPost]
public ActionResult ExportToExcel()
{
// データを取得(サンプルとしてDataTableを使用)
DataTable data = GetData();
// テンプレートファイルのパス
string templatePath = Server.MapPath("~/Templates/template.xlsx");
// エクスポート先のファイルパス
string outputPath = Server.MapPath("~/Downloads/exportedFile.xlsx");
// Excelエクスポート処理
ExcelExport export = new ExcelExport();
export.ExportToExcel(templatePath, data, outputPath);
// エクスポートしたファイルを返す
return File(outputPath, "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet", "exportedFile.xlsx");
}
// サンプルデータの取得(実際のデータを取得する処理に変更)
private DataTable GetData()
{
DataTable dt = new DataTable();
dt.Columns.Add("ID");
dt.Columns.Add("Name");
dt.Rows.Add(1, "John Doe");
dt.Rows.Add(2, "Jane Smith");
return dt;
}
}
public class ExcelExport
{
public void ExportToExcel(string templatePath, DataTable data, string outputPath)
{
FileInfo templateFile = new FileInfo(templatePath);
// Excelパッケージを開く
using (var package = new ExcelPackage(templateFile))
{
// 最初のワークシートを取得
var worksheet = package.Workbook.Worksheets[0];
// データテーブルの行数だけループしてセルに値を設定
for (int row = 0; row < data.Rows.Count; row++)
{
for (int col = 0; col < data.Columns.Count; col++)
{
worksheet.Cells[row + 2, col + 1].Value = data.Rows[row][col];
}
}
// 出力ファイルを保存
package.SaveAs(new FileInfo(outputPath));
}
}
}
2. ビューの作成 (CSHTML)
次に、AJAX
を使用してエクスポートを非同期で呼び出すボタンと、進行状況の表示を作成します。
@{
ViewBag.Title = "Excel Export";
}
<!-- BootstrapのCSS読み込み -->
<link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.2/dist/css/bootstrap.min.css" rel="stylesheet">
<div class="container">
<h2>Excelエクスポートサンプル</h2>
<!-- エクスポートボタン -->
<button id="exportBtn" class="btn btn-primary">Excelエクスポート</button>
<!-- ローディングのインジケータ -->
<div id="loading" style="display:none;">
<span class="spinner-border text-primary" role="status"></span>
<span>エクスポート中...</span>
</div>
<div id="message" style="margin-top:20px;"></div>
</div>
<!-- jQuery, Bootstrap, Ajaxのスクリプト -->
<script src="https://code.jquery.com/jquery-3.7.1.min.js"></script>
<script src="https://cdn.jsdelivr.net/npm/bootstrap@5.3.2/dist/js/bootstrap.bundle.min.js"></script>
<script>
$(document).ready(function () {
$('#exportBtn').click(function () {
// ローディングインジケータの表示
$('#loading').show();
$('#message').text('');
// AJAXリクエストを送信
$.ajax({
type: 'POST',
url: '@Url.Action("ExportToExcel", "Export")',
dataType: 'json',
success: function (response) {
// ダウンロードリンクを作成してダウンロードを開始
window.location.href = response.fileUrl;
$('#loading').hide();
},
error: function () {
$('#loading').hide();
$('#message').text('エクスポートに失敗しました。再試行してください。');
}
});
});
});
</script>
3. エクスポートの流れ
-
ビュー (CSHTML): ユーザーが「Excelエクスポート」ボタンをクリックすると、AJAXリクエストがバックエンドの
ExportToExcel
アクションに送信されます。 -
バックエンド (Controller): コントローラーの
ExportToExcel
アクションは、Excelテンプレートを開き、データを埋め込んで新しいファイルとして保存し、その後そのファイルをレスポンスとして返します。 - AJAX成功時: AJAXが成功すると、サーバーから返されたファイルのURLを使って、ブラウザで直接ファイルのダウンロードが開始されます。
4. 動作
- ボタンをクリックすると、非同期でExcelエクスポートが実行され、処理中はローディングインジケータが表示されます。
- エクスポートが成功すると、ブラウザのダウンロードが自動的に開始されます。
5. Bootstrapでのローディング表示
エクスポート処理中にローディングインジケータを表示するために、Bootstrapのspinner
を使用しています。処理が終了すると、インジケータが非表示になり、ユーザーにフィードバックを提供できます。
6. 重要なポイント
-
EPPlus
を使ってExcelファイルを操作しているため、Excelテンプレートファイルとデータを結びつけて新しいファイルを作成します。 - サーバー側の処理は、ファイルを返すことでダウンロードが始まるようにしており、AJAXの成功時に
window.location.href
を使ってダウンロードリンクを設定します。
これにより、非同期でExcelエクスポートを行い、エクスポート完了後にブラウザで直接ファイルがダウンロードされるようになります。