NPOI 菜鸟实践行之根据指定的模板生成Excel 2003格式的文件 (一)

 

感谢群里的各位朋友的指导和教学,感谢Tony Qu的热心指导,感谢阿修罗兄提供的Excelhelper类

谈谈个人对Excel的理解,结合NPOI,个人水平一般般,菜鸟一只

Excel 打开后,分为sheet-文件簿,Rows-行,Cell-单元格

要基于模板生成EXCEL,首先我们要明白的是我们要填充的数据在整个Excel的sheet中是处于头,还是尾部,还是中间


我是这样理解的,如果模板是含有风格的,比如说我这种含有三行内容的,计算的话,需要的模板列应该只包含下面这个表头(模板XLS)

系統 XXXX系统数据库表名BC(XX表)
序号字  段  名  称数 据 属 性逻 辑 条 件 
 中   文英    文类型长度小数单位NULL(数 据 值 范 围)(备  注)
          
              

而我们要生成的xls最终需要是这样BC.7z

 

确定表头无需动态生成(固定的行和列),内容(行和列不确定),表尾格式(表尾头固定的行列,表尾内容行和列不确定)之后,我们就可以将代码分为生成表头,生成内容,生成表尾,接下来我就将生成内容的代码公布出来,给大家看看,这个代码是已经进行过重构的,是可以通用的哦,代码里你可以清晰的看到我生成索引内容的时候也是动态的,其他代码都是参考阿修罗兄提供的excelhelper类,如果需要查看,请到189925337(NPOI超级群)群里下载即可。

 

#region 单元格数据生成通用类private static int CreateDataMethod(ISheet sheet1, ICellStyle style, DataTable dtGetRowTable, int rowIndex, HSSFCellStyle dateStyle){foreach (DataRow row in dtGetRowTable.Rows){#region 填充内容HSSFRow dataRow = sheet1.CreateRow(rowIndex) as HSSFRow;foreach (DataColumn column in dtGetRowTable.Columns){HSSFCell newCell = dataRow.CreateCell(column.Ordinal) as HSSFCell;string drValue = row[column].ToString();#region 字段类型处理switch (column.DataType.ToString()){case "System.String": //字符串类型
                            newCell.SetCellValue(drValue);newCell.CellStyle = style;break;case "System.DateTime": //日期类型
                            DateTime dateV;DateTime.TryParse(drValue, out dateV);newCell.SetCellValue(dateV);newCell.CellStyle = dateStyle; //格式化显示break;case "System.Boolean": //布尔型bool boolV = false;bool.TryParse(drValue, out boolV);newCell.SetCellValue(boolV);newCell.CellStyle = style;break;case "System.Int16": //整型case "System.Int32":case "System.Int64":case "System.Byte":int intV = 0;int.TryParse(drValue, out intV);newCell.SetCellValue(intV);newCell.CellStyle = style;break;case "System.Decimal": //浮点型case "System.Double":double doubV = 0;double.TryParse(drValue, out doubV);newCell.SetCellValue(doubV);newCell.CellStyle = style;break;case "System.DBNull": //空值处理newCell.SetCellValue("");newCell.CellStyle = style;break;default:newCell.SetCellValue(drValue);newCell.CellStyle = style;break;}#endregion#region 插入留余空白列int iLastCell = sheet1.GetRow(4).LastCellNum + 1 - dtGetRowTable.Columns.Count;for (int i = 1; i < iLastCell; i++){HSSFCell newNullCell = dataRow.CreateCell(newCell.ColumnIndex + i) as HSSFCell;newNullCell.SetCellValue("");newNullCell.CellStyle = style;}#endregion}#endregionrowIndex++;}return rowIndex;} #endregion

int iLastCell = sheet1.GetRow(4).LastCellNum + 1 - dtGetRowTable.Columns.Count;//这个地方是根据模板表头所占数据计算的,这个是通用的留余做法。

源文件提供下载:Form1.7z

模板(带表头):表头(模板XLS)

xls:BC.7z

其实这就是一种简单的报表做法,下图所示是在实际项目当中使用的数据字典功能模块的效果图。

