Magicodes.IE.Excelを利用して、教科書発注一覧をExcelテンプレートから自動生成する方法を解説します。
前提条件
- Magicodes.IE.Excelパッケージを使用
- データモデル(Dto)を事前に定義
- Excelテンプレートを規則に従って作成
手順
1. パッケージのインストール
ターミナルまたはパッケージマネージャコンソールで以下を実行します。
dotnet add package Magicodes.IE.Excel
2. テンプレートの作成
Magicodes.IE.Excelでは以下の2種類のレンダリング記法が利用可能です。
単一セル埋め込み
{{OrganizationName}} 2024年度 第1学期 教科書発注一覧
注意点
- 二重波括弧
{{}}が必須 - 式や演算は未サポート
- 子プロパティ(例:
{{Order.ContactPerson}})も可 - 大文字小文字を区別
テーブル(リスト)埋め込み
Table>>Items|RowNumber|ISBN|Title|Author|Publisher|UnitPrice|Qty|Notes|>>Table
- 開始タグ:
Table>>Items|(Itemsはリストプロパティ名) - 各列に対応するプロパティ名を
|で区切る - 終了タグ:
|>>Table - 1行に複数テーブルは現在未サポート
3. データモデルの定義
発注書Dto
public class OrderSheet
{
public string OrganizationName { get; }
public string OfficeAddress { get; }
public string ContactPerson { get; }
public string PhoneNumber { get; }
public string PreparedBy { get; }
public string IssueDate { get; }
public List<Book> Books { get; }
public OrderSheet(string org, string addr, string contact, string phone,
string preparer, string date, List<Book> books)
{
OrganizationName = org;
OfficeAddress = addr;
ContactPerson = contact;
PhoneNumber = phone;
PreparedBy = preparer;
IssueDate = date;
Books = books;
}
}
書籍情報Dto
public class Book
{
public int RowNumber { get; }
public string ISBN { get; }
public string Title { get; }
public string Author { get; }
public string Publisher { get; }
public string UnitPrice { get; }
public int Quantity { get; }
public string Notes { get; }
public Book(int row, string isbn, string title, string author,
string publisher, string price, int qty, string notes)
{
RowNumber = row;
ISBN = isbn;
Title = title;
Author = author;
Publisher = publisher;
UnitPrice = price;
Quantity = qty;
Notes = notes;
}
}
4. エクスポート実行
IExportFileByTemplate インターフェースを経由してテンプレートベースの出力を行います。
public interface IExportFileByTemplate
{
Task<ExportFileInfo> ExportByTemplate<T>(
string fileName,
T data,
string templatePath) where T : class;
}
ユニットテスト例
[Fact(DisplayName = "Excelテンプレートから教科書注文書を出力")]
public async Task ExportTextbookOrderSheet()
{
var template = Path.Combine("Templates", "textbook_order_template.xlsx");
var output = Path.Combine("Output", "textbook_order_2024.xlsx");
var exporter = new ExcelExporter();
var order = new OrderSheet(
"株式会社エデュケーション",
"東京都渋谷区桜丘町1-1",
"山田太郎",
"03-1234-5678",
"システム部",
DateTime.Now.ToString("yyyy/MM/dd"),
new List<Book>
{
new(1, "978-4-123-45678-9", "C#実践プログラミング", "山本一郎", "技術評論社", "¥3,200", 50, ""),
new(2, "978-4-987-65432-1", "Pythonデータ分析入門", "鈴木花子", "翔泳社", "¥2,800", 30, ""),
new(3, "978-4-555-55555-5", "JavaScript完全攻略", "佐藤次郎", "オーム社", "¥3,500", 40, "")
});
await exporter.ExportByTemplate(output, order, template);
}
実行後、指定したパスにExcelファイルが生成されます。