hi,你好!欢迎访问本站!登录
本站由网站地图腾讯云宝塔系统阿里云强势驱动
当前位置:首页 - 教程 - 杂谈 - 正文 君子好学,自强不息!

Magicodes.IE已支撑导出Word、Pdf和Html

2019-11-18杂谈搜奇网48°c
A+ A-

关于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 

    • 导出收条 

  • 导入支撑反复考证; 

  • 支撑单个数据模板导出,常用于导出收条、凭证等营业
  • 支撑动态列导出(基于DataTable),谢谢张善友(https://github.com/xin-lai/Magicodes.IE/pull/8)

相干官方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.10.30

  • 【Nuget】版本更新到1.4.0
  • 【导出】Excel导出支撑动态列导出(基于DataTable),谢谢张善友(https://github.com/xin-lai/Magicodes.IE/pull/8)

2019.10.22

  • 【Nuget】版本更新到1.3.7
  • 【导入】修复疏忽列的考证题目
  • 【导入】修改考证毛病信息,一行仅许可存在一条数据
  • 【导入】修复疏忽列在某些情况下能够激发的非常
  • 【导入】增加存在疏忽列的导入情况下的单元测试

2019.10.21

  • 【Nuget】版本更新到1.3.4
  • 【导入】支撑设置疏忽列,以便于在Dto定义数据列做处置惩罚或映照

2019.10.18

  • 【优化】优化.NET规范库2.1下鸠合转DataTable的机能
  • 【重构】多处IList修改成ICollection
  • 【完美】补充部份单元测试

2019.10.12

  • 【重构】重构HTML、PDF导出等逻辑,并修改IExporterByTemplate为:
    • Task ExportListByTemplate(IList dataItems, string htmlTemplate = null) where T : class;
    • Task ExportByTemplate(T data, string htmlTemplate = null) where T : class;
  • 【示例】增加收条导出的单元测试示例

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

平常导出 

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

导入特征(ImporterAttribute):

  • HeaderRowIndex:表头位置

导入列头特征(ImporterHeader):

  • Name:表头显现称号(不可为空)。
  • Description:表头增加解释。
  • Author:解释作者,默许值为“麦扣”。
  • AutoTrim:自动过滤空格,默许启用。
  • FixAllSpace:处置惩罚掉一切的空格,包含中心空格。默许false。
  • ColumnIndex:列索引,平常不发起设置。

导入效果(ImportResult):

  • Data:IList<T> 导入的数据鸠合。
  • RowErrors:IList 数据行毛病。
  • HasError:bool 是不是存在导入毛病。
  • Exception:非常信息
  • TemplateErrors:模板毛病信息

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中运用

  • 如果是运用Excel导出,则需装置libgdiplus库
# 装置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"]

 

  • 如果是运用Pdf导出,则需装置相干字体,如:
# 装置fontconfig库,用于Pdf导出
RUN apt-get update && apt-get install -y fontconfig
COPY /simsun.ttc /usr/share/fonts/simsun.ttc

 

  选择打赏方式
微信赞助

打赏

QQ钱包

打赏

支付宝赞助

打赏

  移步手机端
Magicodes.IE已支撑导出Word、Pdf和Html

1、打开你手机的二维码扫描APP
2、扫描左则的二维码
3、点击扫描获得的网址
4、可以在手机端阅读此文章
未定义标签

本文来源:搜奇网

本文地址:https://www.sou7.cn/282321.html

关注我们:微信搜索“搜奇网”添加我为好友

版权声明: 本文仅代表作者个人观点,与本站无关。其原创性以及文中陈述文字和内容未经本站证实,对本文以及其中全部或者部分内容、文字的真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。请记住本站网址https://www.sou7.cn/搜奇网。

发表评论

选填

必填

必填

选填

请拖动滑块解锁
>>