Magicodes.IE.Excelを使った教科書注文書のテンプレート出力

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ファイルが生成されます。

タグ: Magicodes.IE.Excel C# Excelテンプレート エクスポート DTO

7月6日 18:32 投稿