NPOI 教程 - 2.1单元格合并
来源:http://liyingchun343333.blog.163.com/blog/static/3579731620091018212990/
合并单元格在制作表格时很有用,比如说表格的标题就经常是把第一行的单元格合并居中。那么在NPOI中应该如何实现单元格的合并呢?
为了实现这一功能,NPOI引入了新的概念,即Region,因为合并单元格,其实就是设定一个区域。下面说一下Region类的参数,Region总共有4个参数,如下所示
| Region的参数 | 说明 | 
| FirstRow | 区域中第一个单元格的行号 | 
| FirstColumn | 区域中第一个单元格的列号 | 
| LastRow | 区域中最后一个单元格的行号 | 
| LastColumn | 区域中最后一个单元格的列号 | 
由于单元格的合并都是在表的基础上建立的,所以我们得先建Sheet:
HSSFWorkbook hssfworkbook = new HSSFWorkbook();
HSSFSheet sheet = hssfworkbook.CreateSheet("new sheet");
接下来我们根据实际场景来做一些演示。
场景一 标题行的合并
这种场景是最常见的,比如说我们要建立一张销售情况表,英文叫Sales Report
![]()
我们先设置居中和字体样式,这里我们采用20号字体,代码如下:
HSSFRow row = sheet.CreateRow(0);
HSSFCell cell = row.CreateCell(0);
cell.SetCellValue("Sales Report");
HSSFCellStyle style = hssfworkbook.CreateCellStyle();
style.Alignment = HSSFCellStyle.ALIGN_CENTER;
HSSFFont font = hssfworkbook.CreateFont();
font.FontHeight = 20*20;
style.SetFont(font);
cell.CellStyle = style;
要产生图中的效果,即把A1:F1这6个单元格合并,然后添加合并区域:
sheet.AddMergedRegion(new Region(0, 0, 0, 5));
场景二 多行合并
看完场景一,你可不要认为多行合并就需要一行一行做,其实也只需要一行代码,比如说我们要把C3:E5合并为一个单元格,那么就可以用下面的代码:
![]()
sheet.AddMergedRegion(new Region(2, 2, 4, 4));
提示 即使你没有用CreateRow和CreateCell创建过行或单元格,也完全可以直接创建区域然后把这一区域合并,Excel的区域合并信息是单独存储的,和RowRecord、ColumnInfoRecord不存在直接关系。
本节将围绕“对齐”选项卡中的设置展开,虽然实际上你会发现该选项卡中的很多设置和对齐没有什么关系。合并单元格已经在2.2.2节讲过了,这里就不提了。
![]()
首先我们用代码创建必要的单元格,代码如下:
HSSFWorkbook hssfworkbook = new HSSFWorkbook();
HSSFSheet sheet1 = hssfworkbook.CreateSheet("Sheet1");
HSSFRow row = sheet1.CreateRow(0);
row.CreateCell(0).SetCellValue("Test");
这里我们假设在A0单元格中加入了文本Test。
请注意接下来我们要做的所有操作都是在CellStyle的基础上完成的,所以我们创建一个HSSFCellStyle:
HSSFCellStyle style=hssfworkbook.CreateCellStyle();
水平对齐
这里用的是HSSFCellStyle.Alignment,默认值自然是常规,即HSSFCellStyle.ALIGN_GENERAL。
如果是左侧对齐就是
style.Alignment = HSSFCellStyle.ALIGN_LEFT;
如果是居中对齐就是
style.Alignment = HSSFCellStyle.ALIGN_CENTER;
如果是右侧对齐就是
style.Alignment = HSSFCellStyle.ALIGN_RIGHT;
如果是跨列举中就是
style.Alignment = HSSFCellStyle.ALIGN_CENTER_SELECTION;
如果是两端对齐就是
style.Alignment = HSSFCellStyle.ALIGN_JUSTIFY;
如果是填充就是
style.Alignment = HSSFCellStyle.ALIGN_FILL;
注意:以上选项仅当有足够的宽度时才能产生效果,不设置宽度恐怕看不出区别。
垂直对齐
这里用的是HSSFCellStyle.VerticalAlignment,默认值为居中,即HSSFCellStyle.VERTICAL_CENTER
如果是靠上就是
style.VerticalAlignment=HSSFCellStyle.VERTICAL_TOP
如果是居中就是
style.VerticalAlignment=HSSFCellStyle.VERTICAL_CENTER
如果是靠下就是
style.VerticalAlignment=HSSFCellStyle.VERTICAL_BOTTOM
如果是两端对齐就是
style.VerticalAlignment=HSSFCellStyle.VERTICAL_JUSTIFY
注意:以上选项仅当有足够的高度时才能产生效果,不设置高度恐怕看不出区别。
自动换行
自动换行翻译成英文其实就是Wrap的意思,所以这里我们应该用WrapText属性,这是一个布尔属性
style.WrapText = true;
效果如下所示:
![]()
文本缩进
![]()
这是一个不太引人注意的选项,所以这里给张图出来,让大家知道是什么,缩进说白了就是文本前面的空白,我们同样可以用属性来设置,这个属性叫做Indention。
style.Indention = 3;
文本旋转
文本方向大家一定在Excel中设置过,上图中就是调整界面,主要参数是度数,那么我们如何在NPOI中设置呢?
style.Rotation=(short)90;
以上代码是把单元格A1中的文本逆时针旋转90度,等同于下图中的设置:
![]()
请注意,这里的Rotation取值是从-90到90,而不是0-180度。
最后别忘了把样式变量style赋给HSSFCellStyle.CellStyle,否则就前功尽弃了,呵呵!
NPOI 教程 - 2.1单元格合并的更多相关文章
- NPOI 生成Excel (单元格合并、设置单元格样式:字段,颜色、设置单元格为下拉框并限制输入值、设置单元格只能输入数字等)
		
