ASP.NET用オープンソースライブラリMagicodes.IEによるExcel出力ガイド

キーポイント

  • エクスポート属性の設定
  • Excelヘッダーの出力方法
  • データ出力と分割処理、フィルターの活用方法

エクスポート属性

ExporterAttribute

  • Name: シート名を指定
  • HeaderFontSize: ヘッダーフォントサイズ
  • FontSize: 本文フォントサイズ
  • MaxRowNumberOnASheet: 1シートあたりの最大行数。超えると複数シートに分割
  • TableStyle: テーブルスタイルの選択
  • AutoFitAllColumn: bool 全列の自動調整設定
  • Author: 作成者情報
  • ExporterHeaderFilter: ヘッダーフィルタークラスの指定

ExporterHeaderAttribute

  • DisplayName: 表示ラベル名
  • FontSize: フォントサイズ指定
  • IsBold: 太字表示の有無
  • Format: データ書式の設定
  • IsAutoFit: 列幅の自動調整
  • IsIgnore: 出力対象外の指定

実装手順

1. Magicodes.IE.Excelパッケージのインストール

Install-Package Magicodes.IE.Excel

2. Excelヘッダーの出力

  • 配列を使用したヘッダー出力
public async Task GenerateHeader()
{
    IExporter exporter = new ExcelExporter();
    var filePath = "header_output.xlsx";
    var headers = new[] { "項目A", "項目B", "項目C", "項目D", "項目E", "項目F" };
    var sheetTitle = "サンプルシート";
    var outputBytes = await exporter.ExportHeaderAsByteArray(headers, sheetTitle);
    File.WriteAllBytes(filePath, outputBytes);
}
  • DTOクラスによるヘッダー出力
public async Task ExportDtoHeader()
{
    IExporter exporter = new ExcelExporter();
    var filePath = "dto_header.xlsx";
    var resultBytes = await exporter.ExportHeaderAsByteArray<PersonData>(new PersonData());
    File.WriteAllBytes(filePath, resultBytes);
}

3. Excelファイルの出力

  • 基本的なデータ出力
public class PersonData
{
    public string FullName { get; set; }
    public int YearsOld { get; set; }
}

public async Task BasicExport()
{
    IExporter excelExporter = new ExcelExporter();
    var exportData = new List<PersonData>()
    {
        new PersonData { FullName = "田中太郎", YearsOld = 25 },
        new PersonData { FullName = "佐藤花子", YearsOld = 30 },
        new PersonData { FullName = "鈴木一郎", YearsOld = 22 }
    };
    
    var exportResult = await excelExporter.Export("basic_export.xlsx", exportData);
}
  • 属性を利用した高度な出力
public async Task AdvancedExport()
{
    IExporter exporter = new ExcelExporter();
    var dataList = new List<EmployeeInfo>()
    {
        new EmployeeInfo
        {
            FullName = "山田太郎",
            Age = 28,
            Notes = "開発部所属",
            JoinDate = DateTime.Now.AddYears(-3)
        },
        new EmployeeInfo
        {
            FullName = "高橋美咲",
            Age = 26,
            Notes = "営業部所属",
            JoinDate = DateTime.Now.AddYears(-1)
        },
        new EmployeeInfo
        {
            FullName = "伊藤健太",
            Age = 32,
            Notes = "人事部所属",
            JoinDate = DateTime.Now.AddYears(-5)
        }
    };
    
    await exporter.Export("advanced_export.xlsx", dataList);
}

[ExcelExporter(Name = "社員一覧", TableStyle = "Medium2", AutoFitAllColumn = true, MaxRowNumberOnASheet = 3)]
public class EmployeeInfo
{
    [ExporterHeader(DisplayName = "氏名")]
    public string FullName { get; set; }
    
    [ExporterHeader(DisplayName = "年齢")]
    public int Age { get; set; }
    
    public string Notes { get; set; }
    
    [ExporterHeader(DisplayName = "入社日", Format = "yyyy/MM/dd")]
    public DateTime JoinDate { get; set; }
}

上記コードでは以下の機能が実現されています:

  1. ExcelExporter属性により全体設定(テーブルスタイル、シート名、列の自動調整など)を定義
  2. ExporterHeader属性で各列の表示名や書式を個別指定
  3. MaxRowNumberOnASheetプロパティによりデータを自動的に複数シートに分割
  • ヘッダーフィルターの適用
[ExcelExporter(Name = "従業員情報", TableStyle = "Light8", 
               AutoFitAllColumn = true, MaxRowNumberOnASheet = 2,
               ExporterHeaderFilter = typeof(EmployeeHeaderConverter))]
public class StaffRecord
{
    [ExporterHeader(DisplayName = "名前")]
    public string FullName { get; set; }
    
    [ExporterHeader(DisplayName = "年齢")]
    public int Age { get; set; }
    
    public string Comments { get; set; }
}

public class EmployeeHeaderConverter : IExporterHeaderFilter
{
    public ExporterHeaderInfo Filter(ExporterHeaderInfo headerInfo)
    {
        switch(headerInfo.DisplayName)
        {
            case "名前":
                headerInfo.DisplayName = "Name";
                break;
            case "年齢":
                headerInfo.DisplayName = "Age";
                break;
        }
        return headerInfo;
    }
}

このようにIExporterHeaderFilterインターフェースを実装することで、多言語対応や動的な列制御が可能になります。

タグ: ASP.NET Excel Magicodes.IE C# データエクスポート

10月2日 10:43 投稿