zoukankan      html  css  js  c++  java
  • 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。在这里尤其要感谢一位小伙伴,@hueifeng https://github.com/hueifeng,感谢其在春节期间为Magicodes.IE做出的文档贡献。

    由于个人和团队精力有限,Magicodes.IE非常迫切地希望能得到大家的帮助和支持,尤其是代码和文档贡献。如有意向,可以提交PR或者和我直接联系(公众号或QQ群均可)。

    相关Nuget包

    名称Nuget
    Magicodes.IE.Core
    NuGet
    NuGet
    Magicodes.IE.Excel
    NuGet
    NuGet
    Magicodes.IE.Pdf
    NuGet
    NuGet
    Magicodes.IE.Word
    NuGet
    NuGet
    Magicodes.IE.Html
    NuGet
    NuGet

    主要更新

    Magicodes.IE 2.0主要更新如下所示:

    • 完全重构整个导出Excel模块并且重写大部分接口

    • 支持列头筛选器——IExporterHeaderFilter,以便动态更改Excel导出结果

      public class TestExporterHeaderFilter1 : IExporterHeaderFilter
      {
          /// <summary>
          /// 表头筛选器(修改名称)
          /// </summary>
          /// <param name="exporterHeaderInfo"></param>
          /// <returns></returns>
          public ExporterHeaderInfo Filter(ExporterHeaderInfo exporterHeaderInfo)
          {
              if (exporterHeaderInfo.DisplayName.Equals("名称"))
              {
                  exporterHeaderInfo.DisplayName = "name";
              }
              return exporterHeaderInfo;
          }
      }
    • 支持导入结果筛选器——IImportResultFilter,可用于多语言场景的错误标注

      public class ImportResultFilterTest : IImportResultFilter
      {
          /// <summary>
          /// 本示例修改数据错误验证结果,可用于多语言等场景
          /// </summary>
          /// <typeparam name="T"></typeparam>
          /// <param name="importResult"></param>
          /// <returns></returns>
          public ImportResult<T> Filter<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];
                      items[i].FieldErrors[key] = value?.Replace("存在数据重复,请检查!所在行:", "Duplicate data exists, please check! Where:");
                  }
              }
              return importResult;
          }
      }
    • 支持列筛选器(需实现接口【IImportHeaderFilter】),可用于兼容多语言导入等场景

      /// <summary>
      /// 导入列头筛选器测试
      /// 1)测试修改列头
      /// 2)测试修改值映射
      /// </summary>
      public class ImportHeaderFilterTest : IImportHeaderFilter
      {
          public List<ImporterHeaderInfo> Filter(List<ImporterHeaderInfo> importerHeaderInfos)
          {
              foreach (var item in importerHeaderInfos)
              {
                  if (item.PropertyName == "Name")
                  {
                      item.Header.Name = "Student";
                  }
                  else if (item.PropertyName == "Gender")
                  {
                      item.MappingValues = new Dictionary<string, dynamic>()
                      {
                          {"",0 },
                          {"",1 }
                      };
                  }
              }
              return importerHeaderInfos;
          }
      }
    • 导出Excel支持拆分Sheet,仅需设置特性【ExporterAttribute】的【MaxRowNumberOnASheet】的值,为0则不拆分

      [ExcelExporter(Name = "测试", TableStyle = "Light10", AutoFitAllColumn = true, MaxRowNumberOnASheet = 100)]
      public class ExportTestDataWithSplitSheet
    • Excel模板导出优化

      • 优化导出性能

      • 修复数据项为NULL的异常

      • 修复多个Table渲染以及合并单元格渲染的问题

        合并单元格以及样式渲染
         
    • IExporter再添加两个动态DataTable导出方法,无需定义Dto即可动态导出数据,并且支持表头筛选器、Sheet拆分

        /// <summary>
              ///     导出Excel
              /// </summary>
              /// <param name="fileName">文件名称</param>
              /// <param name="dataItems">数据</param>
              /// <param name="exporterHeaderFilter">表头筛选器</param>
              /// <param name="maxRowNumberOnASheet">一个Sheet最大允许的行数,设置了之后将输出多个Sheet</param>
              /// <returns>文件</returns>
              Task<ExportFileInfo> Export(string fileName, DataTable dataItems, IExporterHeaderFilter exporterHeaderFilter = null, int maxRowNumberOnASheet = 1000000);
      
              /// <summary>
              ///     导出Excel
              /// </summary>
              /// <param name="dataItems">数据</param>
              /// <param name="exporterHeaderFilter">表头筛选器</param>
              /// <param name="maxRowNumberOnASheet">一个Sheet最大允许的行数,设置了之后将输出多个Sheet</param>
              /// <returns>文件二进制数组</returns>
              Task<byte[]> ExportAsByteArray(DataTable dataItems, IExporterHeaderFilter exporterHeaderFilter = null, int maxRowNumberOnASheet = 1000000);
    • 支持传入标注文件路径,不传参则默认同目录”_”后缀保存

    • 修复日期格式默认导出数字的Bug,默认输出“yyyy-MM-dd”,可以通过设置“[ExporterHeader(DisplayName = “日期2”, Format = “yyyy-MM-dd HH:mm:ss”)]”来修改。

    • 修复没有定义导出特性会报错的情形。

    • 修复转换DataTable时支持为空类型

    • 修复导出结果无法筛选的问题

    • 完善相关单元测试

    • 完善部分文档并完成:

    2.1版本预览

    2.1规划如下,由于精力有限,具体时间待定:

    最后

    由于个人和团队精力有限,Magicodes.IE非常迫切地希望能得到大家的帮助和支持,尤其是代码和文档贡献。如有意向,可以提交PR或者和我直接联系(公众号或QQ群均可)。

  • 相关阅读:
    Delphi实战中讲解FormCreate,FormShow,FormActivate
    delphi Try except on e:Exception do
    Delphi处理数据网格DBGrid的编辑框 获取还没有提交到数据集的字段文本
    delphi dbgrid中如何自动生成序号
    DBDateTimePicker;
    Delphi控件开发浅入深出(八)
    delphi中日期类型TDateTime使用总结
    在DBGrid录数据时,如何判断光标位置是在数据的最左或最右,如果是最左或最右则在按左右光标键时光标跳到上一格或下一格,如果是在数据中
    请问如何按Enter键让DBGrid的光标向右移以及换行?(0分)
    tdbgrid中用enter仿真tab键盘_delphi教程
  • 原文地址:https://www.cnblogs.com/codelove/p/12298853.html
Copyright © 2011-2022 走看看