导航

目   录:基于NPOI的报表引擎——ExcelReport

上一篇:ExcelReport源码解析

概述

上篇中已介绍了ExcelRepor的架构,本篇将通过例子讲述如何扩展元素格式化器以满足更多的需求。

示例

1)谈谈新需求:

如图所示,一个单元格内包含多个参数。

2)实现代码:

PartFormatter.cs:

/*

 类:PartFormatter

 描述:单元格局部(元素)格式化器

 编 码 人:韩兆新 日期:2015年01月25日

 修改记录:


*/

 

using System.Drawing;

using NPOI.SS.UserModel;

 

namespace ExcelReport

{

    public class PartFormatter:ElementFormatter

    {

        private Point _cellPoint;

        private string _parameterName;

        private string _value;

 

        public PartFormatter(Point cellPoint, string parameterName ,string value)

        {

            this._cellPoint = cellPoint;

            this._parameterName = parameterName;

            this._value = value;

        }

 

        public override void Format(SheetFormatterContext context)

        {

            var rowIndex = context.GetCurrentRowIndex(_cellPoint.X);

            var row = context.Sheet.GetRow(rowIndex);

            if (null == row)

            {

                row = context.Sheet.CreateRow(rowIndex);

            }

            var cell = row.GetCell(_cellPoint.Y);

            if (null == cell)

            {

                cell = row.CreateCell(_cellPoint.Y);

            }

            if (cell.CellType.Equals(CellType.String))

            {

                SetCellValue(cell, cell.StringCellValue.Replace(string.Format("$[{0}]", _parameterName), _value));

            }

        }

    }

}

(PartFormatter继承ElementFormatter,实现Format方法)。

3)测试代码:

//实例化一个参数容器,并加载模板填充规则文件

ParameterCollection collection = new ParameterCollection();

collection.Load(@"Template\Template.xml");

 

//实例化一个元素格式化器列表

List<ElementFormatter> formatters = new List<ElementFormatter>();

formatters.Add(new PartFormatter(collection["Sheet1", "Dept"],"Dept","物理"));

formatters.Add(new PartFormatter(collection["Sheet1", "Class"], "Class", "力学一"));

 

//导出文件到本地

Export.ExportToLocal(@"Template\Template.xls", saveFileDlg.FileName,

    new SheetFormatterContainer("Sheet1", formatters));

4)测试结果:

源码下载:

ExcelReport第三篇:扩展元素格式化器的更多相关文章

  1. Log4j扩展使用--日志格式化器Layout

    Layout:格式化输出日志信息 OK,前面我已经知道了.Appender必须使用一个与之相关联的Layout,这样才能知道怎样格式化输出日志信息. 日志格式化器Layout负责格式化日志信息,方法l ...

  2. 深入理解javascript函数系列第三篇——属性和方法

    × 目录 [1]属性 [2]方法 前面的话 函数是javascript中的特殊的对象,可以拥有属性和方法,就像普通的对象拥有属性和方法一样.甚至可以用Function()构造函数来创建新的函数对象.本 ...

  3. 第三篇 SQL Server安全主体和安全对象

    本篇文章是SQL Server安全系列的第三篇,详细内容请参考原文. 一般来说,你通过给主体分配对象的权限来实现SQL Server上的用户与对象的安全.在这一系列,你会学习在SQL Server实例 ...

  4. itemKNN发展史----推荐系统的三篇重要的论文解读

    itemKNN发展史----推荐系统的三篇重要的论文解读 本文用到的符号标识 1.Item-based CF 基本过程: 计算相似度矩阵 Cosine相似度 皮尔逊相似系数 参数聚合进行推荐 根据用户 ...

  5. 【译】第三篇 SQL Server安全主体和安全对象

    本篇文章是SQL Server安全系列的第三篇,详细内容请参考原文. 一般来说,你通过给主体分配对象的权限来实现SQL Server上的用户与对象的安全.在这一系列,你会学习在SQL Server实例 ...

  6. 深入理解javascript函数系列第三篇

    前面的话 函数是javascript中特殊的对象,可以拥有属性和方法,就像普通的对象拥有属性和方法一样.甚至可以用Function()构造函数来创建新的函数对象.本文是深入理解javascript函数 ...

  7. 前端第三篇---前端基础之JavaScript

    前端第三篇---前端基础之JavaScript 一.JavaScript概述 二.JavaScript的基础 三.词法分析 四.JavaScript的内置对象和方法 五.BOM对象 六.DOM对象 七 ...

  8. 从0开始搭建SQL Server AlwaysOn 第三篇(配置AlwaysOn)

    从0开始搭建SQL Server AlwaysOn 第三篇(配置AlwaysOn) 第一篇http://www.cnblogs.com/lyhabc/p/4678330.html第二篇http://w ...

  9. (转) 从0开始搭建SQL Server AlwaysOn 第三篇(配置AlwaysOn)

    原文地址: http://www.cnblogs.com/lyhabc/p/4682986.html 这一篇是从0开始搭建SQL Server AlwaysOn 的第三篇,这一篇才真正开始搭建Alwa ...

随机推荐

  1. respberry pi3 上手随记

    入门篇: raspberry 官网: https://www.raspberrypi.org/ 各个系统镜像下载地址: https://www.raspberrypi.org/downloads/ 树 ...

  2. 无法解析类型 javax.servlet.http.HttpServletRequest。从必需的 .class 文件间接引用

    java.lang.Error: 无法解析的编译问题: 无法解析类型 javax.servlet.http.HttpServletRequest.从必需的 .class 文件间接引用了它 无法解析类型 ...

  3. HDU 1069 dp最长递增子序列

    B - Monkey and Banana Time Limit:1000MS     Memory Limit:32768KB     64bit IO Format:%I64d & %I6 ...

  4. Spring+SpringMVC+MyBatis+Maven 服务端XML配置

    项目目录结构 spring-mybatis.xml <?xml version="1.0" encoding="UTF-8"?> <beans ...

  5. yum服务器搭建(深入理解yum工作原理)

    作者:firefoxbug 时间:July 27, 2014 分类:Linux 前言 在前面一篇rpm包制作描述了rpm的打包过程,这篇文章主要讲述yum的工作原理. yum 运行原理 yum的工作需 ...

  6. 时间和日期控件(Calendar1)

    取得选择的: taskItem["data"] = Calendar1.SelectedDate.ToShortDateString();

  7. java web 学习 --第五天(Java三级考试)

    第四天的学习内容:http://www.cnblogs.com/tobecrazy/p/3454860.html Response对象 response对象主要是向客户端浏览器发送二进制数据,如输出C ...

  8. ACM/ICPC 之 快排+归并排序-记录顺序对(TSH OJ-LightHouse(灯塔))

    TsingHua OJ 上不能使用<algorithm>头文件,因此需要手写快排(刚开始写的时候自己就出了很多问题....),另外本题需要在给横坐标排序后,需要记录纵坐标的顺序对的数量,因 ...

  9. 15.SpringMVC和Spring上下文关系(为什么SpringMVC可以调用到Spring)

    springmvc上下文继承于spring, 也就是springmvc的上下文可访问spring上下文,在springmvc的上下文中可取得spring bean. spring上下文是spring启 ...

  10. drupal记录(一)

    翻译包下载网址:locallize.drupal.org 中文模块 local 自动下载模块 L10n_update 第三方menu菜单 admin menu,menu bar 打开这个后要关闭系统自 ...