zoukankan      html  css  js  c++  java
  • .net framework导出Excel、Word、Pdf和Html:Magicodes.IE的简单使用

     

    这里介绍一个很方便实用的库:Magicodes.IE,导入导出通用库,通过导入导出DTO模型来控制导入和导出,支持Excel、Word、Pdf和Html。

    本篇介绍基本使用方法,使用方法非常简单,不需要学习npoi的应用。

    在vs中,新建一个控制台项目(测试用,可以建其他项目,比如asp.net mvc ,winform都可以)

    右键单击项目中的引用,选择nuget包管理,导入nuget包:这里只使用excel,所以只导入了Magicodes.IE.Excel

    1.  
      Magicodes.IE.Core
    2.  
      Magicodes.IE.Excel
    3.  
      Magicodes.IE.Pdf
    4.  
      Magicodes.IE.Word
    5.  
      Magicodes.IE.Html


    1. 首先准备好一个类,这个类包含需要导出的属性一、导出数据

    1.  
      public class Question
    2.  
      {
    3.  
      public string Title { get; set; }
    4.  
      public string Content { get; set; }
    5.  
      public string Options { get; set; }
    6.  
      public string Answer { get; set; }
    7.  
      }

    2.导出方法

    这里如果new List<Question>()不设置数据,就可以直接导出Question的模板

    1.  
      static void ExportQuestion()
    2.  
      {
    3.  
      //这里需要补充,如果路径不存在要创建路径,否则会报错
    4.  
      var filePath = Path.Combine(Directory.GetCurrentDirectory(), "TestFiles", "question.xlsx");
    5.  
      var exporter = new ExcelExporter();
    6.  
      var result = exporter.Export(filePath, new List<Question>() {
    7.  
      new Question()
    8.  
      {
    9.  
      Title = "Question1",
    10.  
      Content = "Question content 1",
    11.  
      Options = "A:option1,B:option2,C:option3,D:option4",
    12.  
      Answer = "A",
    13.  
      },
    14.  
      new Question()
    15.  
      {
    16.  
      Title = "Question2",
    17.  
      Content = "Question content 2",
    18.  
      Options = "A:option11,B:option22,C:option33,D:option43",
    19.  
      Answer = "B",
    20.  
      }
    21.  
      });
    22.  
      }

    其他方法参考下代码吧:

    1.  
      using Magicodes.ExporterAndImporter.Core;
    2.  
      using Magicodes.ExporterAndImporter.Excel;
    3.  
      using Magicodes.ExporterAndImporter.Excel.Builder;
    4.  
      using System;
    5.  
      using System.Collections.Generic;
    6.  
      using System.ComponentModel.DataAnnotations;
    7.  
      using System.IO;
    8.  
      using System.Text;
    9.  
      using System.Threading.Tasks;
    10.  
       
    11.  
      namespace Test
    12.  
      {
    13.  
      class Program
    14.  
      {
    15.  
      //static void Main(string[] args)
    16.  
      static async Task Main(string[] args)
    17.  
      {
    18.  
      await Import3();
    19.  
      Console.WriteLine("Hello World!");
    20.  
      }
    21.  
       
    22.  
      #region 导出excel demo
    23.  
       
    24.  
      /// <summary>
    25.  
      /// 导出excel测试:excel1
    26.  
      /// </summary>
    27.  
      static void Demo1()
    28.  
      {
    29.  
      //这里需要补充,如果路径不存在要创建路径,否则会报错
    30.  
      var filePath = Path.Combine(Directory.GetCurrentDirectory(), "TestFiles", "demo1.xlsx");
    31.  
      var exporter = new ExcelExporter();
    32.  
      var result = exporter.Export(filePath, new List<ExportTestData>() {
    33.  
      new ExportTestData()
    34.  
      {
    35.  
      Name1 = "1",
    36.  
      Name2 = "test",
    37.  
      Name3 = "12",
    38.  
      Name4 = "11",
    39.  
      },
    40.  
      new ExportTestData()
    41.  
      {
    42.  
      Name1 = "1",
    43.  
      Name2 = "test",
    44.  
      Name3 = "12",
    45.  
      Name4 = "11",
    46.  
      }
    47.  
      });
    48.  
      }
    49.  
       
    50.  
      static void ExportQuestion()
    51.  
      {
    52.  
      //这里需要补充,如果路径不存在要创建路径,否则会报错
    53.  
      var filePath = Path.Combine(Directory.GetCurrentDirectory(), "TestFiles", "question.xlsx");
    54.  
      var exporter = new ExcelExporter();
    55.  
      var result = exporter.Export(filePath, new List<Question>() {
    56.  
      new Question()
    57.  
      {
    58.  
      Title = "Question1",
    59.  
      Content = "Question content 1",
    60.  
      Options = "A:option1,B:option2,C:option3,D:option4",
    61.  
      Answer = "A",
    62.  
      },
    63.  
      new Question()
    64.  
      {
    65.  
      Title = "Question2",
    66.  
      Content = "Question content 2",
    67.  
      Options = "A:option11,B:option22,C:option33,D:option43",
    68.  
      Answer = "B",
    69.  
      }
    70.  
      });
    71.  
      }
    72.  
       
    73.  
      /// <summary>
    74.  
      /// 导出空模板测试:excel11
    75.  
      /// </summary>
    76.  
      static void Demo11()
    77.  
      {
    78.  
      //这里需要补充,如果路径不存在要创建路径,否则会报错
    79.  
      var filePath = Path.Combine(Directory.GetCurrentDirectory(), "TestFiles", "ImportProduct2Dto.xlsx");
    80.  
      var exporter = new ExcelExporter();
    81.  
      var result = exporter.Export(filePath, new List<ImportProduct2Dto>());
    82.  
      }
    83.  
       
    84.  
       
    85.  
      /// <summary>
    86.  
      /// 利用特性导出excel2
    87.  
      /// </summary>
    88.  
      static void Demo2()
    89.  
      {
    90.  
      var filePath = Path.Combine(Directory.GetCurrentDirectory(), "TestFiles", "demo2.xlsx");
    91.  
      ExcelExporter exporter = new ExcelExporter();
    92.  
      var result = exporter.Export(filePath, new List<ExportTestDataWithAttrs>()
    93.  
      {
    94.  
      new ExportTestDataWithAttrs()
    95.  
      {
    96.  
      Text1 = "啊实打实大苏打撒",
    97.  
      Name="aa",
    98.  
      Number =5000,
    99.  
      Text2 = "w萨达萨达萨达撒",
    100.  
      Text3 = "sadsad打发打发士大夫的"
    101.  
      },
    102.  
      new ExportTestDataWithAttrs()
    103.  
      {
    104.  
      Text1 = "啊实打实大苏打撒",
    105.  
      Name="啊实打实大苏打撒",
    106.  
      Number =6000,
    107.  
      Text2 = "w萨达萨达萨达撒",
    108.  
      Text3 = "sadsad打发打发士大夫的"
    109.  
      },
    110.  
      new ExportTestDataWithAttrs()
    111.  
      {
    112.  
      Text1 = "啊实打实速度大苏打撒",
    113.  
      Name="萨达萨达",
    114.  
      Number =6000,
    115.  
      Text2 = "突然他也让他人",
    116.  
      Text3 = "sadsad打发打发士大夫的"
    117.  
      },
    118.  
      });
    119.  
      }
    120.  
       
    121.  
      /// <summary>
    122.  
      /// 列头处理或者多语言支持测试
    123.  
      /// </summary>
    124.  
      static void Demo3()
    125.  
      {
    126.  
      var filePath = Path.Combine(Directory.GetCurrentDirectory(), "TestFiles","testAttrsLocalization.xlsx");
    127.  
      if (File.Exists(filePath)) File.Delete(filePath);
    128.  
      var exporter = new ExcelExporter();
    129.  
      ExcelBuilder.Create().WithColumnHeaderStringFunc((key) =>
    130.  
      {
    131.  
      if (key.Contains("文本"))
    132.  
      {
    133.  
      return "Text";
    134.  
      }
    135.  
      return "未知语言";
    136.  
      }).Build();
    137.  
      var result = exporter.Export(filePath, new List<AttrsLocalizationTestData>()
    138.  
      {
    139.  
      new AttrsLocalizationTestData()
    140.  
      {
    141.  
      Text = "啊实打实大苏打撒",
    142.  
      Name="aa",
    143.  
      Number =5000,
    144.  
      Text2 = "w萨达萨达萨达撒",
    145.  
      Text3 = "sadsad打发打发士大夫的"
    146.  
      },
    147.  
      new AttrsLocalizationTestData()
    148.  
      {
    149.  
      Text = "啊实打实大苏打撒",
    150.  
      Name="啊实打实大苏打撒",
    151.  
      Number =6000,
    152.  
      Text2 = "w萨达萨达萨达撒",
    153.  
      Text3 = "sadsad打发打发士大夫的"
    154.  
      },
    155.  
      new AttrsLocalizationTestData()
    156.  
      {
    157.  
      Text = "啊实打实速度大苏打撒",
    158.  
      Name="萨达萨达",
    159.  
      Number =6000,
    160.  
      Text2 = "突然他也让他人",
    161.  
      Text3 = "sadsad打发打发士大夫的"
    162.  
      },
    163.  
      });
    164.  
      }
    165.  
       
    166.  
      #endregion
    167.  
       
    168.  
      /// <summary>
    169.  
      /// 从excel导入数据测试1
    170.  
      /// </summary>
    171.  
      /// <returns></returns>
    172.  
      private static async Task Import1()
    173.  
      {
    174.  
      var importer = new ExcelImporter();
    175.  
      var importResult = await importer.Import<ImportProductDto>(Path.Combine(Directory.GetCurrentDirectory(), "TestFiles", "importer1.xlsx"));
    176.  
      foreach (var item in importResult.Data)
    177.  
      {
    178.  
      Console.WriteLine(item.Name+"-"+item.Code+"-"+item.BarCode);
    179.  
      }
    180.  
      }
    181.  
       
    182.  
      /// <summary>
    183.  
      /// 导入带有枚举值的数据
    184.  
      /// </summary>
    185.  
      /// <returns></returns>
    186.  
      private static async Task Import2()
    187.  
      {
    188.  
      var importer = new ExcelImporter();
    189.  
      var importResult = await importer.Import<ImportProduct2Dto>(Path.Combine(Directory.GetCurrentDirectory(), "TestFiles", "ImportProduct2Dto.xlsx"));
    190.  
      foreach (var item in importResult.Data)
    191.  
      {
    192.  
      Console.WriteLine(item.Name + "-" + item.Code + "-" + item.BarCode+"-"+item.Type.ToString());
    193.  
      }
    194.  
      }
    195.  
       
    196.  
      /// <summary>
    197.  
      /// 导入数据验证
    198.  
      /// </summary>
    199.  
      /// <returns></returns>
    200.  
      private static async Task Import3()
    201.  
      {
    202.  
      var importer = new ExcelImporter();
    203.  
      var importResult = await importer.Import<ImportProduct3Dto>(Path.Combine(Directory.GetCurrentDirectory(), "TestFiles", "ImportProduct2Dto.xlsx"));
    204.  
      if (importResult.HasError)
    205.  
      {
    206.  
      StringBuilder stringBuilder = new StringBuilder();
    207.  
      foreach (var item in importResult.RowErrors)
    208.  
      {
    209.  
      stringBuilder.AppendLine("出错行数:" + item.RowIndex);
    210.  
      foreach (var fielderror in item.FieldErrors)
    211.  
      {
    212.  
      stringBuilder.AppendLine(" 出错列:" + fielderror.Key+" 出错原因:"+fielderror.Value);
    213.  
      }
    214.  
      }
    215.  
      Console.WriteLine(stringBuilder.ToString());
    216.  
      }
    217.  
      else
    218.  
      {
    219.  
      foreach (var item in importResult.Data)
    220.  
      {
    221.  
      Console.WriteLine(item.Name + "-" + item.Code + "-" + item.BarCode + "-" + item.Type.ToString());
    222.  
      }
    223.  
      }
    224.  
       
    225.  
      }
    226.  
       
    227.  
       
    228.  
      }
    229.  
       
    230.  
      #region 导出excel demo class
    231.  
      public class ExportTestData
    232.  
      {
    233.  
      public string Name1 { get; set; }
    234.  
      public string Name2 { get; set; }
    235.  
      public string Name3 { get; set; }
    236.  
      public string Name4 { get; set; }
    237.  
      }
    238.  
       
    239.  
      public class Question
    240.  
      {
    241.  
      public string Title { get; set; }
    242.  
      public string Content { get; set; }
    243.  
      public string Options { get; set; }
    244.  
      public string Answer { get; set; }
    245.  
      }
    246.  
       
    247.  
      /// <summary>
    248.  
      /// 特性导出Excel
    249.  
      /// </summary>
    250.  
      [ExcelExporter(Name ="测试",TableStyle ="Light10")]
    251.  
      public class ExportTestDataWithAttrs
    252.  
      {
    253.  
      [ExporterHeader(DisplayName="加粗文本",IsBold=true)]
    254.  
      public string Text1 { get; set; }
    255.  
       
    256.  
      [ExporterHeader(DisplayName ="普通文本")]
    257.  
      public string Text2 { get; set; }
    258.  
       
    259.  
      [ExporterHeader(DisplayName = "忽略", IsIgnore = true)]
    260.  
      public string Text3 { get; set; }
    261.  
       
    262.  
      [ExporterHeader(DisplayName = "数值", Format = "#,##0")]
    263.  
      public double Number { get; set; }
    264.  
       
    265.  
      [ExporterHeader(DisplayName = "名称", IsAutoFit = true)]
    266.  
      public string Name { get; set; }
    267.  
       
    268.  
      }
    269.  
       
    270.  
      /// <summary>
    271.  
      /// 列头处理或者多语言支持
    272.  
      /// </summary>
    273.  
      [ExcelExporter(Name = "测试", TableStyle = "Light10")]
    274.  
      public class AttrsLocalizationTestData
    275.  
      {
    276.  
      [ExporterHeader(DisplayName = "加粗文本", IsBold = true)]
    277.  
      public string Text { get; set; }
    278.  
       
    279.  
      [ExporterHeader(DisplayName = "普通文本")]
    280.  
      public string Text2 { get; set; }
    281.  
       
    282.  
      [ExporterHeader(DisplayName = "忽略", IsIgnore = true)]
    283.  
      public string Text3 { get; set; }
    284.  
       
    285.  
      [ExporterHeader(DisplayName = "数值", Format = "#,##0")]
    286.  
      public double Number { get; set; }
    287.  
       
    288.  
      [ExporterHeader(DisplayName = "名称", IsAutoFit = true)]
    289.  
      public string Name { get; set; }
    290.  
      }
    291.  
       
    292.  
      #endregion
    293.  
       
    294.  
      /// <summary>
    295.  
      /// 从excel导入数据 dto
    296.  
      /// </summary>
    297.  
      public class ImportProductDto
    298.  
      {
    299.  
      /// <summary>
    300.  
      /// 产品名称
    301.  
      /// </summary>
    302.  
      [ImporterHeader(Name = "产品名称")]
    303.  
      public string Name { get; set; }
    304.  
      /// <summary>
    305.  
      /// 产品代码
    306.  
      /// </summary>
    307.  
      [ImporterHeader(Name = "产品代码")]
    308.  
      public string Code { get; set; }
    309.  
      /// <summary>
    310.  
      /// 产品条码
    311.  
      /// </summary>
    312.  
      [ImporterHeader(Name = "产品条码")]
    313.  
      public string BarCode { get; set; }
    314.  
      }
    315.  
       
    316.  
      [ExcelExporter(Name = "测试1", TableStyle = "Light10")]
    317.  
      public class ImportProduct2Dto
    318.  
      {
    319.  
      /// <summary>
    320.  
      /// 产品名称
    321.  
      /// </summary>
    322.  
      [ImporterHeader(Name = "产品名称")]
    323.  
      [ExporterHeader(DisplayName = "产品名称")]
    324.  
      public string Name { get; set; }
    325.  
      /// <summary>
    326.  
      /// 产品代码
    327.  
      /// </summary>
    328.  
      [ImporterHeader(Name = "产品代码")]
    329.  
      [ExporterHeader(DisplayName = "产品代码")]
    330.  
      public string Code { get; set; }
    331.  
      /// <summary>
    332.  
      /// 产品条码
    333.  
      /// </summary>
    334.  
      [ImporterHeader(Name = "产品条码")]
    335.  
      [ExporterHeader(DisplayName = "产品条码")]
    336.  
      public string BarCode { get; set; }
    337.  
      /// <summary>
    338.  
      /// 客户Id
    339.  
      /// </summary>
    340.  
      [ImporterHeader(Name = "客户代码")]
    341.  
      [ExporterHeader(DisplayName = "客户代码")]
    342.  
      public long ClientId { get; set; }
    343.  
      /// <summary>
    344.  
      /// 产品型号
    345.  
      /// </summary>
    346.  
      [ImporterHeader(Name = "产品型号")]
    347.  
      [ExporterHeader(DisplayName = "产品型号")]
    348.  
      public string Model { get; set; }
    349.  
      /// <summary>
    350.  
      /// 申报价值
    351.  
      /// </summary>
    352.  
      [ImporterHeader(Name = "申报价值")]
    353.  
      [ExporterHeader(DisplayName = "申报价值")]
    354.  
      public double DeclareValue { get; set; }
    355.  
      /// <summary>
    356.  
      /// 货币单位
    357.  
      /// </summary>
    358.  
      [ImporterHeader(Name = "货币单位")]
    359.  
      [ExporterHeader(DisplayName = "货币单位")]
    360.  
      public string CurrencyUnit { get; set; }
    361.  
      /// <summary>
    362.  
      /// 品牌名称
    363.  
      /// </summary>
    364.  
      [ImporterHeader(Name = "品牌名称")]
    365.  
      [ExporterHeader(DisplayName = "品牌名称")]
    366.  
      public string BrandName { get; set; }
    367.  
      /// <summary>
    368.  
      /// 尺寸
    369.  
      /// </summary>
    370.  
      [ImporterHeader(Name = "尺寸(长x宽x高)")]
    371.  
      [ExporterHeader(DisplayName = "尺寸(长x宽x高)")]
    372.  
      public string Size { get; set; }
    373.  
      /// <summary>
    374.  
      /// 重量
    375.  
      /// </summary>
    376.  
      [ImporterHeader(Name = "重量(KG)")]
    377.  
      [ExporterHeader(DisplayName = "重量(KG)")]
    378.  
      public double Weight { get; set; }
    379.  
       
    380.  
      /// <summary>
    381.  
      /// 类型
    382.  
      /// </summary>
    383.  
      [ImporterHeader(Name = "类型")]
    384.  
      [ExporterHeader(DisplayName = "类型")]
    385.  
      public ImporterProductType Type { get; set; }
    386.  
       
    387.  
      /// <summary>
    388.  
      /// 是否行
    389.  
      /// </summary>
    390.  
      [ImporterHeader(Name = "是否行")]
    391.  
      [ExporterHeader(DisplayName = "是否行")]
    392.  
      public bool IsOk { get; set; }
    393.  
      }
    394.  
       
    395.  
       
    396.  
      public class ImportProduct3Dto
    397.  
      {
    398.  
      /// <summary>
    399.  
      /// 产品名称
    400.  
      /// </summary>
    401.  
      [ImporterHeader(Name = "产品名称", Description = "必填")]
    402.  
      [Required(ErrorMessage = "产品名称是必填的")]
    403.  
      public string Name { get; set; }
    404.  
      /// <summary>
    405.  
      /// 产品代码
    406.  
      /// </summary>
    407.  
      [ImporterHeader(Name = "产品代码", Description = "最大长度为8")]
    408.  
      [MaxLength(8, ErrorMessage = "产品代码最大长度为8")]
    409.  
      public string Code { get; set; }
    410.  
      /// <summary>
    411.  
      /// 产品条码
    412.  
      /// </summary>
    413.  
      [ImporterHeader(Name = "产品条码")]
    414.  
      [MaxLength(10, ErrorMessage = "产品条码最大长度为10")]
    415.  
      [RegularExpression(@"^d*$", ErrorMessage = "产品条码只能是数字")]
    416.  
      public string BarCode { get; set; }
    417.  
      /// <summary>
    418.  
      /// 客户Id
    419.  
      /// </summary>
    420.  
      [ImporterHeader(Name = "客户代码")]
    421.  
      public long ClientId { get; set; }
    422.  
      /// <summary>
    423.  
      /// 产品型号
    424.  
      /// </summary>
    425.  
      [ImporterHeader(Name = "产品型号")]
    426.  
      public string Model { get; set; }
    427.  
      /// <summary>
    428.  
      /// 申报价值
    429.  
      /// </summary>
    430.  
      [ImporterHeader(Name = "申报价值")]
    431.  
      public double DeclareValue { get; set; }
    432.  
      /// <summary>
    433.  
      /// 货币单位
    434.  
      /// </summary>
    435.  
      [ImporterHeader(Name = "货币单位")]
    436.  
      public string CurrencyUnit { get; set; }
    437.  
      /// <summary>
    438.  
      /// 品牌名称
    439.  
      /// </summary>
    440.  
      [ImporterHeader(Name = "品牌名称")]
    441.  
      public string BrandName { get; set; }
    442.  
      /// <summary>
    443.  
      /// 尺寸
    444.  
      /// </summary>
    445.  
      [ImporterHeader(Name = "尺寸(长x宽x高)")]
    446.  
      public string Size { get; set; }
    447.  
      /// <summary>
    448.  
      /// 重量
    449.  
      /// </summary>
    450.  
      [ImporterHeader(Name = "重量(KG)")]
    451.  
      public double Weight { get; set; }
    452.  
       
    453.  
      /// <summary>
    454.  
      /// 类型
    455.  
      /// </summary>
    456.  
      [ImporterHeader(Name = "类型")]
    457.  
      public ImporterProductType Type { get; set; }
    458.  
       
    459.  
      /// <summary>
    460.  
      /// 是否行
    461.  
      /// </summary>
    462.  
      [ImporterHeader(Name = "是否行")]
    463.  
      public bool IsOk { get; set; }
    464.  
      }
    465.  
       
    466.  
      public enum ImporterProductType
    467.  
      {
    468.  
      [Display(Name = "第一")]
    469.  
      One,
    470.  
      [Display(Name = "第二")]
    471.  
      Two
    472.  
      }
    473.  
      }
  • 相关阅读:
    【LeetCode】Validate Binary Search Tree
    【LeetCode】Search in Rotated Sorted Array II(转)
    【LeetCode】Search in Rotated Sorted Array
    【LeetCode】Set Matrix Zeroes
    【LeetCode】Sqrt(x) (转载)
    【LeetCode】Integer to Roman
    贪心算法
    【LeetCode】Best Time to Buy and Sell Stock III
    【LeetCode】Best Time to Buy and Sell Stock II
    CentOS 6 上安装 pip、setuptools
  • 原文地址:https://www.cnblogs.com/jiangyunfeng/p/12131375.html
Copyright © 2011-2022 走看看