OfficeOpenXml.Entends 根据模板导出Excel

OfficeOpenXml.Entends 是一个OfficeOpenXml拓展,用于根据模板输出excel,依赖于EPPlus(码农一致好评,其API操作及友好程度要高于 NPOI),可以直接在NuGet中获取

OfficeOpenXml.Entends 1.0.1.0 用法介绍,直接上代码吧

 1 using System;
 2 using System.Collections.Generic;
 3 using System.Linq;
 4 using OfficeOpenXml;
 5 using System.IO;
 6 using OfficeOpenXml.Extends;
 7 
 8 namespace Test
 9 {
10   class Program
11   {
12     static void Main(string[] args)
13     {
14       FileInfo info = new FileInfo("tpl.xlsx");
15       ExcelPackage packet = new ExcelPackage(info);
16       var book = packet.Workbook;
17 
18       Random random = new Random();
19 
20       Dictionary<string, IEnumerable<string>> dic = new Dictionary<string, IEnumerable<string>>();
21       dic.Add("水果", new string[] { "桃子", "李子", "香蕉", "" });
22       dic.Add("蔬菜", new string[] { "青菜", "土豆", "黄瓜", "啤酒" });
23 
24       //构造model
25       var model = new
26       {
27         ProjectName = "灰太狼",
28         Name = "Jeff",
29         CreatedAt = DateTime.Now,
30         BuyerName = "Bill",
31         Cates = dic.Select(m => new
32         {
33           Name = m.Key,
34           Items = m.Value.Select(n => new
35           {
36             Name = n,
37             Price = (decimal)random.Next(1, 100),
38             Amount = random.Next(1, 100)
39           })
40         })
41       };
42 
43       //下面的FillModel就是OfficeOpenXml.Extends提供的拓展方法, 1.0.1.0也就只有这个拓展方法
44       book.Worksheets.First().FillModel(model);
45 
46       packet.SaveAs(new FileInfo(DateTime.Now.ToString("yyyyMMddHHmmss") + ".xlsx"));
47     }
48   }
49 }

 

 下面是xls模板

 

 

excel模板中,将第一列空余出来作为代码控制列(可以将正常的模板做完之后插入第一列),单元格中使用 { ... } 来输出内容,注意:输出内容中目前不支持运算、方法,仅支持 变量、成员。

控制代码目前支持 for 循环,支持嵌套,要用索引时参考单元格A6的写法(注意:索引计数从1开始,因为excel中通常序号从1开始)。

下面是输出的excel

 

输出excel是不是省事了很多,不用在代码里面再写合并单元格。。样式。。边框等等了

 

 2018-1-17 已经发布1.0.4版本,请大家更新到最新版

修复了一些bug,增加了一个输出公式的功能

 

Install-Package OfficeOpenXml.Extends -Version 1.0.4

 

如:模板如下

 

 

输出结果:

 

 这样实现了同一列统计数量的功能。

下面让我们来解析一下工作原理。

 

 

 

用  @=  开头便于程序识别,解析时会将 @ 去掉,就变成了公式。后面的内容对 {...} 进行解释并替换,程序会将这写文字输出为   =SUM(R[-4]C:R[-1]C),是不是看起来和excel中的公式差不多了。

R[-4]表示相对值-4行,R[-1]表示相对值-1行,C后面没有 [] 表示当前列。

最终输出的内容变成 =SUM(D6:D9)

 

posted @ 2017-07-06 10:44  美好时光Jeff  阅读(4045)  评论(21编辑  收藏  举报