• 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)

  • 相关阅读:
    Spring之InstantiationAwareBeanPostProcessor接口介绍
    Spring之BeanPostProcessor(后置处理器)介绍
    JVM中垃圾收集算法总结
    JVM中对象的回收过程
    zookeeper实现动态感知服务器上下线
    Spring事务的传播行为
    java工厂模式
    Spring加载流程源码分析03【refresh】
    Redis客户端操作之Jedis
    微服务设计的四个原则
  • 原文地址:https://www.cnblogs.com/mhsg/p/7125112.html
Copyright © 2020-2023  润新知