キーポイント
- エクスポート属性の設定
- 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; }
}
上記コードでは以下の機能が実現されています:
ExcelExporter属性により全体設定(テーブルスタイル、シート名、列の自動調整など)を定義ExporterHeader属性で各列の表示名や書式を個別指定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インターフェースを実装することで、多言語対応や動的な列制御が可能になります。