POI 导出Excel合并单元格后部分边框不显示

时间:2024-03-04 18:49:10

用户需要导出自定义表格,其中合并单元格样式遇到的问题,合并后只显示第一行第一列的边框,其他边框不显示,于是遍查百度,寻到一点思路

①了解Excel绘制原理

②了解绘制Excel顺序

③绘制Excel单元格的三种方法

先传一张效果图

下面来解释一下上面说的三点

首先,创建了表格的行和列后,再绘制表格样式

其次,先创建行,再创建列,合并单元格前要先把要合并的行数和列数创建完成,然后通过sheet.getrow()来获取具体的行数,设置表格样式。比如:想要得到上面样式的表格首先要创建四行sheet.createrow(4),设置第一个合并单元格样式,首先要sheet.getrow(行数)。

最后,三种创建表格的样式的方法CellRangeAddress,Region,RegionUtil.setBorderBottom(设置单元格样式,RegionUtil为import org.apache.poi.ss.util.RegionUtil;)

前两种方法网上有很多具体的例子,这里就不赘述了

本人也尝试了前两种方式,但是都不能实现上述Excel合并效果

我使用的是第三种方法,代码如下:

和上面的图不一致,但是效果可以实现,结合上一篇导出excel可以试一试,

特别提示:Excel绘制一定要整体布局,按行布局,注意先后顺序,否则容易出现样式问题。

希望可以帮助需要的人,还是要多多练习哦!

row=sheet.createRow(11);
row=sheet.createRow(12);
row=sheet.createRow(13);
row=sheet.createRow(14);
HSSFCell cell=null;
row=sheet.getRow(11);
cell=row.createCell(18);
row.setHeight((short)460);
cra=new CellRangeAddress((short) 11 , (short) 14 , (short)18, (short)18);
sheet.addMergedRegion(cra);
RegionUtil.setBorderBottom(1, cra, sheet,workbook); // 下边框
RegionUtil.setBorderLeft(1, cra, sheet,workbook); // 左边框
RegionUtil.setBorderRight(1, cra, sheet,workbook); // 有边框
RegionUtil.setBorderTop(1, cra, sheet,workbook); // 上边框
cell.setCellValue("");


ResponseFlagEntity jr=new ResponseFlagEntity();
try{
response.setContentType("application ns.ms-excel");
response.setHeader("Content-disposition", "attachment;filename="
+ URLEncoder.encode("测试.xls", "UTF-8"));
response.setHeader("Pragma", "No-cache");
response.setHeader("Expires", "0");
response.setHeader("Cache-Control",
"must-revalidate, post-check=0, pre-check=0");
OutputStream outputStream = response.getOutputStream();
workbook.write(outputStream);
outputStream.flush();
outputStream.close();

}