Magicodes.IE 2.0のリリース

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のインポート/エクスポートのサポート

タグ: Magicodes.IE .NET C# Excel pdf

7月11日 17:11 投稿