2020-05-10

c# ClosedXML.Report excel报表排坑

c# ClosedXML.Report excel报表排坑


一.介绍Closed

      Closed

  github:https://github.com/Closed

  github项目下载慢参考:https://blog.csdn.net/czjnoe/article/details/106034095

       一个可以生成Excel报表的工具,创建一份xlsx 模板,设置数据填充规则,然后直接填充数据即可快速转换为 Excel报表。

   在网上没有找到较好Closed

    

二.如何使用

1.首先创建xlsx模板

 注意:上图红色区域,需要在excel中,设置区域名称为item,否则无法填充数据

2.c# demo示例

首先添加Closed

创建所需实体:

public class Student {  public int Id { get; set; }  public string Name { get; set; }  public int Age { get; set; } }public class Course {  public int Id { get; set; }  public string Name { get; set; }  public double Grade { get; set; }  public item Items { get; set; } } public class item {  public int Id { get; set; }  public string Name { get; set; } }

代码示例:

 const string outputFile = @".\Output\report.xls";//输出目录   var template = new XLTemplate(@".\Template\Student.xls");//模板目录   Student stu = new Student   {    Age = 25,    Id = 1,    Name = "財政局",   };   Dictionary<string, string> dic = new Dictionary<string, string>();   dic["Id"] = "1";   dic["Age"] = "25";   dic["Name"] = "財政局";   //AddVariable(object)方法,可传入实体、字典   {    //template.AddVariable(stu);//传入单个实体    template.AddVariable(dic);//传入字典   }   //AddVariable(string alias, object value)方法,可以传入集合、动态类型、DataTable。如果希望输出多个table表,建议传入集合   //注意key值必须为item   {    IEnumerable<dynamic> CourseItems()    {     return new List<dynamic>    {     new { Id=1, Name="数学", Grade=89,Items=new { Id=1,Name="1"} },     new { Id=2, Name="英语", Grade=15,Items=new { Id=2,Name="2"} },     new { Id=3, Name="语文", Grade=100,Items=new { Id=3,Name="3"} },    };    }    var Course = new List<Course>     {      new Course{ Id=1, Name="数学", Grade=89 , Items=new item{ Id=1,Name="1"}},      new Course{ Id=2, Name="英语", Grade=15, Items=new item{ Id=2,Name="2"}},      new Course{ Id=3, Name="语文", Grade=100, Items=new item{ Id=3,Name="3"}}     };    DataTable dt = new DataTable();    dt.Columns.Add("Id", typeof(int));    dt.Columns.Add("Name", typeof(string));    dt.Columns.Add("Grade", typeof(int));    var newRow = dt.NewRow();    newRow["Id"] = 1;    newRow["Name"] = "数学";    newRow["Grade"] = 89;    dt.Rows.Add(newRow);    newRow = dt.NewRow();    newRow["Id"] = 2;    newRow["Name"] = "英语";    newRow["Grade"] = 15;    dt.Rows.Add(newRow);    newRow = dt.NewRow();    newRow["Id"] = 3;    newRow["Name"] = "语文";    newRow["Grade"] = 100;    dt.Rows.Add(newRow);    //template.AddVariable("item", CourseItems());//动态类型    template.AddVariable("item", Course);//集合 key必须为item    //template.AddVariable("item", dt);//DataTable   }   template.Generate();   template.SaveAs(outputFile);//输出excel文件   //打开excel文件   Process.Start(new ProcessStartInfo(outputFile) { UseShellExecute = true });

 

3.输出excel:

 

 

 

三.总结

    如果你只是处理一些简单的报表输出或只需要输出一张table表,还是可以使用的,毕竟比npoi输出简单多了,否则不建议使用

   Closed
      1.只能处理简单的数据插入,如果想要输出多个table表的话,则会麻烦一点,这点非常不友好。
      2.输出表格table,需要指定excel一块区域,且把该区域设置名称为item。
      3.不支持xls格式。只支持如下格式。'.xlsx', '.xlsm', '.xltx' and '.xltm'.

            我的demo:https://gitee.com/czjnoe/Closed

 


No comments:

Post a Comment