转载于:https://www.cnblogs.com/yzb305070/archive/2012/06/23/2483433.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/262592.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Java设计模式12:装饰器模式

装饰器模式 装饰器模式又称为包装&#xff08;Wrapper&#xff09;模式。装饰器模式以多客户端透明的方式扩展对象的功能&#xff0c;是继承关系的一个替代方案。 装饰器模式的结构 通常给对象添加功能&#xff0c;要么直接修改对象添加相应的功能&#xff0c;要么派生子类来扩…

JDBC使用案例

一、结果集中获取数据并对实体set值&#xff0c;封装成对象返回&#xff1b; 2、封装JDBC工具类 只要执行一次的&#xff0c;如读取配置文件&#xff0c;则写静态代码块&#xff1b; 异常抛出要写明方法才可以throw&#xff0c;静态代码块异常只能捕捉try catch; 类加载器两个作…

Android入门:Log介绍

一、Log类介绍 在Logcat视图中查看Android日志信息&#xff1b; (1)Log.v()&#xff1a;任意信息&#xff1b; (2)Log.e()&#xff1a;error信息&#xff1b; (3)Log.w()&#xff1a;warning信息&#xff1b; (4)Log.i()&#xff1a;提示信息&#xff1b; (5)Log.d()&#xff1…

JAVA中的日志框架-log4j的使用

JAVA日志-使用log4j 1. log4j.jar下载 windows下载地址&#xff1a; http://www.apache.org/dyn/closer.cgi/logging/log4j/1.2.15/apache-log4j-1.2.15.zip Linux平台下的下载地址&#xff1a; http://download.chinaunix.net/download.php?id12696&ResourceID6256 把l…

PreparedStatement预编译的sql执行对象

一、预编译&#xff0c;防sql注入 其中&#xff0c;设置参数值占位符索引从1开始&#xff1b;在由sql 连接对象创建 sql执行对象时候传入参数sql语句&#xff0c;在执行对象在执行方法时候就不用再传入sql语句&#xff1b; 数据库索引一般是从1开始&#xff0c;java对象一般是从…

Linux下Vi/Vim的使用方法

本文介绍了vi (vim)的基本使用方法&#xff0c;但对于普通用户来说基本上够了&#xff01;i/vim的区别简单点来说&#xff0c;它们都是多模式编辑器&#xff0c;不同的是vim 是vi的升级版本&#xff0c;它不仅兼容vi的所有指令&#xff0c;而且还有一些新的特性在里面。例如语法…

JDBC管理事务

一、事务概念&#xff1a;打包一起的多个步骤的业务操作&#xff0c;要么同事成功&#xff0c;要么同时失败&#xff0c;则需要用事务管理&#xff1b; 二、代码实现 转载于:https://www.cnblogs.com/wmqiang/p/11600776.html

Android数据的四种存储方式SharedPreferences、SQLite、Content Provider和File (二) —— SQLite...

SQLite是一种转为嵌入式设备设计的轻型数据库&#xff0c;其只有五种数据类型&#xff0c;分别是&#xff1a; NULL&#xff1a; 空值 INTEGER&#xff1a; 整数 REAL&#xff1a; 浮点数 TEXT&#xff1a; 字符串 BLOB&#xff1a; 大数据 在SQLite中&#xff0c;并没有专门设…

根据企业信息化应用需求来分析工作流平台的选型

随着企业信息化建设的发展&#xff0c;选择一个能快速满足个性化需求并灵活稳健的系统架构是企业信息化建设成功的基础&#xff0c;这已经成为一个不争的事实。工作流平台软件作为一个中间件产品&#xff0c;在企业信息系统架构中对于业务流程管理、快速开发及高效维护起着相当…

excel 某个单元格不是等于空值_这些稀奇古怪的符号,却是Excel高手们常玩的!...

Excel高手的世界&#xff0c;刚接触excel的同学们&#xff0c;真还不懂。高手们在编写excel函数公式&#xff0c;经常会玩大括号({})、双减号(--)、百分号(%)、连接空值(&"")等等稀奇古怪的符号&#xff0c;看得我们是一愣愣的。当然这些进阶的思路也是excel帮助…

