使用poi导出excel,及合并单元格边框显示问题。
首先创建workbook、sheet
HSSFWorkbook workbook = new HSSFWorkbook();
HSSFSheet sheet = workbook.createSheet("导出数据表");
设置合并单元格,可以使用Ragion或者CellRagionAddress,后者为较新版本。
Ragion的参数为(开始行,(short)开始列),结束行,(short)结束列)。
Region region0 = new Region(0, (short) 0, 2, (short) 0);
CellRagionAddress的参数为(开始行,结束行,开始列,结束列)。
CellRangeAddress cellRangeAddress = new CellRangeAddress(0, 2, 0, 0);
将设置合并单元格的样式添加到sheet中
sheet.addMergedRegion(region0);
创建行
HSSFRow row1 = sheet.createRow(0);
设置表格样式
HSSFCellStyle style = workbook.createCellStyle();
在行内创建单元格并赋值、设置样式
HSSFCell cell = row1.createCell(0);
cell.setCellValue(regionMap.get(region0));
cell_.setCellStyle(style);
输出路径
FileOutputStream fos;
try {
fos = new FileOutputStream(EXCEL_PATH);
workbook.write(fos);
fos.close();
} catch (Exception e) {
e.printStackTrace();
}
使用以上方式便可以导出excel了,但是由于有合并单元格,所以会出现边框显示不完全的问题,所以在创建单元格的时候,使用了Region。调用以下方法可以解决边框显示问题
使用cellRangeAddress也可以解决,代码也在下面
public static void setRegionStyle(HSSFSheet sheet, Region region,
HSSFCellStyle cs) {
for (int i = region.getRowFrom(); i <= region.getRowTo(); i++) {
HSSFRow row = HSSFCellUtil.getRow(i, sheet);
for (int j = region.getColumnFrom(); j <= region.getColumnTo(); j++) {
HSSFCell cell = HSSFCellUtil.getCell(row, (short) j);
cell.setCellStyle(cs);
}
}
}
public static void setRegionStyle(HSSFSheet sheet, CellRangeAddress region,
HSSFCellStyle cs) {
for (int i = region.getFirstRow(); i <= region.getLastRow(); i++) {
HSSFRow row = sheet.getRow(i);
if (row == null)
row = sheet.createRow(i);
for (int j = region.getFirstColumn(); j <= region.getLastColumn(); j++) {
HSSFCell cell = row.getCell(j);
if (cell == null) {
cell = row.createCell(j);
cell.setCellValue("");
}
cell.setCellStyle(cs);
}
}
}
当需要添加下面的数据时可以使用以下方法添加
public static void setValueByRowAndCol(int row, int col, String value,
HSSFSheet sheet, HSSFCellStyle style) {
HSSFRow hssfrow = sheet.getRow(row);
HSSFCell cell = null;
if (hssfrow == null) {
hssfrow = sheet.createRow(row);
cell