开源导入导出通用库Magicodes.ExporterAndImporter发布
导入导出通用库
Magicodes.ExporterAndImporter为心莱团队封装的导入导出通用库,并且仍在跟随项目不断地打磨。
GitHub地址:
https://github.com/xin-lai/Magicodes.ExporterAndImporter
目录
特点
相关官方Nuget包
导出 Demo
普通导出
特性导出
列头处理或者多语言支持
导入Demo
普通模板
多数据类型
数据验证
Docker中使用
Dockerfile Demo
特点
封装导入导出业务,目前仅支持 Excel,有兴趣的小伙伴可以考虑支持 CSV 以及PDF或其他格式的导出
配置特性即可控制相关逻辑和显示结果,无需修改逻辑代码
推荐配合 导入导出DTO 使用
导出支持列头自定义处理以便支持多语言等场景
导出支持文本自定义过滤或处理
导入支持自动根据导入DTO生成导入模板及模板验证
导入支持数据验证逻辑
导入支持数据下拉选择
导入支持注释添加
相关官方Nuget包
导出 Demo
Demo1-1
普通导出
public class ExportTestData
{ public string Name1 { get; set; } public string Name2 { get; set; } public string Name3 { get; set; } public string Name4 { get; set; }
} var result = await Exporter.Export(filePath, new List<ExportTestData>()
{ new ExportTestData() { Name1 = "1", Name2 = "test", Name3 = "12", Name4 = "11", }, new ExportTestData() { Name1 = "1", Name2 = "test", Name3 = "12", Name4 = "11", }
});
Demo1-2
特性导出
[ExcelExporter(Name = "测试", TableStyle = "Light10")]public class ExportTestDataWithAttrs
{ [ExporterHeader(DisplayName = "加粗文本", IsBold = true)] public string Text { get; set; } [ExporterHeader(DisplayName = "普通文本")] public string Text2 { get; set; } [ExporterHeader(DisplayName = "忽略", IsIgnore = true)] public string Text3 { get; set; } [ExporterHeader(DisplayName = "数值", Format = "#,##0")] public double Number { get; set; } [ExporterHeader(DisplayName = "名称", IsAutoFit = true)] public string Name { get; set; }
} var result = await Exporter.Export(filePath, new List<ExportTestDataWithAttrs>() { new ExportTestDataWithAttrs() { Text = "啊实打实大苏打撒", Name="aa", Number =5000, Text2 = "w萨达萨达萨达撒", Text3 = "sadsad打发打发士大夫的" }, new ExportTestDataWithAttrs() { Text = "啊实打实大苏打撒", Name="啊实打实大苏打撒", Number =6000, Text2 = "w萨达萨达萨达撒", Text3 = "sadsad打发打发士大夫的" }, new ExportTestDataWithAttrs() { Text = "啊实打实速度大苏打撒", Name="萨达萨达", Number =6000, Text2 = "突然他也让他人", Text3 = "sadsad打发打发士大夫的" }, });
列头处理或者多语言支持
[ExcelExporter(Name = "测试", TableStyle = "Light10")]
public class AttrsLocalizationTestData
{ [ExporterHeader(DisplayName = "加粗文本", IsBold = true)] public string Text { get; set; } [ExporterHeader(DisplayName = "普通文本")] public string Text2 { get; set; } [ExporterHeader(DisplayName = "忽略", IsIgnore = true)] public string Text3 { get; set; } [ExporterHeader(DisplayName = "数值", Format = "#,##0")] public double Number { get; set; } [ExporterHeader(DisplayName = "名称", IsAutoFit = true)] public string Name { get; set; }
} ExcelBuilder.Create().WithLocalStringFunc((key) => { if (key.Contains("文本")) { return "Text"; } return "未知语言"; }).Build(); var filePath = Path.Combine(Directory.GetCurrentDirectory(), "testAttrsLocalization.xlsx"); if (File.Exists(filePath)) File.Delete(filePath); var result = await Exporter.Export(filePath, new List<AttrsLocalizationTestData>() { new AttrsLocalizationTestData() { Text = "啊实打实大苏打撒", Name="aa", Number =5000, Text2 = "w萨达萨达萨达撒", Text3 = "sadsad打发打发士大夫的" }, new AttrsLocalizationTestData() { Text = "啊实打实大苏打撒", Name="啊实打实大苏打撒", Number =6000, Text2 = "w萨达萨达萨达撒", Text3 = "sadsad打发打发士大夫的" }, new AttrsLocalizationTestData() { Text = "啊实打实速度大苏打撒", Name="萨达萨达", Number =6000, Text2 = "突然他也让他人", Text3 = "sadsad打发打发士大夫的" }, });
导入特性(ImporterHeader):
Name:string 表头显示名称(不可为空)。
Description:string 表头添加注释。
Author:string 注释作者,默认值为X.M。
导入结果(ImportModel<T>):
Data:IList<T> 导入的数据集合。
ValidationResults:IList<ValidationResultModel> 数据验证结果。
HasValidTemplate:bool 模板验证是否通过。
数据验证结果(ValidationResultModel):
Index:int 错误数据所在行。
Errors:IDictionary<string, string> 整个Excel错误集合。目前仅支持数据验证错误。
FieldErrors:IDictionary<string, string> 数据验证错误。
Demo2-1 普通模板
生成模板
public class ImportProductDto
{ /// <summary> /// 产品名称 /// </summary> [ImporterHeader(Name = "产品名称")] public string Name { get; set; } /// <summary> /// 产品代码 /// </summary> [ImporterHeader(Name = "产品代码")] public string Code { get; set; } /// <summary> /// 产品条码 /// </summary> [ImporterHeader(Name = "产品条码")] public string BarCode { get; set; } }
Demo2-2 多数据类型
生成模板
public class ImportProductDto
{ /// <summary> /// 产品名称 /// </summary> [ImporterHeader(Name = "产品名称")] public string Name { get; set; } /// <summary> /// 产品代码 /// </summary> [ImporterHeader(Name = "产品代码")] public string Code { get; set; } /// <summary> /// 产品条码 /// </summary> [ImporterHeader(Name = "产品条码")] 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; }
}
public enum ImporterProductType
{ [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; }
}
public enum ImporterProductType
{ [Display(Name = "第一")] One, [Display(Name = "第二")] Two }
Docker中使用
# 安装libgdiplus库,用于Excel导出
RUN apt-get update && apt-get install -y libgdiplus libc6-dev
RUN ln -s /usr/lib/libgdiplus.so /usr/lib/gdiplus.dll
Dockerfile Demo
FROM microsoft/dotnet:2.2-aspnetcore-runtime AS base
# 安装libgdiplus库,用于Excel导出
RUN apt-get update && apt-get install -y libgdiplus libc6-dev
RUN ln -s /usr/lib/libgdiplus.so /usr/lib/gdiplus.dll
WORKDIR /app
EXPOSE 80 FROM microsoft/dotnet:2.2-sdk AS build
WORKDIR /src
COPY ["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/"]
RUN dotnet restore "src/web/Admin.Host/Admin.Host.csproj"
COPY . .
WORKDIR "/src/src/web/Admin.Host"
RUN dotnet build "Admin.Host.csproj" -c Release -o /app FROM build AS publish
RUN dotnet publish "Admin.Host.csproj" -c Release -o /app FROM base AS final
WORKDIR /app
COPY --from=publish /app .
ENTRYPOINT ["dotnet", "Magicodes.Admin.Web.Host.dll"]
开源导入导出通用库Magicodes.ExporterAndImporter发布相关推荐
- ie如何导入html文件类型,Magicodes.IE: 导入导出通用库,支持Dto导入导出以及动态导出,支持Excel、Word、Pdf和Html。...
Magicodes.IE 导入导出通用库,支持Dto导入导出以及动态导出,支持Excel.Word.Pdf和Html. 疯狂的徽章 GitHub Azure DevOps Build Status: ...
- ASP.NET 开源导入导出库Magicodes.IE Docker中使用
更新历史 2019.02.13 [Nuget]版本更新到2.0.2 [导入]修复单列导入的Bug,单元测试"OneColumnImporter_Test".问题见(https:// ...
- ASP.NET 开源导入导出库Magicodes.IE 导出Pdf教程
基础教程之导出Pdf收据 说明 本教程主要说明如何使用Magicodes.IE.Pdf完成Pdf收据导出 要点 导出PDF数据 自定义PDF模板 导出单据 如何批量导出单据 导出特性 PdfExpor ...
- 开源导入导出库Magicodes.IE 多sheet导入教程
多Sheet导入教程说明 本教程主要说明如何使用Magicodes.IE.Excel完成多个Sheet数据的Excel导入. 要点 多个相同格式的Sheet数据导入 多个不同格式的Sheet数据导入 ...
- C++导入导出动态库
今天不明白为什么大家在写动态库的时候,都要用到 #ifdef @@@@API#else#define @@@@ __declspec(dllimport)#endif 为什么明明是导出动态库,还要用到 ...
- Java-Excel导入导出通用实现Demo(附源码Git地址)
说明:本工具适用大部分导入导出场景,花点时间搞懂怎么用了之后灰常方便,阅读本文前,建议下载源码后参考着阅读.源码地址:https://gitee.com/xwzhang1/excel-util.git ...
- Magicodes.IE 2.3重磅发布——.NET Core开源导入导出库
在2.3这一版本的更新中,我们迎来了众多的使用者.贡献者,在这个里程碑中我们也添加并修复了一些功能.对于新特点的功能我将在下面进行详细的描述,当然也欢迎更多的人可以加入进来,再或者也很期待大家来提is ...
- 开源库支付库Magicodes.Pay发布
Magicodes.Pay,是心莱科技团队提供的统一支付库,相关库均使用.NET标准库编写,支持.NET Framework以及.NET Core.目前支持以下支付方式和功能: 支付宝APP支付 支付 ...
- Magicodes.IE之导入导出筛选器
总体设计 Magicodes.IE是一个导入导出通用库,支持Dto导入导出以及动态导出,支持Excel.Word.Pdf.Csv和Html.在本篇教程,笔者将讲述如何使用Magicodes.IE的导入 ...
最新文章
- spring 测试类test测试方法
- [导入]ZT笑到内伤:史上最雷,最爆寒的电影字幕
- (四)Amazon Lightsail 部署LAMP应用程序之扩展PHP前端
- python popen函数讲解_Python常用模块函数代码汇总解析
- 防火墙技术指标---并发连接数/吞吐量
- HDU-2112-HDU Today
- 汇编指令push,mov,call,pop,leave,ret建立与释放栈的过程
- NTP授时系统(GPS时钟产品-GPS授时产品)
- ini更改文件夹图标
- 《Linux运维总结:SVN提示Node remains in conflict解决办法》
- [附源码]java毕业设计网吧购物系统
- 电容的安装电感的计算公式
- 转载:解决服务器上 w3wp.exe 和 sqlserver.exe 的内存占用率居高不下的方案
- 极度的坦诚就是无坚不摧
- 学习ES6 The Dope Way Part I:const,let&var
- 微信公众号对接淘宝客系统,淘口令解析
- 投资理财-朋友榕的经历
- Windows10设置任务栏透明化
- ATMEL (爱特梅尔)公司EEPROM命名规则
- MMDVM小盒子更新屏幕固件