开源导入导出通用库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 = "",
- Name2 = "test",
- Name3 = "",
- Name4 = "",
- },
- new ExportTestData()
- {
- Name1 = "",
- Name2 = "test",
- Name3 = "",
- Name4 = "",
- }
- });
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 =,
- Text2 = "w萨达萨达萨达撒",
- Text3 = "sadsad打发打发士大夫的"
- },
- new ExportTestDataWithAttrs()
- {
- Text = "啊实打实大苏打撒",
- Name="啊实打实大苏打撒",
- Number =,
- Text2 = "w萨达萨达萨达撒",
- Text3 = "sadsad打发打发士大夫的"
- },
- new ExportTestDataWithAttrs()
- {
- Text = "啊实打实速度大苏打撒",
- Name="萨达萨达",
- Number =,
- Text2 = "突然他也让他人",
- Text3 = "sadsad打发打发士大夫的"
- },
- });
Demo1-3
列头处理或者多语言支持
- [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 =,
- Text2 = "w萨达萨达萨达撒",
- Text3 = "sadsad打发打发士大夫的"
- },
- new AttrsLocalizationTestData()
- {
- Text = "啊实打实大苏打撒",
- Name="啊实打实大苏打撒",
- Number =,
- Text2 = "w萨达萨达萨达撒",
- Text3 = "sadsad打发打发士大夫的"
- },
- new AttrsLocalizationTestData()
- {
- Text = "啊实打实速度大苏打撒",
- Name="萨达萨达",
- Number =,
- Text2 = "突然他也让他人",
- Text3 = "sadsad打发打发士大夫的"
- },
- });
导入 Demo
导入特性(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(,ErrorMessage = "产品代码最大长度为8")]
- public string Code { get; set; }
- /// <summary>
- /// 产品条码
- /// </summary>
- [ImporterHeader(Name = "产品条码")]
- [MaxLength(, 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
- 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发布的更多相关文章
- ASP.NET 开源导入导出库Magicodes.IE 完成Excel图片导入导出
Magicodes.IE Excel图片导入导出 为了更好的根据实际功能来迭代,从2.2的里程碑规划开始,我们将结合社区的建议和意见来进行迭代,您可以点此链接来提交您的意见和建议: https://g ...
- ASP.NET 开源导入导出库Magicodes.IE 完成Csv导入导出
Magicodes.IE Csv导入导出 说明 本章主要说明如何使用Magicodes.IE.Csv进行Csv导入导出. 主要步骤 1.安装包Magicodes.IE.Csv Install-Pack ...
- ASP.NET 开源导入导出库Magicodes.IE 多Sheet导入教程
多Sheet导入教程 说明 本教程主要说明如何使用Magicodes.IE.Excel完成多个Sheet数据的Excel导入. 要点 多个相同格式的Sheet数据导入 多个不同格式的Sheet数据导入 ...
- 开源导入导出库Magicodes.IE 多sheet导入教程
原文作者:tanyongzheng 多Sheet导入教程 说明 本教程主要说明如何使用Magicodes.IE.Excel完成多个Sheet数据的Excel导入. 要点 多个相同格式的Sheet数据导 ...
- .NET 开源导入导出库 Magicodes.IE 2.5发布
今天我们发布了2.5版本,这当然也离不开大家对Magicodes.IE的支持,今天我也是跟往常一样列举了该版本一些重要的更新内容. 当然也要说一下,在这个版本中我们设计了全新的LOGO Excel导出 ...
- Magicodes.IE 2.3重磅发布——.NET Core开源导入导出库
在2.3这一版本的更新中,我们迎来了众多的使用者.贡献者,在这个里程碑中我们也添加并修复了一些功能.对于新特点的功能我将在下面进行详细的描述,当然也欢迎更多的人可以加入进来,再或者也很期待大家来提is ...
- .NET Core开源导入导出库 Magicodes.IE 2.3发布
在2.3这一版本的更新中,我们迎来了众多的使用者.贡献者,在这个里程碑中我们也添加并修复了一些功能.对于新特点的功能我将在下面进行详细的描述,当然也欢迎更多的人可以加入进来,再或者也很期待大家来提is ...
- 开源导入导出库Magicodes.IE 导出教程
要点 导出特性 如何导出Excel表头 如何导出数据.如何进行数据的切割.如何使用筛选器 导出特性 ExporterAttribute Name: 名称(当前Sheet 名称) HeaderFontS ...
- ASP.NET 开源导入导出库Magicodes.IE 导出Pdf教程
基础教程之导出Pdf收据 说明 本教程主要说明如何使用Magicodes.IE.Pdf完成Pdf收据导出 要点 导出PDF数据 自定义PDF模板 导出单据 如何批量导出单据 导出特性 PdfExpor ...
随机推荐
- vscode导入已存在的vue.js工程
1.安装vue_cli 如果安装了npm,直接在命令行输入npm install -g vue-cli,安装在全局组件目录下 完成后,可以在命令测试下 2.导入工程 打开vscode-------&g ...
- 洛谷 P3628 [APIO2010]特别行动队
题意简述 将n个士兵分为若干组,每组连续,编号为i的士兵战斗力为xi 若i~j士兵为一组,该组初始战斗力为\( s = \sum\limits_{k = i}^{j}xk \),实际战斗力\(a * ...
- 【Python3爬虫】爬取美女图新姿势--Redis分布式爬虫初体验
一.写在前面 之前写的爬虫都是单机爬虫,还没有尝试过分布式爬虫,这次就是一个分布式爬虫的初体验.所谓分布式爬虫,就是要用多台电脑同时爬取数据,相比于单机爬虫,分布式爬虫的爬取速度更快,也能更好地应对I ...
- python历史背诵
一.python简介 python2:源代码不统一 有重复功能的代码 默认编码是ascii 没有中文 输出中文需要用头文件 #-*-coding=utf-8-*- 进行转换 py3:源代码统一 没有重 ...
- 完美解决迅雷极速版强制升级到迅雷X
虽然迅雷已死,但是还是软件还是有点点用的.废话不好多说,直接上解决办法: 1. 找到桌面的迅雷图标,右键选择打开文件位置; 2. 根据路径找到: 相对路径:Thunder Network\Thunde ...
- mysql 显示表名和表数量
SELECT count(*) FROM information_schema.TABLES WHERE TABLE_SCHEMA='dbname'; SELECT * FROM informatio ...
- 使用Makefile构建Docker
使用Makefile构建Docker 刚开始学习docker命令的时候,很喜欢一个字一个字敲,因为这样会记住命令.后来熟悉了之后,每次想要做一些操作的时候就不得不 重复的输入以前的命令.当切换一个项目 ...
- 18_init 函数的使用
1.init()函数是一个内置函数,在程序执行前会先执行init()函数,及在main()函数执行前执行 2.如果调用包里有init()函数,会先执行调用包的init()函数,在这执行本函数的init ...
- Web前端安全分析
随着互联网高速的发展,信息安全已经成为企业重点关注焦点之一,而前端又是引发安全问题的高危据点,所以,作为一个前端开发人员,需要了解前端的安全问题,以及如何去预防.修复安全漏洞. 一.XSSS攻击 1. ...
- Jmeter 从数据库查询多个字段,依次传给登录接口怎么实现?
问题背景: 博文“Jmeter 如何把数据库的数据依次获取作为参数传入下一个请求?附栗子”某天有人留言如下: 看了下当时写的文章,如果从数据库查询多个字段,依次传给登录接口,确实不能合理实现,所以,特 ...