Cookie会话技术

java web动态资源有Servlet和JSP&#xff1b; HTTP协议是无状态的&#xff0c;即每次请求响应和其他的互补相关&#xff0c;所以要共享数据&#xff0c;需要会话技术&#xff1b; 一、概念 二、Cookie会话技术 代码写在服务器端&#xff0c;设置Cookie和发送Cookie以及接收Cook…

all any 或 此运算符后面必须跟_好好跟大家聊聊,最全面的 Python 重点

来源&#xff1a;二十一 链接&#xff1a;https://segmentfault.com/a/1190000018737045由于总结了太多的东西&#xff0c;所以篇幅有点长&#xff0c;这也是我"缝缝补补"总结了好久的东西。Py2 VS Py3print成为了函数&#xff0c;python2是关键字不再有unicode对…

myeclipse2014删除antlr-2.7.2.jar--解决struts和hibernate包冲突

方式一&#xff1a; 要求眼疾手快&#xff0c;在workspace下的D:\myeclipse2014workspace\.metadata\.me_tcat7\webapps\工程名\WEB-INF\lib中将antlr-2.7.2.jar删除。此法&#xff0c;每次启动都会讲jar包有增加进去&#xff0c;在程序刚将antlr-2.7.2.jar添加进来的时候立刻删…

javascript读写本机文本文件

近日在工作中遇到了一个情况&#xff1a;一张纯html的网页&#xff0c;用它一条一条输入数据&#xff0c;然后由JS运算出结果&#xff08;这些数据多半都是临时的&#xff0c;所以也没考虑保存到数据库&#xff09;&#xff0c;每次用完后换台电脑或出去搞活动现场演示时&#…

主板模式的两项通用性接口

主板模式的两项<通用性>接口by 高煥堂典型的主板模式(Motherboard pattern)提供了两个通用性接口&#xff0c;也就是&#xff1a;CI和<I>接口。如下图&#xff1a;(图-1) 这两个接口的典型关系&#xff0c;就如下图&#xff1a; (图-2) 这个CI接口的exe…

Session会话技术

一、概念和快速入门 其中&#xff0c;一次会话则关闭浏览器后服务器端的Session数据就会清除&#xff1b; 二、原理 三、session详解 1、 2、 服务器关闭&#xff0c;内存销毁&#xff0c;开启服务要向系统底层资源申请内存&#xff1b; 创建对象分配地址值是随机的&#xff1b…

Spark MaprLab-Auction Data分析

2019独角兽企业重金招聘Python工程师标准>>> 一、环境安装 1.安装hadoop http://my.oschina.net/u/204498/blog/519789 2.安装spark 3.启动hadoop 4.启动spark 二、 1.数据准备 从MAPR官网上下载数据DEV360DATA.zip并上传到server上。 [hadoophftclclw0001 spark-1.…

labimage 怎样旋转图片_大理石旋转楼梯的测量方法,你学会了吗?

楼梯踏步使用什么材料比较好?大理石、木材以及瓷砖都是不错的选择大家可以根据自家的要求和经济条件进行选择天然大理石花色非常丰富在做了防护之后&#xff0c;光泽度就更加高端大气大理石本身不易变形硬度高&#xff0c;磨性强&#xff0c;组织缜密能够保证长期不变形&#…

session案例之验证码

一、需求分析 其中&#xff0c;一张图片就是一个单独的请求&#xff1b; 一个验证验证码的Servlet&#xff0c;还有一个验证用户名和密码的Servlet&#xff0c;两次都可能有错误信息返回到前端页面&#xff0c;所以前面页面要从request域中获取返回的错误信息&#xff1b; 登录…

php spry文本域_《PHP和MySQL Web 开发》第8章 设计Web数据库

封面人物刘承羽前言这是我学习《PHP和MySQL Web 开发》的读书笔记&#xff0c;一些重要的知识点我会记录下来&#xff0c;当然只会写我觉得重要的。如果有幸有人看到这个学习笔记了&#xff0c;你要结合着书看&#xff0c;不要光看这个笔记。在笔记里我会记录一些我学习中遇到的…