Tool-Magicodes.IE

[删除(380066935@qq.com或微信通知)]

Magicodes.IE 

dotnetcore/Magicodes.IE:导入和导出通用库,支持Dto导入导出,模板导出,花式导出和动态导出,支持Excel,csv,Word,Pdf和Html。 (github.com)

Stargazers over time

  • 需配合相关导入导出的DTO模型使用,支持通过DTO以及相关特性控制导入导出。配置特性即可控制相关逻辑和显示结果,无需修改逻辑代码; 
  • 支持各种筛选器,支持依赖注入,以便支持多语言、动态控制列展示等场景,具体使用见单元测试:
    • 导入列头筛选器【IImportHeaderFilter】(可动态指定导入列、导入的值映射关系)
    • 导出列头筛选器【IImportHeaderFilter】(可动态控制导出列,支持动态导出(DataTable))
    • 导出列头集合筛选器【IImportHeadersFilter】(可动态控制导出列,支持动态导出(DataTable))
    • 导入结果筛选器【IImportResultFilter】(可修改标注文件)
  • 导出支持文本自定义过滤或处理;
  • 导入支持中间空行自动跳过;
  • 导入支持自动根据 DTO 生成导入模板,针对必填项将自动标注; 
  • 导入支持数据下拉选择,目前仅支持枚举类型;
  • 导入数据支持前后空格以及中间空格处理,允许指定列进行设置;
  • 导入支持模板自动检查,数据自动校验,异常统一处理,并提供统一的错误封装,包含异常、模板错误和行数据错误; 
  • 支持导入表头位置设置,默认为1;
  • 支持导入列乱序,无需按顺序一一对应;
  • 支持导入指定列索引,默认自动识别;
  • 导出Excel支持拆分Sheet,仅需设置特性【ExporterAttribute】的【MaxRowNumberOnASheet】的值,为0则不拆分。具体见单元测试;
  • 支持将导入Excel进行错误标注;  
  • 导入支持截止列设置,如未设置则默认遇到空格截止;
  • 支持导出HTML、Word、Pdf,支持自定义导出模板;
    • 导出HTML 
    • 导出字 
    • 导出Pdf,支持设置,具体见更新日志 
    • 导出收据 
  • 导入支持重复验证; 
  • 支持单个数据模板导出,常用于导出收据、凭据等业务
  • 支持动态列导出(基于DataTable),并且超过100W将自动拆分Sheet。(感谢张善友老师(#8 ))
  • 支持 dynamic/ExpandoObject 动态列导出
        [Fact(DisplayName = "DTO导出支持动态类型")]
        public async Task ExportAsByteArraySupportDynamicType_Test()
        {
            IExporter exporter = new ExcelExporter();

            var filePath = GetTestFilePath($"{nameof(ExportAsByteArraySupportDynamicType_Test)}.xlsx");

            DeleteFile(filePath);

            var source = GenFu.GenFu.ListOf<ExportTestDataWithAttrs>();
            string fields = "text,number,name";
            var shapedData = source.ShapeData(fields) as ICollection<ExpandoObject>;

            var result = await exporter.ExportAsByteArray<ExpandoObject>(shapedData);
            result.ShouldNotBeNull();
            result.Length.ShouldBeGreaterThan(0);
            File.WriteAllBytes(filePath, result);
            File.Exists(filePath).ShouldBeTrue();
        }
  • 支持值映射,支持通过“ValueMappingAttribute”特性设置值映射关系,目前仅可用于枚举和Bool类型,支持导入导出。
        /// <summary>
        ///     性别
        /// </summary>
        [ImporterHeader(Name = "性别")]
        [Required(ErrorMessage = "性别不能为空")]
        [ValueMapping(text: "", 0)]
        [ValueMapping(text: "", 1)]
        public Genders Gender { get; set; }
  • 支持枚举和Bool类型的导入数据验证项的生成,以及相关数据转换

    • 枚举默认情况下会自动获取枚举的描述、显示名、名称和值生成数据项

       	/// <summary>
       	/// 学生状态 正常、流失、休学、勤工俭学、顶岗实习、毕业、参军
       	/// </summary>
       	public enum StudentStatus
       	{
       		/// <summary>
       		/// 正常
       		/// </summary>
       		[Display(Name = "正常")]
       		Normal = 0,
      
       		/// <summary>
       		/// 流失
       		/// </summary>
       		[Description("流水")]
       		PupilsAway = 1,
      
       		/// <summary>
       		/// 休学
       		/// </summary>
       		[Display(Name = "休学")]
       		Suspension = 2,
      
       		/// <summary>
       		/// 勤工俭学
       		/// </summary>
       		[Display(Name = "勤工俭学")]
       		WorkStudy = 3,
      
       		/// <summary>
       		/// 顶岗实习
       		/// </summary>
       		[Display(Name = "顶岗实习")]
       		PostPractice = 4,
      
       		/// <summary>
       		/// 毕业
       		/// </summary>
       		[Display(Name = "毕业")]
       		Graduation = 5,
      
       		/// <summary>
       		/// 参军
       		/// </summary>
       		[Display(Name = "参军")]
       		JoinTheArmy = 6,
       	}

    • bool类型默认会生成“是”和“否”的数据项

    • 如果已设置自定义值映射,则不会生成默认选项

  • 支持excel多Sheet导入; 

  • 支持Excel模板导出,JSON动态导出,并且支持图片渲染 

    渲染语法如下所示:

      {{Company}}  //单元格渲染
      {{Table>>BookInfos|RowNo}} //表格渲染开始语法
      {{Remark|>>Table}}//表格渲染结束语法
      {{Image::ImageUrl?Width=50&Height=120&Alt=404}} //图片渲染
      {{Image::ImageUrl?w=50&h=120&Alt=404}} //图片渲染
      {{Image::ImageUrl?Alt=404}} //图片渲染
      {{Formula::AVERAGE?params=G4:G6}}  //公式渲染
      {{Formula::SUM?params=G4:G6&G4}}   //公式渲染
    

    后续将支持自定义管道。

  • 支持Excel导入模板生成标注 

  • 支持Excel图片导入导出

    • 图片导入
      • 导入为Base64
      • 导入到临时目录
      • 导入到指定目录
    • 图片导出
      • 将文件路径导出为图片
      • 将网络路径导出为图片
  • 支持多个实体导出多个Sheet

  • 支持使用System.ComponentModel.DataAnnotations命名空间下的部分特性来控制导入导出 #63

  • 支持在 ASP.NET Core Web API 中使用自定义格式化程序导出Excel、Pdf、Csv等内容,具体见教程 #64

  • 支持分栏、分sheet、追加rows导出

exporter.Append(list1).SeparateByColumn().Append(list2).ExportAppendData(filePath);

具体见上面教程《Magicodes.IE 之花式导出》

  • 支持单元格导出宽度设置
[ExporterHeader(Width = 100)]
public DateTime Time3 { get; set; }
  • Excel导出支持HeaderRowIndex,在ExcelExporterAttribute导出特性类中添加HeaderRowIndex属性,方便导出时去指定从第一行开始导出。

  • Excel生成导入模板支持内置数据验证

对于内置数据验证的支持可通过IsInterValidation属性开启,并且需要注意的是仅支持MaxLengthAttribute、 MinLengthAttribute、 StringLengthAttribute、 RangeAttribute支持对内置数据验证的开启操作。  支持对输入提示的展示操作: