导入导出通用库

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):

  • Namestring 表头显示名称(不可为空)。

  • Descriptionstring 表头添加注释。

  • Authorstring 注释作者,默认值为X.M。

导入结果(ImportModel<T>):

  • DataIList<T>  导入的数据集合。

  • ValidationResultsIList<ValidationResultModel> 数据验证结果。

  • HasValidTemplatebool 模板验证是否通过。

数据验证结果(ValidationResultModel):

  • Indexint  错误数据所在行。

  • ErrorsIDictionary<string, string> 整个Excel错误集合。目前仅支持数据验证错误。

  • FieldErrorsIDictionary<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发布相关推荐

  1. ie如何导入html文件类型,Magicodes.IE: 导入导出通用库,支持Dto导入导出以及动态导出,支持Excel、Word、Pdf和Html。...

    Magicodes.IE 导入导出通用库,支持Dto导入导出以及动态导出,支持Excel.Word.Pdf和Html. 疯狂的徽章 GitHub Azure DevOps Build Status: ...

  2. ASP.NET 开源导入导出库Magicodes.IE Docker中使用

    更新历史 2019.02.13 [Nuget]版本更新到2.0.2 [导入]修复单列导入的Bug,单元测试"OneColumnImporter_Test".问题见(https:// ...

  3. ASP.NET 开源导入导出库Magicodes.IE 导出Pdf教程

    基础教程之导出Pdf收据 说明 本教程主要说明如何使用Magicodes.IE.Pdf完成Pdf收据导出 要点 导出PDF数据 自定义PDF模板 导出单据 如何批量导出单据 导出特性 PdfExpor ...

  4. 开源导入导出库Magicodes.IE 多sheet导入教程

    多Sheet导入教程说明 本教程主要说明如何使用Magicodes.IE.Excel完成多个Sheet数据的Excel导入. 要点 多个相同格式的Sheet数据导入 多个不同格式的Sheet数据导入 ...

  5. C++导入导出动态库

    今天不明白为什么大家在写动态库的时候,都要用到 #ifdef @@@@API#else#define @@@@ __declspec(dllimport)#endif 为什么明明是导出动态库,还要用到 ...

  6. Java-Excel导入导出通用实现Demo(附源码Git地址)

    说明:本工具适用大部分导入导出场景,花点时间搞懂怎么用了之后灰常方便,阅读本文前,建议下载源码后参考着阅读.源码地址:https://gitee.com/xwzhang1/excel-util.git ...

  7. Magicodes.IE 2.3重磅发布——.NET Core开源导入导出库

    在2.3这一版本的更新中,我们迎来了众多的使用者.贡献者,在这个里程碑中我们也添加并修复了一些功能.对于新特点的功能我将在下面进行详细的描述,当然也欢迎更多的人可以加入进来,再或者也很期待大家来提is ...

  8. 开源库支付库Magicodes.Pay发布

    Magicodes.Pay,是心莱科技团队提供的统一支付库,相关库均使用.NET标准库编写,支持.NET Framework以及.NET Core.目前支持以下支付方式和功能: 支付宝APP支付 支付 ...

  9. Magicodes.IE之导入导出筛选器

    总体设计 Magicodes.IE是一个导入导出通用库,支持Dto导入导出以及动态导出,支持Excel.Word.Pdf.Csv和Html.在本篇教程,笔者将讲述如何使用Magicodes.IE的导入 ...

最新文章

  1. spring 测试类test测试方法
  2. [导入]ZT笑到内伤:史上最雷,最爆寒的电影字幕
  3. (四)Amazon Lightsail 部署LAMP应用程序之扩展PHP前端
  4. python popen函数讲解_Python常用模块函数代码汇总解析
  5. 防火墙技术指标---并发连接数/吞吐量
  6. HDU-2112-HDU Today
  7. 汇编指令push,mov,call,pop,leave,ret建立与释放栈的过程
  8. NTP授时系统(GPS时钟产品-GPS授时产品)
  9. ini更改文件夹图标
  10. 《Linux运维总结:SVN提示Node remains in conflict解决办法》
  11. [附源码]java毕业设计网吧购物系统
  12. 电容的安装电感的计算公式
  13. 转载:解决服务器上 w3wp.exe 和 sqlserver.exe 的内存占用率居高不下的方案
  14. 极度的坦诚就是无坚不摧
  15. 学习ES6 The Dope Way Part I:const,let&var
  16. 微信公众号对接淘宝客系统,淘口令解析
  17. 投资理财-朋友榕的经历
  18. Windows10设置任务栏透明化
  19. ATMEL (爱特梅尔)公司EEPROM命名规则
  20. MMDVM小盒子更新屏幕固件

热门文章

  1. 【Java】简体中文、繁体中文转换
  2. win10 通过设置加快电脑网速
  3. 【听】菊与刀,日本人的奇葩三观及变态精神
  4. 中专计算机应用基础课课程标准,计算机应用基础课程标准
  5. 2021年最新PyCharm使用教程 --- 1、PyCharm的下载与安装
  6. 硕士毕业的他做生鲜电商网站,日流水3万元
  7. 数字信号处理—傅里叶变换
  8. Spring Security授权_注解设置访问控制
  9. 海底捞将推鑫飞智能餐桌 再次颠覆餐饮业
  10. win10+cuda11.0+vs2019安装教程