POI之Excel单元格合并边框问题

时间:2021-02-17 06:15:52

开心一笑

狼崽从出生就吃素。狼爸狼妈绞尽脑汁训练狼崽捕猎。终于有天狼爸狼妈欣慰地看到儿子狂追兔子。狼崽抓住兔子凶相毕露恶狠狠地说:小子!把胡萝卜交出来!

视频教程

大家好,我录制的视频《Java之优雅编程之道》已经在CSDN学院发布了,有兴趣的同学可以购买观看,相信大家一定会收获到很多知识的。谢谢大家的支持……

视频地址:http://edu.csdn.net/lecturer/994

提出问题

工作中碰到的问题,单元格合并后边框显示不全
如图:

POI之Excel单元格合并边框问题

上图的代码如下:

package com.hwy.test;

import org.apache.poi.hssf.usermodel.HSSFCell;
import org.apache.poi.hssf.usermodel.HSSFCellStyle;
import org.apache.poi.hssf.usermodel.HSSFSheet;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.apache.poi.ss.usermodel.Cell;
import org.apache.poi.ss.usermodel.CellStyle;
import org.apache.poi.ss.usermodel.Row;
import org.apache.poi.ss.util.CellRangeAddress;

import java.io.FileOutputStream;

/**
* Created by Ay on 2016/4/16.
*/

public class PoiCellRangeAddress {

public static void main(String[] args) {

//新建excel报表
HSSFWorkbook excel = new HSSFWorkbook();
//添加一个sheet,名字叫"我的POI之旅"
HSSFSheet hssfSheet = excel.createSheet("我的POI之旅");

//单元格范围 参数(int firstRow, int lastRow, int firstCol, int lastCol)
CellRangeAddress cellRangeAddress =new CellRangeAddress(3, 3, 0, 20);

//在sheet里增加合并单元格
hssfSheet.addMergedRegion(cellRangeAddress);
//生成第一行
Row row = hssfSheet.createRow(3);
Cell first = row.createCell(0);
first.setCellValue("合并单元格");

HSSFCellStyle cellStyle = excel.createCellStyle();
cellStyle.setAlignment(CellStyle.ALIGN_CENTER);
//下边框
cellStyle.setBorderBottom(HSSFCellStyle.BORDER_THIN);
//左边框
cellStyle.setBorderLeft(HSSFCellStyle.BORDER_THIN);
//上边框
cellStyle.setBorderTop(HSSFCellStyle.BORDER_THIN);
//右边框
cellStyle.setBorderRight(HSSFCellStyle.BORDER_THIN);
//只设置第一个单元格的边框
first.setCellStyle(cellStyle);

FileOutputStream fout = null;
try{
fout = new FileOutputStream("D:/students.xls");
excel.write(fout);
fout.close();
}catch (Exception e){
e.printStackTrace();
}
}

}

解决问题

解决问题也是比较简单,就是逐个给单元格设置边框就可以了

代码如下:

package com.hwy.test;

import org.apache.poi.hssf.usermodel.HSSFCell;
import org.apache.poi.hssf.usermodel.HSSFCellStyle;
import org.apache.poi.hssf.usermodel.HSSFSheet;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.apache.poi.ss.usermodel.Cell;
import org.apache.poi.ss.usermodel.CellStyle;
import org.apache.poi.ss.usermodel.Row;
import org.apache.poi.ss.util.CellRangeAddress;

import java.io.FileOutputStream;

/**
* Created by Ay on 2016/4/16.
*/

public class PoiCellRangeAddress {

public static void main(String[] args) {

//新建excel报表
HSSFWorkbook excel = new HSSFWorkbook();
//添加一个sheet,名字叫"我的POI之旅"
HSSFSheet hssfSheet = excel.createSheet("我的POI之旅");

//单元格范围 参数(int firstRow, int lastRow, int firstCol, int lastCol)
CellRangeAddress cellRangeAddress =new CellRangeAddress(3, 3, 0, 20);

//在sheet里增加合并单元格
hssfSheet.addMergedRegion(cellRangeAddress);
//生成第一行
Row row = hssfSheet.createRow(3);
Cell cell = null;
HSSFCellStyle cellStyle = null;
//为每个单元格设置边框,问题就解决了
for(int i=0;i<=20;i++){
cell = row.createCell(i);
if(i == 0){
cell.setCellValue("合并单元格");
}
cellStyle = excel.createCellStyle();
cellStyle.setAlignment(CellStyle.ALIGN_CENTER);
//下边框
cellStyle.setBorderBottom(HSSFCellStyle.BORDER_THIN);
//左边框
cellStyle.setBorderLeft(HSSFCellStyle.BORDER_THIN);
//上边框
cellStyle.setBorderTop(HSSFCellStyle.BORDER_THIN);
//右边框
cellStyle.setBorderRight(HSSFCellStyle.BORDER_THIN);
cell.setCellStyle(cellStyle);
}
FileOutputStream fout = null;
try{
fout = new FileOutputStream("D:/students.xls");
excel.write(fout);
fout.close();
}catch (Exception e){
e.printStackTrace();
}
}

}

生成效果图如下:

POI之Excel单元格合并边框问题

读书感悟

  • 只有梦想要去看星星的,才有可能登陆月球
  • 不明白的事千万不要去做,不懂不可怕,不懂装懂才会最糟糕
  • 负债,大多数就是由于欲望超过能力而引起的