Magicodes.IE 2.0のリリース
Magicodes.IEは、私たちが開発・メンテナンスしているオープンソースのインポート/エクスポートライブラリです。昨年末にNCCオープンソース組織に参加しました。
Githubリポジトリ:https://github.com/xin-lai/Magicodes.IE
Magicodes.IEは一晩で作られたものではなく、実際のニーズに基づいて継続的に改善され、何度もリファクタリングを重ねてきました。この度、春の休暇を利用して、Magicodes.IE 2.0をリファクタリングしてリリースしました。ここでは特に、休暇中にMagicodes.IEのドキュメントに貢献してくれた@hueifeng https://github.com/hueifengに感謝したいと思います。
主要なNuGetパッケージ
- Magicodes.IE.Core
- NuGet
- Magicodes.IE.Excel
- NuGet
- Magicodes.IE.Pdf
- NuGet
- Magicodes.IE.Word
- NuGet
- Magicodes.IE.Html
- NuGet
主要な更新
Magicodes.IE 2.0の主な更新点は以下の通りです。
- Excelエクスポートモジュールを完全にリファクタリングし、大部分のインターフェースを再実装しました。
- 列ヘッダーフィルタ(IExporterHeaderFilter)をサポートし、Excelエクスポート結果を動的に変更できます。
public class サンプルエクスポーターヘッダーフィルタ : IExporterHeaderFilter { /// <summary> /// ヘッダーをフィルタリングします(名前を変更) /// </summary> /// <param name="exporterHeaderInfo"></param> /// <returns></returns> public ExporterHeaderInfo フィルタリング(ExporterHeaderInfo exporterHeaderInfo) { if (exporterHeaderInfo.DisplayName.Equals("価格")) { exporterHeaderInfo.DisplayName = "Price"; } return exporterHeaderInfo; } } - インポート結果フィルタ(IImportResultFilter)をサポートし、多言語環境でのエラー表示に使用できます。
public class インポート結果フィルタテスト : IImportResultFilter { /// <summary> /// この例では、データエラー検証結果を変更します。多言語対応などに使用できます。 /// </summary> /// <typeparam name="T"></typeparam> /// <param name="importResult"></param> /// <returns></returns> public ImportResult<T> フィルタリング<T>(ImportResult<T> importResult) where T : class, new() { var errorRows = new List<int>() { 5, 6 }; var items = importResult.RowErrors.Where(p => errorRows.Contains(p.RowIndex)).ToList(); for (int i = 0; i < items.Count; i++) { for (int j = 0; j < items[i].FieldErrors.Keys.Count; j++) { var key = items[i].FieldErrors.Keys.ElementAt(j); var value = items[i].FieldErrors[key]; // 特定のフィールド名のエラーメッセージを変更 if (key == "Email") { items[i].FieldErrors[key] = value?.Replace("Email format is incorrect.", "メールアドレスの形式が正しくありません。"); } } } return importResult; } } - 列フィルタ(IImportHeaderFilter)をサポートし、多言語対応のインポートなどに使用できます。
/// <summary> /// インポートヘッダーフィルタのテスト /// 1)列ヘッダーを変更するテスト /// 2)値のマッピングを変更するテスト /// </summary> public class インポートヘッダーフィルタテスト : IImportHeaderFilter { public List<ImporterHeaderInfo> フィルタリング(List<ImporterHeaderInfo> importerHeaderInfos) { foreach (var item in importerHeaderInfos) { if (item.PropertyName == "ProductName") { item.Header.Name = "商品名"; } else if (item.PropertyName == "Category") { item.MappingValues = new Dictionary() { {"電子機器", 1 }, {"衣類", 2 } }; } } return importerHeaderInfos; } } - Excelエクスポートでシートの分割をサポート。ExporterAttributeのMaxRowNumberOnASheetを設定するだけで、シートを複数に分割して出力できます。0を設定すると分割されません。
[ExcelExporter(Name = "サンプルデータ", TableStyle = "Light10", AutoFitAllColumn = true, MaxRowNumberOnASheet = 100)] public class ExportTestDataWithSplitSheet - Excelテンプレートエクスポートの最適化
- エクスポートパフォーマンスの最適化
- データ項目がNULLの場合の例外を修正
- 複数のテーブルのレンダリングとマージンセルのレンダリングの問題を修正
- IExporterに2つの動的DataTableエクスポートメソッドを追加しました。Dtoを定義せずに動的にデータをエクスポートでき、ヘッダーフィルタやシートの分割もサポートします。
/// <summary> /// Excelをエクスポートします /// </summary> /// <param name="fileName">ファイル名</param> /// <param name="dataItems">データ</param> /// <param name="exporterHeaderFilter">ヘッダーフィルタ</param> /// <param name="maxRowNumberOnASheet">1シートあたりの最大行数。設定すると複数シートが出力されます</param> /// <returns>ファイル情報</returns> Task<ExportFileInfo> エクスポート(string fileName, DataTable dataItems, IExporterHeaderFilter exporterHeaderFilter = null, int maxRowNumberOnASheet = 1000000); /// <summary> /// Excelをエクスポートします /// </summary> /// <param name="dataItems">データ</param> /// <param name="exporterHeaderFilter">ヘッダーフィルタ</param> /// <param name="maxRowNumberOnASheet">1シートあたりの最大行数。設定すると複数シートが出力されます</param> /// <returns>ファイルのバイト配列</returns> Taskバイト配列としてエクスポート(DataTable dataItems, IExporterHeaderFilter exporterHeaderFilter = null, int maxRowNumberOnASheet = 1000000); - エクスポートするファイルのパスを指定できるようになりました。パラメータを渡さない場合は、デフォルトで同じディレクトリに「_」サフィックスを付けて保存されます。
- 日付形式のデフォルトエクスポートが数字になるバグを修正しました。デフォルトで「yyyy-MM-dd」が出力され、`[ExporterHeader(DisplayName = "日付2", Format = "yyyy-MM-dd HH:mm:ss")]`のように設定することで変更できます。
- エクスポート属性が定義されていない場合のエラーを修正しました。
- DataTableへの変換時にnull許容型をサポートしました。
- エクスポート結果のフィルタリングができない問題を修正しました。
- 関連する単体テストを改善しました。
- 一部のドキュメントを改善し、以下を完成させました。
- 基礎チュートリアル:Excelエクスポート
- 基礎チュートリアル:PDFレシートエクスポート
2.1バージョンの計画
2.1の計画は以下の通りですが、リソースに限りがあるため、具体的な時期は未定です。
- Excelでの画像のインポート/エクスポートのサポート
- .NET461向けのPDFエクスポートのサポート
- CSVのインポート/エクスポートのサポート