开源组件ExcelReport 1.5.2 使用手册

简介:

ExcelReport是一款基于NPOI开发的报表引擎组件。它基于关注点分离的理念,将数据与样式、格式分离。让模板承载样式、格式等NPOI不怎么擅长且实现繁琐的信息,结合NPOI对数据的处理的优点将Excel报表的生成化繁为简。同时,对报表组成的基本元素进行了抽象,进一步简化了Excel报表的生成过程。

官方站点

NuGet:https://www.nuget.org/packages/ExcelReport

clip_image002[1]

GitHub:https://github.com/hanzhaoxin/ExcelReport

cnblogs:http://www.cnblogs.com/hanzhaoxin/tag/ExcelReport /

QQ Group:116476496  687474703a2f2f7075622e69647171696d672e636f6d2f7770612f696d616765732f67726f75702e

团队介绍

Jensen

来自于中国深圳,是这个项目的发起人和开发人员,2014年11月开始了ExcelReport的开发,负责ExcelReport的开发、测试和bug修复。

个人博客地址:http:// hanzhaoxin.cnblogs.com

许可证说明

ExcelReport采用的是MIT许可,这意味着它可以被用于任何商业或非商业项目,你不用担心因为使用它而必须开放你自己的源代码,且可借助ExcelReport的影响力推广你的产品。

当然作为一个开源许可证,肯定也是有一些义务。例如:在软件和软件的所有副本中都必须包含以上版权声明和本许可声明。

完整的MIT许可证请见:http://mit-license.org/

版本升级说明:

clip_image002

如果您项目中使用了ExcelReport,Bug修复和功能扩充的升级版本请放心升级,这类升级不能影响您现有的项目。如果架构修改版本信息发生了变化,请谨慎升级,这类升级有可能影响您现有的项目。

为什么要用ExcelReport?

回答这个问题前,我们先看看Tony Qu是怎么回答为什么要用NPOI的?

1)你不需要在服务器上安装微软的 Office,可以避免版权问题。

2)NPOI使用起来比 Office PIA 的 API 更加方便,更人性化。

3)你不用去花大力气维护 NPOI,NPOI Team 会不断更新、改善 NPOI,绝对省成本。

4)很多事情是 html 和cvs法做不到的,比如说公式计算[Cell C1]=A1+B1*A2单元格

高级样式(如文本旋转、对齐、宽度)等,其中公式计算可以适当减轻服务器端的计算压力

回到我们的问题,为什么要用ExcelReport呢?

1) 复杂的事情简单了,不可能的事情可行了。

2) 你不需要了解NPOI大量的API,你不需要用.NET语言写蹩脚的Java的语法。

3) 套用Tony兄的描述,你不用去花大力气维护ExcelReport,ExcelReport Team会不断更新、改善ExcelReport,绝对省成本。

目录

1报表元素与元素格式化器

2演示:使用ExcelReport生成报表

3格式化器示例

3.1局部格式化器

3.2单元格格式化器

3.3表格格式化器

3.4重复单元格式化器

4多Sheet报表生成

1报表元素与元素格式化器

在开始示例之前,我们用一章的篇幅介绍ExcelReport是如何将报表的内容抽象为元素的?

又是如何为元素填充数据的?为了说明第一个问题,我们从一个现有的报表开始。

如下报表有两个Sheet:Sheet1名为“工资表”Sheet2名为“工资条”,其截图如下所示。

clip_image004

clip_image006

我们先把数据部用蓝色框线标出来。

clip_image008

clip_image010

