2019独角兽企业重金招聘Python工程师标准>>>

导航

目   录:基于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)测试结果:

源码下载:

下载地址:https://github.com/hanzhaoxin/ExcelReport

转载于:https://my.oschina.net/hanzhaoxin/blog/373278

ExcelReport第三篇:扩展元素格式化器相关推荐

  1. 【Python第三篇】Python装饰器、生成器、迭代器

    本节内容 装饰器 字符串格式化 生成器和迭代器 1. 装饰器 装饰器实现的功能: @ + 函数名1.自动执行outer函数并且将其下面的函数名f1当作参数传递2.将outer函数的返回值,重新赋值给f ...

  2. 【Linux入门】第三篇:软件包管理器yum和编辑器vim的使用

    目录 前言 Linux软件包管理yum 查看软件包 如何安装软件 如何卸载软件 lrzsz的使用 Linux编辑器-vim使用 01.vim的基本概念 02.vim的基本操作 03.vim命令模式命令 ...

  3. C++ STL(第三篇:空间配置器)

    1.概述 以STL运用的角度而言,空间配置器是最不需要介绍的,它总是藏在一切组件的背后,默默工作.整个STL的操作对象都存放在容器之中(vertor.list),而容器一定需要配置空间以放置资料,这就 ...

  4. 【A星算法】--第三篇(网格管理器)

    这一遍相对复杂,先将代码拆分讲解,在文字最后贴入源码. 首先,在管理器需要用到的参数有 public int numOfRows; //行public int numOfColums; //列publ ...

  5. 扩展springmvc组件——当页面跳转时,需要在Controller里面创建一个空方法去跳转或者是创建一个配置类  ||日期格式化说明||自定义格式化器||消息转化器扩展fastjson

    在容器中注册视图控制器 当页面跳转时,我们需要在Controller里面创建一个空方法去跳转,那么有没有别的配置方法呢 创建一个WebMvcConfig的配置类   实现WebMvcConfigure ...

  6. 云客Drupal源码分析之实体视图显示及格式化器

    在实体视图构建器中构建完实体的基本渲染数组后,会调用实体视图显示对象继续构建实体字段对象的渲染数组,然后合并到基本数组中(合并过程基本数组的优先级更高)以形成完整实体渲染数组,实体视图显示对象内部又依 ...

  7. NLP能否像人脑一样工作?CMU、MIT三篇论文详解机器和大脑范畴下NLP的关系

    本文转载自公众号机器之心 作为计算机科学领域与人工智能领域的重要研究课题,自然语言处理已经在各领域展开了广泛的研究与探讨.随着研究的深入,一些学者开始探讨机器中的自然语言处理和大脑中的自然语言处理是否 ...

  8. 怎样缓解灾难性遗忘?持续学习最新综述三篇

    本文转载自公众号"夕小瑶的卖萌屋",专业带逛互联网算法圈的神操作 ----->我是传送门 关注后,回复以下口令: 回复[789] :领取深度学习全栈手册(含NLP.CV海量综 ...

  9. GPT-3等三篇论文获NeurIPS 2020 最佳论文奖!华人一作获时间检验奖

    作者 | AI科技评论 刚刚,NeurIPS 2020在官网公布了2020年度最佳论文奖和时间检验奖两项大奖! 今年一共有三篇论文共同获得最佳论文奖,其中第二篇获奖论文就是来自OpenAI团队打造的今 ...

最新文章

  1. 报道 | 1899篇论文、1329个机构、6012位作者,NeurIPS 2020谁在独领风骚?
  2. 专访丨周志华:深度学习理论探讨比应用滞后太多
  3. OpenLDAP的安装测试及管理
  4. GDC2017访谈: 这3个工具让VR开发者事半功倍
  5. smb文件共享_使用SMB文件共享作为存储替代方案
  6. 再谈MySQL全库备份
  7. 浅谈TCP/IP网络编程中socket的行为
  8. UWA学堂|逻辑代码模块
  9. Windows环境下JDK安装与环境变量配置
  10. Molecule在GitHub与Gitee正式开源
  11. 如何更改linux文件的拥有者及用户组 chown和chgrp
  12. [裴礼文数学分析中的典型问题与方法习题参考解答]4.5.1
  13. 在苹果Mac怎样查看或取消订阅服务?
  14. html原生listview,设置 ListView 及其各项的样式 (HTML)
  15. elasticsearch 官方文档一个小错误
  16. 用Python发免费短信的正确姿势
  17. 微软春天发布活动将聚焦在Windows 10云版
  18. Developer Cloud -帮助和支持
  19. SQL SERVER 解析XML字符串
  20. 网上最靠谱的赚钱方法,看看这六个哪个适合你!

热门文章

  1. Hadoop JobHistory
  2. Intel汇编语言程序设计学习-第三章 汇编语言基础-下
  3. 【Groovy】Groovy 方法调用 ( 使用 对象名.成员名 访问 Groovy 类的成员 | 使用 对象名.‘成员名‘ 访问类的成员 | 使用 对象名[‘成员名‘] 访问类成员 )
  4. 【错误记录】Git 使用报错 ( no changes added to commit (use “git add“ and/or “git commit -a“) )
  5. 【Android 安全】DEX 加密 ( Application 替换 | 分析 Service 组件中调用 getApplication() 获取的 Application 是否替换成功 )
  6. 【Android RTMP】RTMPDumb 源码导入 Android Studio ( 交叉编译 | 配置 CMakeList.txt 构建脚本 )
  7. JVM 常用参数一览表(转)
  8. Codeforces Round #505 (rated, Div. 1 + Div. 2, based on VK Cup 2018 Final)
  9. IDE安装Lombok插件提高开发效率
  10. centos6创建用户,设置ssh登录