NPIO源码地址:https://github.com/tonyqus/npoi NPIO使用参考:源码中的 NPOITest项目 下面代码包括: 1.包含多个Sheet的Excel 2.单元格合并 ...
 - NPOI.dll 用法。单元格,样式,字体,颜色,行高,宽度。读写excel
		
NPOI.dll 用法.单元格,样式,字体,颜色,行高,宽度.读写excel 转载:http://yuncode.net/code/c_531e679b3896495 view source prin ...
 - SNF快速开发平台MVC-表格单元格合并组件
		
1. 表格单元格合并组件 1.1. 效果展示 1.1.1. 页面展现表格合并单元格 图 4.1 1.1.2. 导出excel合并单元格 图 4.2 1.2. 调用说 ...
 - ExtJS 4.2 Grid组件的单元格合并
		
ExtJS 4.2 Grid组件本身并没有提供单元格合并功能,需要自己实现这个功能. 目录 1. 原理 2. 多列合并 3. 代码与在线演示 1. 原理 1.1 HTML代码分析 首先创建一个Grid ...
 - asp.net使用控件datagrid实现表头单元格合并
		
合并的要点: 1.datagid的单元格合并原理是table中tr,td的布局实现; 2.合并的时机实在其datagridcreate事件中实现; 3.认识一个对象TableCellCollectio ...
 - DataGridView单元格合并
		
本文章转载:http://www.cnblogs.com/xiaofengfeng/p/3382094.html 图: 代码就是如此简单 文件下载:DataGridView单元格合并源码 也可以参考: ...
 - devexpress实现单元格合并以及依据条件合并单元格
		
1.devexpress实现单元格合并非常的简单,只要设置属性[AllowCellMerge=True]就可以了,实现效果如下图: 2.但是在具体要求中并非需要所有的相同单元格都合并,可能需要其他的条 ...
 - 关于table动态添加数据 单元格合并 数组合并
		
var newArr = [ {"BranchID":1,"BranchName":"城二","BranchFullName&qu ...
 - excel技巧--单元格合并与拆分
		
如果要将上图的地区列做成下图的合并单一列: 有如下做法: (以下图表格为例) 1.选择要排序的表格,点击“开始”-->排序和筛选-->自定义排序.在对话框选择“业务项目”进行排序: 2.选 ...
 
随机推荐
- Android下百度地图开发(一):基础地图展示
			
最终效果如: 这个需要详细说下,准备工作较为繁琐. 第一步:去百度申请一个开发者账号,新建一个android应用,会让你输入开发者SHA1,目前我只拿到开发版SHA1,发布版那里也填的是这个. 获取方 ...
 - .net DropDownList静态联动
			
1.前台 <span id="spnClient" style="margin-left: 30px; margin-top: 10px"> < ...
 - Sublime、Webstorm等在APICloud平台上全面支持WiFi真机同步和实时预览功能
			
APICloud工具插件包括APICloud Studio.Sublime Text和Webstorm全面为开发者提供iOS和Android平台真机同步调试功能,不仅可以通过USB方式进行APP真机同 ...
 - MQTT——java简单测试(二)
			
服务端代码: package bsit.mqtt.demo.one_way; import org.eclipse.paho.client.mqttv3.MqttClient; import org. ...
 - 可爱的Python_课后习题_CDay−2 完成核心功能
			
1. 在前文的grep 实现例子中,没有考虑子目录的处理方式,因为如果直接open 目录进行读grep 是古老实用且高效的模式文本匹配工具,在所有的Unix/Linux 系统中都会默认安装,它最常做的 ...
 - WIN8,开机启动 需要管理员权限的程序
			
1. 用WPF开发,需要管理员权限并开机启动,以写注册表的方式实现.仅写注册表只能启动一般权限的程序. 2. 考虑这样实现: 程序以一般权限启动,启动以后申请管理员权限. 实现: App类中重写OnS ...
 - js判断手机 横屏模式
			
js判断手机 横屏模式 方法名称:orientation 实例: if(window.orientation!=0){ var obj=document.getElementById('orienta ...
 - 解决Ubuntu "E: 软件包 vim 还没有可供安装的候选者"问题
			
sudo apt-get update 试着运行这段代码后再尝试sudo apt-get install 安装语句
 - 使用EF Oracle实现DevExpress绑定大数据的ServerMode模式
			
前提:需要引入EntityFramework组件,注意几个使用点后使用上其实比较简单. 一.引入Oracle EF支持组建 1.可手动引入附件中的DLL(需手动合并web.config配置) 2.也可 ...
 - SASS 初学者入门
			
SASS 初学者入门 Sass 是什么? Sass 是Syntactically Awesome Stylesheete Sass的缩写,是由Hampton Catlin开发的. Sass可以简化你的 ...