开源导入导出通用库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打发打发士大夫的"
            },

        });
 

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 =5000,
                Text2 = "w萨达萨达萨达撒",
                Text3 = "sadsad打发打发士大夫的"
            },
           new AttrsLocalizationTestData()
            {
                Text = "啊实打实大苏打撒",
                Name="啊实打实大苏打撒",
                Number =6000,
                Text2 = "w萨达萨达萨达撒",
                Text3 = "sadsad打发打发士大夫的"
            },
           new AttrsLocalizationTestData()
            {
                Text = "啊实打实速度大苏打撒",
                Name="萨达萨达",
                Number =6000,
                Text2 = "突然他也让他人",
                Text3 = "sadsad打发打发士大夫的"
            },

        });

导入 Demo

导入特性(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"]

原文地址:https://www.cnblogs.com/codelove/p/11549867.html

时间: 2024-11-08 18:16:32

开源导入导出通用库Magicodes.ExporterAndImporter发布的相关文章

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

基础教程之导出Pdf收据 说明 本教程主要说明如何使用Magicodes.IE.Pdf完成Pdf收据导出 要点 导出PDF数据 自定义PDF模板 导出单据 如何批量导出单据 导出特性 PdfExporterAttribute Orientation: 方向(横向或纵向) PaperKind: 纸张类型(默认A4) IsWriteHtml: 是否输出HTML模板 ExporterHeaderAttribute DisplayName: 显示名称 主要步骤 1.安装包Magicodes.IE.Pdf

深蓝词库转换2.8发布&mdash;&mdash;支持微软拼音自学习词库导入导出

Win10自带的微软拼音一直以来有不少忠粉,但是词库导入导出一直是一个问题,因为微软拼音的自学习词库是自有格式,没有对外开放,所以一直没有解决.只能通过自定义短语的形式导入其他输入法的词库到微软拼音中. 最近经过网友的提醒,再自我研究了几晚上,终于把微软拼音的自学习词库导入导出解决了. 本次2.8版本的发布主要包含了以下更新: 微软拼音自学习词库的导入和导出. 转换词库时如果某些词条无法转换,通过错误窗口提示错误信息. 增强了微软拼音自定义短语对多种双拼方案的支持. 修改持续集成的实现方式,使用

利用通用权限管理系统底层解决数据从不同库的导入导出问题

/// <summary> /// 同步地区的处理 /// Base_Area表从Oracle同步到MySQL数据库 /// </summary> /// <returns></returns> public ActionResult SyncAreaFromOracleToMySql() { BaseResult baseResult = new BaseResult(); string currentId = string.Empty; try { Ba

利用反射实现通用的excel导入导出

如果一个项目中存在多种信息的导入导出,为了简化代码,就需要用反射实现通用的excel导入导出 实例代码如下: 1.创建一个 Book类,并编写set和get方法 1 package com.bean; 2 3 public class Book { 4 private int id; 5 private String name; 6 private String type; 7 // public int a; 8 9 public String getType() { 10 System.ou

功能齐全、效率一流的免费开源数据库导入导出工具(c#开发,支持SQL server、SQLite、ACCESS三种数据库),每月借此处理数据5G以上

软件名:DataPie 功能:支持SQL server.SQLite.ACCESS数据库的导入.导出.存储过程调用,支持EXCEL2007.EXCEL2003.ACCESS2007. CSV文件导入数据库,支持EXCEL.CSV.ZIP.ACCESS文件方式导出,支持数据拆分导出及自定义SQL查询与导出. 开发背景:作者从事财务管理工作,主要是出具集团的内部财务报表,随着公司精细化管理的需求,管理报表的数据量急速增长, 依赖EXCEL加工处理数据已经变得极为困难,因此团队全面转向关系数据库进行数

一个基于POI的通用excel导入导出工具类的简单实现及使用方法

前言: 最近PM来了一个需求,简单来说就是在录入数据时一条一条插入到系统显得非常麻烦,让我实现一个直接通过excel导入的方法一次性录入所有数据.网上关于excel导入导出的例子很多,但大多相互借鉴.经过思考,认为一百个客户在录入excel的时候,就会有一百个格式版本,所以在实现这个功能之前,所以要统一excel的格式.于是提供了一个通用excel模版的下载功能.当所有客户用模版录入好数据再上传到系统,后端对excel进行解析,然后再持久化到数据库. 概述: 此工具类的几大特点 1.基本导入导出

快捷方便的Excel导入导出工具 Easy-Xls 1.0 版本发布

EasyXls 使用EasyXls可以使你很方便的操作Excel.本项目目的是解决简单的(不带任何样式)xls文件的导入导出. 处理XML时由于使用了JAXB,所以需要使用jdk1.6u14以上版本.  JAXB处理中文xml时容易出现乱码,因此这里限制XML为GBK编码,在Windwos中的保存格式为ANSI即可. 项目地址:http://git.oschina.net/free/EasyXls EasyXls特点 支持xls转换为List<Pojo>对象 支持xls转换为List<M

C#导入导出数据到Excel的通用类代码

Excel文件导入导出,需引用Microsoft Excel 11.0 Object Library /////////////////////////////////////////////////////////////////////////// //Purpose:Excel文件导入导出,需引用Microsoft Excel 11.0 Object Library //Author: Dangmy //Date: 2007-03-09 //Version: 1.0 ///////////

使用NPOI库导入导出EXCEL

一.EXCEL  导入(Excel 导入导出实际项目中会被封装成**Helper 本示例只对简单功能做演示) NPOI 包引用 视图view @{ ViewBag.Title = "NPOIExcel"; } <h2>NPOIExcel</h2> <form action="@Url.Action("NPOIInport", "Home")" method="post" enc