来源: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单元格合并的更多相关文章

  1. NPOI 生成Excel (单元格合并、设置单元格样式:字段,颜色、设置单元格为下拉框并限制输入值、设置单元格只能输入数字等)

    NPIO源码地址:https://github.com/tonyqus/npoi NPIO使用参考:源码中的 NPOITest项目 下面代码包括: 1.包含多个Sheet的Excel 2.单元格合并 ...

  2. NPOI.dll 用法。单元格,样式,字体,颜色,行高,宽度。读写excel

    NPOI.dll 用法.单元格,样式,字体,颜色,行高,宽度.读写excel 转载:http://yuncode.net/code/c_531e679b3896495 view source prin ...

  3. SNF快速开发平台MVC-表格单元格合并组件

    1.   表格单元格合并组件 1.1.      效果展示 1.1.1.    页面展现表格合并单元格 图 4.1 1.1.2.    导出excel合并单元格 图 4.2 1.2.      调用说 ...

  4. ExtJS 4.2 Grid组件的单元格合并

    ExtJS 4.2 Grid组件本身并没有提供单元格合并功能,需要自己实现这个功能. 目录 1. 原理 2. 多列合并 3. 代码与在线演示 1. 原理 1.1 HTML代码分析 首先创建一个Grid ...

  5. asp.net使用控件datagrid实现表头单元格合并

    合并的要点: 1.datagid的单元格合并原理是table中tr,td的布局实现; 2.合并的时机实在其datagridcreate事件中实现; 3.认识一个对象TableCellCollectio ...

  6. DataGridView单元格合并

    本文章转载:http://www.cnblogs.com/xiaofengfeng/p/3382094.html 图: 代码就是如此简单 文件下载:DataGridView单元格合并源码 也可以参考: ...

  7. devexpress实现单元格合并以及依据条件合并单元格

    1.devexpress实现单元格合并非常的简单,只要设置属性[AllowCellMerge=True]就可以了,实现效果如下图: 2.但是在具体要求中并非需要所有的相同单元格都合并,可能需要其他的条 ...

  8. 关于table动态添加数据 单元格合并 数组合并

    var newArr = [ {"BranchID":1,"BranchName":"城二","BranchFullName&qu ...

  9. excel技巧--单元格合并与拆分

    如果要将上图的地区列做成下图的合并单一列: 有如下做法: (以下图表格为例) 1.选择要排序的表格,点击“开始”-->排序和筛选-->自定义排序.在对话框选择“业务项目”进行排序: 2.选 ...

随机推荐

  1. SQL Server中事务、锁定和阻塞

    事务是什么 在SQL Server中事务是构成一个工作逻辑单元的一系列任务,也就说多个任务放在一起执行,这些任务要么全部执行成功,要么全部执行失败. 通过事务我们可以保证数据的完整性,例如:用户A给用 ...

  2. TortoiseGit安装详解

    一:写该文章目的 最近换了一份新工作,新公司的源码管理都是使用GIT,习惯了之前的TFS和SVN进行项目源码管理和团队开发,第一次使用GIT进行团队开发和源码管理,颇有一些不习惯,花了一天时间终于把G ...

  3. java字典序排序

    import java.util.Comparator; import java.util.ArrayList; import java.util.Collections; public class ...

  4. visio取消自动粘附

    有时候画直线的时候需要直线摆在任意位置,这个时候自动粘附就很碍事了,总是自动把你的直线给摆到粘附的特殊位置上 如何取消: 视图->视觉帮助(点右下角的小箭头)->当前活动的->取消勾 ...

  5. jqgrid笔记

    //重置列表请求url var url = "url?name="+name; $(grid_list_selector).jqGrid('setGridParam',{url:u ...

  6. AIX系统的日常监控维护

    UNIX操作系统在各电信运营商中应用非常广泛,各种业务管理系统的后台服务器几乎都采用UNIX操作系统.AIX作为UNIX操作系统中的一种, 因其稳定性高.兼容性好的特点受到众多系统管理员的欢迎.下面提 ...

  7. swift基础:第三部分:对第一部分的补充说明

    今天是我学习swift的第二天,虽然我和swift的距离有点远,但我相信,我会慢慢的接近这门语言的.好了,我们聊聊昨天晚上的事吧,昨天晚上下班早,回到家时,真是惊喜哈,宿舍那两做好了饭,等我吃饭,想对 ...

  8. paper 115:常见的概率分布(matlab作图)

    一.常见的概率分布 表1.1 概率分布分类表 连续随机变量分布 连续统计量分布 离散随机变量分布 分布 分布 二项分布 连续均匀分布 非中心 分布 离散均匀分布 (Gamma)分布 分布 几何分布 指 ...

  9. android 图片压缩

    引用:http://104zz.iteye.com/blog/1694762 第一:我们先看下质量压缩方法: private Bitmap compressImage(Bitmap image) { ...

  10. Linux字符界面安装VMware tools

    以往用VMware虚拟机都是装的桌面版,无奈实验室电脑属于老爷机,跑桌面linux实在有点吃不消,只能装个Basic Server玩玩了... 在桌面环境下装VMwaretools很简单,直接点击VM ...