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

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

开心一笑

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

提出问题

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

POI之Excel单元格合并边框问题_第1张图片

上图的代码如下:

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单元格合并边框问题_第2张图片

读书感悟

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

你可能感兴趣的:(poi)