POI合并单元格并填入数据
利用POI合并单元格其实也是一个很简单的事情,就两行代码
CellRangeAddress region = new CellRangeAddress(firstRow, lastRow, firstCol, lastCol); //初始行,终止行,初始列,终止列 sheet.addMergedRegion(region);
合并单元格并不需要什么,只需要你指定工作表sheet。然后CellRangeAddress()方法的四个参数分别是合并的初始行,终止行,初始列,终止列。而且合并单元格的时候,合并后的单元格里面的内容只会保存左上角的第一个单元格的内容。
下面我举个栗子,相信你们就会懂了。
String path = "D:\\test0808\\"; //1.创建工作簿 Workbook workbook = new HSSFWorkbook(); //2.创建一个工作表 Sheet sheet = workbook.createSheet("博客园测试"); //3.创建一行 Row row1 = sheet.createRow(0); //4.创建两个个单元格 Cell cell = row1.createCell(0); Cell cell2 = row1.createCell(1); cell.setCellValue("第一个单元格"); cell2.setCellValue("第二个单元格"); FileOutputStream fileOutputStream = new FileOutputStream(path + "在家测试0802.xls"); // fileOutputStream.flush(); workbook.write(fileOutputStream); fileOutputStream.flush(); fileOutputStream.close(); System.out.println("测试成功");
}
创建的Excel文件如下
如果我对两个单元格进行合并,那么内容只会保留“第一个单元格”字样。
需要注意的是,合并单元格指定的总单元格必须大于一。也就是初始行,终止行和行差必须大于一,当初始列,终止列是用一列时。相反,初始列,终止列的列差必须大于一,当初始行,终止行是同一行时。但是有些版本就可以支持合并一个单元格,因为我在公司用的版本跟我在家的不一样,我家里的版本就能够支持合并单个单元格,这里小编就不多举例了,大家用的时候看报错信息就能够知道了。
这里做一个补充,像小编我在工作的时候就遇到一个问题,我合并单元格之后需要将数据填入信息,这时正如同上面说到的,“合并后的单元格里面的内容只会保存左上角的第一个单元格的内容”,所以我们填数据时,就应该将数据填到第一个单元格。此时我们需要用到getRow()和getCell()方法拿到第一个单元格,并写入数据.但是getCell和getRow()如果当单元格和row不存在时,会报空指针异常,所以我们一般用createCell()代替getCell().此时也是需要用sheet(工作表)才能调用getRow()方法.sheet.getRow(firstRow);
//拿到单元格,把数值放到第一列 Row mergeRow = sheet.getRow(firstRow); Cell mergeCell = mergeRow.createCell(writeSumCol); mergeCell.setCellValue(sumRent);