POI实现合并单元格

先上代码! 

// 声明一个工作薄
 HSSFWorkbook workbook = new HSSFWorkbook();
 HSSFSheet sheet = workbook.createSheet(forderBillNo);
// 设置表格默认列宽度为20个字节
 sheet.setDefaultColumnWidth(20);
 sheet.autoSizeColumn(1, true);
// 大标题合并单元格
 CellRangeAddress cellRangeAddress = new CellRangeAddress(0, 0, 0, 18);
 sheet.addMergedRegion(cellRangeAddress);
// 生成样式
 HSSFCellStyle titleStyle = workbook.createCellStyle();
// 生成字体样式
 HSSFFont fontTitle = workbook.createFont();
 fontTitle.setFontHeightInPoints((short) 17); // 字体大小
 fontTitle.setColor(HSSFColor.BLACK.index); // 字体颜色
 fontTitle.setFontName("宋体"); // 字体
// 设置这些样式并将把字体应用到当前的样式
 titleStyle.setAlignment(CellStyle.ALIGN_CENTER);
 titleStyle.setVerticalAlignment(CellStyle.VERTICAL_CENTER);
 titleStyle.setFont(fontTitle);
// 大标题
 HSSFRow row = sheet.createRow(0);
 row.setHeightInPoints(40);
 HSSFCell cellTitle = row.createCell(0);
 cellTitle.setCellStyle(titleStyle);
 cellTitle.setCellValue("生产投料单");

这段代码完成了一个跨19列的大标题设置,接下来细说。

语法如下:

//起始行,结束行,起始列,结束列
sheet.AddMergedRegion(new CellRangeAddress(index["firstRow"], index["lastRow"], index["firstCol"], index["lastCol"]));

示例:从0行开始到0行结束 (第一行),从第0列到第18列(跨19列)。

 CellRangeAddress cellRangeAddress = new CellRangeAddress(0, 0, 0, 18);

其实很简单,只是调用了个方法而已。

使用的时候会发现 CellRangeAddress 提示过期,其实只要导包的时候别导hssf 的就行。

https://blog.csdn.net/Alone_in_/article/details/100699482

---------------------------这段是在网上看到的,觉得有用就记录下来啦~~-----------------

自适应列宽度:

补充:要在写完所有单元格后再调用自适应这个方法。

sheet.autoSizeColumn(1); 

sheet.autoSizeColumn(1, true);

这两种方式都是自适应列宽度,但是注意这个方法在后边的版本才提供,poi的版本不要太老。 注意:第一个方法在合并单元格的的单元格并不好使,必须用第二个方法。

sheet.setColumnWidth(m, “列名”.getBytes().length*2*256);

这个方法是计算字符串的长度,以便设置列宽,该方法在解决中文的问题上比较好,前面两种方法对中文不好好用。。。。

还有在自适应宽度的时候,有时候遇到单元格是公式单元格,自适应不起作用,那是因为单元格存的是公式,并不是真正的数据,解决方法:

HSSFFormulaEvaluator evaluator = new HSSFFormulaEvaluator(sheet.getWorkbook());

CellValue cell71Val = evaluator.evaluate(cell71);

cell71.setCellValue(cell71Val.getNumberValue());

将格式化后的数据再次set进去,就是真正的值了。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值