c# ClosedXML.Report excel报表排坑

一.介绍ClosedXML.Report

ClosedXML.Report开源报表  支持net4.0+。

github:https://github.com/ClosedXML/ClosedXML.Report

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

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

在网上没有找到较好ClosedXML.Report的示例,而且官方提供的使用示例实在太坑人了,也许该博主太"懒惰"了,所以今天写下该文章,方便后来者c#教程的使用,以免入坑太久。

二.如何使用

1.首先创建xlsx模板

在这里插入图片描述

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

2.c# demo示例

首先添加ClosedXML(0.95.0.0)、ClosedXML.Report(0.2.0.0),不要在nuget直接下载,最好下载官方开源项目,引用项目下的dll,或者直接使我的demo中的引用,在文章末尾

创建所需实体:

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输出简单多了,否则不建议使用

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

我的demo:https://gitee.com/czjnoe/ClosedXML.ReportDemo

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Encase 是C#编写开发的为.NET 平台提供的AOP 框架。Encase 独特的提供了把方面(aspects)部署到运行时代码,而其它AOP 框架依赖配置文件的方式。这种部署方面(aspects)的方法帮助缺少经验的开发人员提高开发效率。 NKalore 是一款编程语言,它扩展了C#允许在.net 平台使用AOP。NKalore 的语法简单、直观,它的编译器是基于Mono C#编译器(MCS)。NKalore 目前只能在命令行或#Develop 内部使用。NKalore 兼容公共语言规范CLS(Common Language Specification),它可以在任何.NET 开发环境中使用,包括微软的Visual Studio .NET。 PostSharp 读取.NET 字节模块,转换成对象模型。让插件分析和转换这个模型并写回到MSIL。 PostSharp 使开发程序分析应用程序容易得像分析代码规则和设计模式,它使程序开发的思想变革为面向方面软件开发(AOSD/AOD)思想。 AspectDNG 的目标是为.NET 开发人员提供简单而功能强大的AOP-GAOP 实现。它效仿java下的开源工具AspectJ 和 Spoon,成熟程度也很接近它们。 RAIL(Runtime Assembly Instrumentation Library) 开源项目可以在C#程序集加载和运行前进行处理控制调整和重新构建。C#在CLR 中,我们已经能够动态加载程序集并且获得程序集中的类和方法,RAIL(Runtime Assembly Instrumentation Library)的出现填补了CLR处理过程中的一些空白。 SetPoint 是一款.NET 框架下的全功能(full-featured)AOP 引擎.它着重为称为语义切点(semantic pointcuts)的定义依赖RDF/OWL 的使用.它的功能为一个IL-level,highly dynamic weaver&LENDL;,一个引人注目的定义语言、、、、、、 DotNetAOP 为 CLR language 提供AOP 框架基础属性。 NAop 是一个DotNet 下的AOP 框架。 AspectSharp 是DotNet 下的免费AOP 框架,它以Dynamic Proxies 和XML 作为配置文件。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值