为什么不居中(CellRangeAddress),关于excel导出合并单元格

本文探讨了一次在Java中导出Excel时遇到的合并单元格和居中问题。原有的代码实现没有包含合并单元格的功能,通过分析和改进,详细介绍了如何设置HSSFCellStyle的居中样式,以及如何使用CellRangeAddress动态合并单元格。作者建议在封装公共方法时考虑使用注解来处理更复杂的Excel导出需求。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、最近做一个导出excel需求,按理说很简单,但是发现写公共方法的哥们儿并没有搞合并单元格,而且也不太熟悉他的那种写法,所以简单研究了下,和大家讨论,至少思路千万条,越想越明了
1、之前的写法简单看下,不晓得从哪个网上拷贝的,哈哈。大概思路是:定义三个数组(导出excel实体的字段名,表头名,每列宽度设置),通过反射获取这些参数。
在这里插入图片描述
2、接下来具体看封装的ExeclUtils工具类,反射就不在这赘述了,重点说HSSFCellStyle样式的设置,其中有2个居中(垂直居中和水平居中)。

// 设置水平垂直居中方式
HSSFCellStyle style = workbook.createCellStyle();
style.setAlignment(HSSFCellStyle.ALIGN_CENTER);
style.setVerticalAlignment(HSSFCellStyle.VERTICAL_CENTER);
...
// 中间省略
// 单元格创建、设置内容和样式(真正生效一定是样式被设置到单元格上)
HSSFCell cell = row1.createCell(j);
cell.setCellValue(value[j]);
cell.setCellStyle(style );
// 按理说这2个设置后,合并单元格就可以居中了,但是却遗漏了一个点,就是单元格合并是动态的,需要明确单元格合并数,不然会出现,单元格是合并了,但是单元格是上水平居中。

3、合并单元格居中,单元格如果是动态的,那么你就要明确给CellRangeAddress几行几列合并多少个。

// 合并单元格,四个参数分别是行号的起止、列号的起止,比如下面这个,列号相同,都是变量k,说明只是单元格合并行号
CellRangeAddress range = new CellRangeAddress(i - temp + 1, i, k, k);
sheet.addMergedRegion(range);

4、毕竟是公共类,为了不影响已有功能,简单开了一个分支出来写需要合并单元格的需求,方法不要太多,但是如果是我封装,我还是会定义一个注解,然后反射高度处理更多关于excel导入导出所需要求。

/**
*  一个定制化合并单元格代码简单示例。1、需求只合并行号。2、什么情况相邻行能合并
*/
@SuppressWarnings({
    "deprecation", "unchecked" 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值