名正才能言顺,先说说ExcelReport中报表元素的概念:

  • 元素:填充到报表模板中的数据源对象,我们称之为元素。

  • 局部元素:填充到报表模板中的数据源对象是一个单元格内容的一部分,我们称这样的数据源对象为局部元素。

  • 单元格元素:填充到报表模板中的数据源对象是一个单元格的内容,我们称这样的数据源对象为单元格元素。

  • 表格元素:填充到报表模板中的数据源是某对象的集合,该对象是一行中多个单元格的内容集合,我们称这样的数据源集合为表格元素。

  • 重复单元元素:填充到报表模板中的数据源是某对象的集合,该对象是多行中多个单元格的内容集合,我们称这样的数据源集合为重复单元元素。

    【表格元素与重复单元元素数据源以集合出现。为复元素。】

    【对应的,局部元素和单元格元素称之为单元素。】

    clip_image012

    有了定义,我们让元素们各就各位。

    clip_image014

    clip_image016

    那么,ExcelReport又是如何为元素填充数据的?

    clip_image018

    话说元素格式化器为此而生。

    报表元素

    元素格式化器

    局部元素

    PartFormatter

    单元格元素

    CellFormatter

    表格元素

    TableFormatter

    重复单元元素

    RepeaterFormatter

    【元素格式化器的作用是格式化元素将其填充到报表模板。】

    2演示:使用ExcelReport生成报表

    目标报表,生成上章分析的”工资表-工资条”报表。

    第一步:设计模板

    【模板中参数格式:$[ParameterName]】

    clip_image020

    clip_image022

    clip_image024

    第二步:由模板生成模板填充规则文件

    1) 打开模板填充规则文件生成工具

    clip_image025

    2) 将设计好的模板拖入Excel模板文件选择框

    clip_image027

    3) 点击“生成模板规则文件(.XML)”按钮,生成规则文件。

    clip_image029

    第三步:填充模板,生成报表【项目中要添加对ExcelReport及NPOI(2.0以上)的引用】

    clip_image031

    生成导出报表:

    clip_image033

    clip_image035

    【注:演示示例“生成工资表-工资条报表”源码见解决方案:ExcelReportExamples】

    clip_image037

    3格式化器示例

    通过上一章的示例,我们了解了ExcelReport生成报表的步骤,也用到了各种格式化器。在本章,我们将对格式化器逐一展开讲解,以更详细的了解它们。

    3.1局部格式化器

    局部格式化器用于格式化填充一个单元格内容的一部分。填充数据类型为string。

    构成函数:

    clip_image039

    参数

    描述

    cellPoint

    参数所在单元格位置

    parameterName

    参数名

    value

    要格式化填充的值

    示例:(局部格式化器示例)

    第一步:设计模板

    clip_image041

    第二步:由模板生成模板填充规则文件

    clip_image043

    第三步:填充模板,生成报表

    clip_image045

    生成导出报表:

    clip_image047

    3.2单元格格式化器

    单元格格式化器用于格式化填充一个单元格。填充数据类型为object,详见下表:

    填充数据类型

    Excel中对应的数据类型

    可视化设置项

    String

    String

     

    DateTime

    DateTime

    clip_image049

    Boolean

    Boolean

     

    Int16

    Int32

    Int64

    Byte

    Single

    Double

    UInt16

    UInt32

    UInt64

    Double

    clip_image051

    Byte[]

    Image

     

    构成函数:

    clip_image053

    参数

    描述

    cellPoint

    参数所在单元格位置

    value

    要格式化填充的值

    示例:(单元格格式化器示例)

    第一步:设计模板

    clip_image055

    第二步:由模板生成模板填充规则文件(略,详参见第2章“演示”)

    第三步:填充模板,生成报表

    clip_image057

    生成导出报表:

    clip_image059

    3.3表格格式化器

    表格格式化器用于格式化填充一个表格。填充数据类型为IEnumerable<TSource>。

    构造函数:

    clip_image061

    参数

    描述

    templateRowIndex

    模板行行标

    dataSource

    要格式化填充的数据

    columnInfos

    列信息集合

    TableColumnInfo构造函数:

    clip_image063

    参数

    描述

    columnIndex

    列标

    dgSetValue

    Func<TSource, object>类型的委托对象(返回值Object,可参照第二节填充数据类型与Excel中数据类型对应表。)

    示例:(表格格式化器示例)

    第一步:设计模板

    clip_image065

    第二步:由模板生成模板填充规则文件(略,详参见第2章“演示”)

    第三步:填充模板,生成报表

    clip_image067

    生成导出报表:

    clip_image069

    提问回复:【关于TableFormatter有以下知识点,多次被提问,这里做出统一回答。】

    问题一:TableFormatter的数据源可以是DataTable吗?

    答:你可以这样写:

    clip_image071

    问题二:我的实体类中没有实现外链,在实体对象中有一个ID属性,我想导出的内容是ID对应的Name,这怎么办?

    答:和示例中的“性别”没什么区别吧。好吧,贴行代码:

    clip_image073

    3.4重复单元格式化器

    重复单元格式化器用于格式化填充一个重复单元元素。填充数据类型为IEnumerable<TSource>。

    构造函数:

    clip_image075

    参数

    描述

    startTagCell

    重复单元(开始)标识单元格

    endTagCell

    重复单元(结束)标识单元格

    dataSource

    要格式化填充的数据

    cellInfos

    重复单元包含的单元格信息集合

    RepeaterCellInfo构造函数:

    clip_image077

    参数

    描述

    cellPoint

    单元格坐标

    dgSetValue

    Func<TSource, object>类型的委托对象(返回值Object,可参照第二节填充数据类型与Excel中数据类型对应表。)

    示例:(重复单元格式化器示例)

    第一步:设计模板

    clip_image079

    根据需求,隐藏重复单元标识行。

    clip_image081

    第二步:由模板生成模板填充规则文件(略,详参见第2章“演示”)

    第三步:填充模板,生成报表

    clip_image083

    生成导出报表:

    clip_image085

    4多Sheet报表生成

    到目前为止,我们所有导出都直接使用的是:ExportHelper类中的静态方法。其实在ExcelReport组件的设计中Export类便是终点了,ExportHelper类正如它的名字只是为了方便操作提供的助手类而已。

    【哦,它还是部分类,你可以根据需求扩展。】

    clip_image087

    回到本章的主题,我们要谈的是多Sheet报表的生成。什么?这和前边啰嗦的那些有什么关系?好吧,其实关系也不大,我只是想说关注报表的生成,你看Export类就对了。

    clip_image089

    参数

    描述

    templateFile

    模板文件路径

    containers

    Sheet格式化容器的数组【数组中的每个元素对应一个Sheet】

    示例:(多Sheet报表生成示例)

    第一步:设计模板

    clip_image091

    clip_image093

    第二步:由模板生成模板填充规则文件(略,详参见第2章“演示”)

    第三步:填充模板,生成报表

    clip_image095

    生成导出报表:

    clip_image097

    clip_image099

  • 作者: 韩兆新
    本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。
    分类:  [11]我的开源

    本文转自韩兆新博客博客园博客,原文链接:http://www.cnblogs.com/hanzhaoxin/p/4472860.html,如需转载请自行联系原作者
    目录
    相关文章
    |
    算法 编译器 数据库
    【C++ 泛型编程 高级篇】使用SFINAE和if constexpr灵活处理类型进行条件编译
    【C++ 泛型编程 高级篇】使用SFINAE和if constexpr灵活处理类型进行条件编译
    962 0
    |
    SQL 关系型数据库 MySQL
    MySQL删除数据后磁盘空间的释放总结
    MySQL删除数据后磁盘空间的释放总结
    1222 0
    |
    存储 关系型数据库 MySQL
    gbase mysql 协议
    【4月更文挑战第19天】
    296 6
    |
    Web App开发 Linux 图形学
    Autodesk Maya 2025发布:3D建模与动画的巅峰之作
    Autodesk Maya 2025推出了多项新功能,包括原生支持Apple芯片,更新的建模工具如智能拉伸,绑定和角色动画的改进,运动轨迹和摄影表编辑器的优化,图形编辑器热键变更。此外,还整合了Arnold 5.4.0、USD插件更新、Lookdevx 1.3.0、Bifrost 2.9.0.0以及Substance 2.5.0。该软件支持Windows 10/11、macOS和Linux系统。推荐使用最新版Safari、Chrome、Edge或Firefox浏览器,并需要64位Intel或AMD CPU、8GB(建议16GB以上)RAM和7GB硬盘空间。
    721 0
    |
    11月前
    |
    缓存 数据挖掘 API
    淘宝商品类目API的获取与应用探索
    淘宝商品类目API是淘宝开放平台提供的关键服务,允许开发者获取淘宝商品的类目信息,包括根类目、子类目及属性信息。本文介绍API的获取方法、应用场景及使用技巧,帮助电商从业者和开发者更好地利用类目数据,提升商品管理、搜索推荐及数据分析等能力。
    630 1
    |
    Linux Windows
    Nomachine 最简安装与使用指南
    这是一篇2022年Nomachine软件的极简安装与使用指南,包括Windows和Linux系统下的安装步骤,以及如何在Windows系统上通过Nomachine远程控制Linux系统的方法。
    Nomachine 最简安装与使用指南
    |
    11月前
    |
    机器学习/深度学习 存储 自然语言处理
    从理论到实践:如何使用长短期记忆网络(LSTM)改善自然语言处理任务
    【10月更文挑战第7天】随着深度学习技术的发展,循环神经网络(RNNs)及其变体,特别是长短期记忆网络(LSTMs),已经成为处理序列数据的强大工具。在自然语言处理(NLP)领域,LSTM因其能够捕捉文本中的长期依赖关系而变得尤为重要。本文将介绍LSTM的基本原理,并通过具体的代码示例来展示如何在实际的NLP任务中应用LSTM。
    936 4
    |
    Java API 数据处理
    【Java的SIMD革命】JDK 22向量API:释放硬件潜能,让Java应用性能飙升!
    【9月更文挑战第7天】 JDK 22向量API的发布标志着Java编程语言在SIMD技术领域的重大突破。这一新特性不仅释放了现代硬件的潜能,更让Java应用性能实现了飙升。我们有理由相信,在未来的发展中,Java将继续引领编程语言的潮流,为开发者们带来更加高效、更加强大的编程体验。让我们共同期待Java在SIMD技术的推动下开启一个全新的性能提升时代!
    |
    供应链 搜索推荐 数据挖掘
    微店商品详情数据接口(micro.item_get)丨微店API接口指南
    `micro.item_get`接口是微店API的关键工具,让开发者能获取商品详情,包括名称、价格、描述、图片、销量和SKU,用于电商同步、数据分析、个性化营销和提升购物体验。此接口加速了数据驱动的决策和业务优化。
    |
    Java 微服务
    skywalking链路追踪时忽略指定异常
    skywalking链路追踪时忽略指定异常