关于Magicodes.IE
导入导出通用库,通过导入导出DTO模型来控制导入和导出,支持Excel、Word、Pdf和Html。
GitHub地址:https://github.com/xin-lai/Magicodes.IE
特点
需配合相关导入导出的DTO模型使用,支持通过DTO以及相关特性控制导入导出。配置特性即可控制相关逻辑和显示结果,无需修改逻辑代码;
导出支持列头自定义处理以便支持多语言等场景;
导出支持文本自定义过滤或处理;
导入支持中间空行自动跳过;
导入支持自动根据 DTO 生成导入模板,针对必填项将自动标注;
导入支持数据下拉选择,目前仅支持枚举类型;
导入数据支持前后空格以及中间空格处理,允许指定列进行设置;
导入支持模板自动检查,数据自动校验,异常统一处理,并提供统一的错误封装,包含异常、模板错误和行数据错误;
支持导入表头位置设置,默认为1;
支持导入列乱序,无需按顺序一一对应;
支持导入指定列索引,默认自动识别;
支持将导入Excel进行错误标注;
导入支持截止列设置,如未设置则默认遇到空格截止;
支持导出HTML、Word、Pdf,支持自定义导出模板;
导出HTML
导出Word
导出Pdf
导入支持重复验证;
相关官方Nuget包
联系我们
订阅号
关注麦扣聊技术订阅号可以获得最新文章、教程、文档:
QQ群
编程交流群<85318032>
产品交流群<897857351>
文档官网&官方博客
文档官网:https://docs.xin-lai.com/
博客:http://www.cnblogs.com/codelove/
其他开源库
https://github.com/xin-lai
https://gitee.com/magicodes
VNext
生成导入模板时必填项支持自定义样式配置
CSV支持
导入结果支持生成HTML输出
更新历史
2019.9.28
【导出】修改默认的导出HTML、Word、Pdf模板
【导入】添加截断行的单元测试,以测试中间空格和结尾空格
【导入】将【数据错误检测】和【导入】单元测试的Dto分开,确保全部单元测试通过
【文档】更新文档
2019.9.26
【导出】支持导出Word、Pdf、HTML,支持自定义导出模板
【导出】添加相关导出的单元测试
【导入】支持重复验证,需设置ImporterHeader特性的IsAllowRepeat为false
2019.9.19
【导入】支持截止列设置,如未设置则默认遇到空格截止
【导入】导入支持通过特性设置Sheet名称
2019.9.18
【导入】重构导入模块
【导入】统一导入错误消息
Exception :导入异常信息
RowErrors :数据错误信息
TemplateErrors :模板错误信息,支持错误分级
HasError : 是否存在错误(仅当出现异常并且错误等级为Error时返回true)
【导入】基础类型必填自动识别,比如int、double等不可为空类型自动识别,无需额外设置Required
【导入】修改Excel模板的Sheet名称
【导入】支持导入表头位置设置,默认为1
【导入】支持列乱序(导入模板的列序号不再需要固定)
【导入】支持列索引设置
【导入】支持将导入的Excel进行错误标注,支持多个错误
【导入】加强对基础类型和可为空类型的支持
【EPPlus】由于EPPlus.Core已经不维护,将EPPlus的包从EPPlus.Core改为EPPlus,
2019.9.11
【导入】导入支持自动去除前后空格,默认启用,可以针对列进行关闭,具体见AutoTrim设置
【导入】导入Dto的字段允许不设置ImporterHeader,支持通过DisplayAttribute特性获取列名
【导入】导入的Excel移除对Sheet名称的约束,默认获取第一个Sheet
【导入】导入增加对中间空格的处理支持,需设置FixAllSpace
【导入】导入完善对日期类型的支持
【导入】完善导入的单元测试
导出Demo
Demo1-1
普通导出
publicclassExportTestData{publicstringName1 {get;set; }publicstringName2 {get;set; }publicstringName3 {get;set; }publicstringName4 {get;set; }}varresult =awaitExporter.Export(filePath,newList{newExportTestData{Name1 ="1",Name2 ="test",Name3 ="12",Name4 ="11",},newExportTestData{Name1 ="1",Name2 ="test",Name3 ="12",Name4 ="11",}});
Demo1-2
特性导出
[ExcelExporter(Name ="测试", TableStyle ="Light10")]publicclassExportTestDataWithAttrs{[ExporterHeader(DisplayName ="加粗文本", IsBold =true)]publicstringText {get;set; }[ExporterHeader(DisplayName ="普通文本")]publicstringText2 {get;set; }[ExporterHeader(DisplayName ="忽略", IsIgnore =true)]publicstringText3 {get;set; }[ExporterHeader(DisplayName ="数值", Format =",0")]publicdoubleNumber{get;set; }[ExporterHeader(DisplayName ="名称", IsAutoFit =true)]publicstringName {get;set; }}varresult =awaitExporter.Export(filePath,newList{newExportTestDataWithAttrs{Text ="啊实打实大苏打撒",Name="aa",Number=5000,Text2 ="w萨达萨达萨达撒",Text3 ="sadsad打发打发士大夫的"},newExportTestDataWithAttrs{Text ="啊实打实大苏打撒",Name="啊实打实大苏打撒",Number=6000,Text2 ="w萨达萨达萨达撒",Text3 ="sadsad打发打发士大夫的"},newExportTestDataWithAttrs{Text ="啊实打实速度大苏打撒",Name="萨达萨达",Number=6000,Text2 ="突然他也让他人",Text3 ="sadsad打发打发士大夫的"},});
Demo1-3
列头处理或者多语言支持
[ExcelExporter(Name ="测试", TableStyle ="Light10")]publicclassAttrsLocalizationTestData{[ExporterHeader(DisplayName ="加粗文本", IsBold =true)]publicstringText {get;set; }[ExporterHeader(DisplayName ="普通文本")]publicstringText2 {get;set; }[ExporterHeader(DisplayName ="忽略", IsIgnore =true)]publicstringText3 {get;set; }[ExporterHeader(DisplayName ="数值", Format =",0")]publicdoubleNumber{get;set; }[ExporterHeader(DisplayName ="名称", IsAutoFit =true)]publicstringName {get;set; }}ExcelBuilder.Create.WithLocalStringFunc((key) =>{if(key.Contains("文本")){return"Text";}return"未知语言";}).Build;varfilePath = Path.Combine(Directory.GetCurrentDirectory,"testAttrsLocalization.xlsx");if(File.Exists(filePath)) File.Delete(filePath);varresult =awaitExporter.Export(filePath,newList{newAttrsLocalizationTestData{Text ="啊实打实大苏打撒",Name="aa",Number=5000,Text2 ="w萨达萨达萨达撒",Text3 ="sadsad打发打发士大夫的"},newAttrsLocalizationTestData{Text ="啊实打实大苏打撒",Name="啊实打实大苏打撒",Number=6000,Text2 ="w萨达萨达萨达撒",Text3 ="sadsad打发打发士大夫的"},newAttrsLocalizationTestData{Text ="啊实打实速度大苏打撒",Name="萨达萨达",Number=6000,Text2 ="突然他也让他人",Text3 ="sadsad打发打发士大夫的"},});
导入 Demo
导入特性(ImporterAttribute):
HeaderRowIndex:表头位置
导入列头特性(ImporterHeader):
Name:表头显示名称(不可为空)。
Description:表头添加注释。
Author:注释作者,默认值为麦扣。
AutoTrim:自动过滤空格,默认启用。
FixAllSpace:处理掉所有的空格,包括中间空格。默认false。
ColumnIndex:列索引,一般不建议设置。
导入结果(ImportResult):
Data:IList
导入的数据集合。 RowErrors:IList数据行错误。
HasError:bool是否存在导入错误。
Exception:异常信息
TemplateErrors:模板错误信息
Demo2-1 普通模板
生成模板
publicclassImportProductDto{///
///产品名称/// [ImporterHeader(Name = "产品名称")]public string Name { get; set; }//////产品代码/// [ImporterHeader(Name = "产品代码")]public string Code { get; set; }//////产品条码/// [ImporterHeader(Name = "产品条码")]public string BarCode { get; set; }
}
导入模板
Demo2-2 多数据类型
生成模板
publicclassImportProductDto{//////产品名称/// [ImporterHeader(Name = "产品名称")]public string Name { get; set; }//////产品代码/// [ImporterHeader(Name = "产品代码")]public string Code { get; set; }//////产品条码/// [ImporterHeader(Name = "产品条码")]public string BarCode { get; set; }//////客户Id/// [ImporterHeader(Name = "客户代码")]public long ClientId { get; set; }//////产品型号/// [ImporterHeader(Name = "产品型号")]public string Model { get; set; }//////申报价值/// [ImporterHeader(Name = "申报价值")]public double DeclareValue { get; set; }//////货币单位/// [ImporterHeader(Name = "货币单位")]public string CurrencyUnit { get; set; }//////品牌名称/// [ImporterHeader(Name = "品牌名称")]public string BrandName { get; set; }//////尺寸/// [ImporterHeader(Name = "尺寸(长x宽x高)")]public string Size { get; set; }//////重量/// [ImporterHeader(Name = "重量(KG)")]public double Weight { get; set; }//////类型/// [ImporterHeader(Name = "类型")]public ImporterProductType Type { get; set; }//////是否行/// [ImporterHeader(Name = "是否行")]public bool IsOk { get; set; }}
publicenumImporterProductType{[Display(Name="第一")]One,[Display(Name="第二")]Two}
导入模板
Demo2-3 数据验证
生成模板
必填项表头文本为红色
public class ImportProductDto{///<summary>/// 产品名称///summary>[ImporterHeader(Name = "产品名称",Description ="必填")][Required(ErrorMessage = "产品名称是必填的")]public string Name { get; set; }///<summary>/// 产品代码///summary>[ImporterHeader(Name = "产品代码", Description = "最大长度为8")][MaxLength(8,ErrorMessage = "产品代码最大长度为8")]public string Code { get; set; }///<summary>/// 产品条码///summary>[ImporterHeader(Name = "产品条码")][MaxLength(10, ErrorMessage = "产品条码最大长度为10")][RegularExpression(@"^\d*$", ErrorMessage = "产品条码只能是数字")]public string BarCode { get; set; }///<summary>/// 客户Id///summary>[ImporterHeader(Name = "客户代码")]public long ClientId { get; set; }///<summary>/// 产品型号///summary>[ImporterHeader(Name = "产品型号")]public string Model { get; set; }///<summary>/// 申报价值///summary>[ImporterHeader(Name = "申报价值")]public double DeclareValue { get; set; }///<summary>/// 货币单位///summary>[ImporterHeader(Name = "货币单位")]public string CurrencyUnit { get; set; }///<summary>/// 品牌名称///summary>[ImporterHeader(Name = "品牌名称")]public string BrandName { get; set; }///<summary>/// 尺寸///summary>[ImporterHeader(Name = "尺寸(长x宽x高)")]public string Size { get; set; }///<summary>/// 重量///summary>[ImporterHeader(Name = "重量(KG)")]public double Weight { get; set; }///<summary>/// 类型///summary>[ImporterHeader(Name = "类型")]public ImporterProductType Type { get; set; }///<summary>/// 是否行///summary>[ImporterHeader(Name = "是否行")]public bool IsOk { get; set; }}
publicenumImporterProductType{[Display(Name="第一")]One,[Display(Name="第二")]Two}
导入模板
Docker中使用
安装libgdiplus库,用于Excel导出RUN apt-get update && apt-get install -y libgdiplus libc6-devRUN ln -s /usr/lib/libgdiplus.so /usr/lib/gdiplus.dll
Dockerfile Demo
FROMmicrosoft/dotnet:2.2-aspnetcore-runtimeASbase安装libgdiplus库,用于Excel导出RUNapt-getupdate && apt-getinstall -y libgdiplus libc6-devRUN ln -s /usr/lib/libgdiplus.so /usr/lib/gdiplus.dllWORKDIR /appEXPOSE 80FROM microsoft/dotnet:2.2-sdkASbuildWORKDIR /srcCOPY ["src/web/Admin.Host/Admin.Host.csproj","src/web/Admin.Host/"]COPY["src/web/Admin.Web.Core/Admin.Web.Core.csproj","src/web/Admin.Web.Core/"]COPY["src/application/Admin.Application/Admin.Application.csproj","src/application/Admin.Application/"]COPY["src/core/Magicodes.Admin.Core/Magicodes.Admin.Core.csproj","src/core/Magicodes.Admin.Core/"]COPY["src/data/Magicodes.Admin.EntityFrameworkCore/Magicodes.Admin.EntityFrameworkCore.csproj","src/data/Magicodes.Admin.EntityFrameworkCore/"]COPY["src/core/Magicodes.Admin.Core.Custom/Magicodes.Admin.Core.Custom.csproj","src/core/Magicodes.Admin.Core.Custom/"]COPY["src/application/Admin.Application.Custom/Admin.Application.Custom.csproj","src/application/Admin.Application.Custom/"]RUNdotnet restore"src/web/Admin.Host/Admin.Host.csproj"COPY. .WORKDIR"/src/src/web/Admin.Host"RUNdotnet build"Admin.Host.csproj"-cRelease-o /appFROM buildASpublishRUN dotnet publish"Admin.Host.csproj"-cRelease-o /appFROM baseASfinalWORKDIR /appCOPY --from=publish /app .
ENTRYPOINT["dotnet","Magicodes.Admin.Web.Host.dll"]
转载是一种动力 分享是一种美德
如果喜欢作者的文章,请关注【麦扣聊技术】订阅号以便第一时间获得最新内容。本文版权归作者和湖南心莱信息科技有限公司共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。
文档官网:docs.xin-lai.com
QQ群:
编程交流群<85318032>
产品交流群<897857351>
声明:本文部分素材转载自互联网,如有侵权立即删除 。
2. 分享目的仅供大家学习和交流,您必须在下载后24小时内删除!
3. 不得使用于非法商业用途,不得违反国家法律。否则后果自负!
4. 本站提供的源码、模板、插件等等其他资源,都不包含技术服务请大家谅解!
5. 如有链接无法下载、失效或广告,请联系管理员处理!
6. 本站资源售价只是赞助,收取费用仅维持本站的日常运营所需!
7. 如遇到加密压缩包,请使用WINRAR解压,如遇到无法解压的请联系管理员!
8. 精力有限,不少源码未能详细测试(解密),不能分辨部分源码是病毒还是误报,所以没有进行任何修改,大家使用前请进行甄别
丞旭猿论坛
暂无评论内容