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 模板,設置數據填充規則,然后直接填充數據即可快速轉換為 Excel報表。

   在網上沒有找到較好ClosedXML.Report的示例,而且官方提供的使用示例實在太坑人了,也許該博主太"懶惰"了,所以今天寫下該文章,方便后來者的使用,以免入坑太久。

    

二.如何使用

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

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM