java poi导出Excel合并单元格并设置边框

import org.apache.poi.hssf.usermodel.HSSFCell;
import org.apache.poi.hssf.usermodel.HSSFCellStyle;
import org.apache.poi.hssf.usermodel.HSSFRow;
import org.apache.poi.hssf.usermodel.HSSFSheet;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.apache.poi.ss.util.CellRangeAddress;
import org.apache.poi.ss.util.RegionUtil;

//写入Excel,读取模板
InputStream    stram= view.getDesktop().getWebApp().getResourceAsStream(File.separator+"Template"+File.separator+"interviewPublicity.xls");
HSSFWorkbook workbook = new HSSFWorkbook(stram);
HSSFSheet sheet = workbook.getSheetAt(0);
//写入数据
HSSFRow row = sheet.getRow(0);
HSSFCell cell = row.getCell(0);
index = 4;
//单元格格式
row = sheet.getRow(index);
cell= row.getCell(0);
HSSFCellStyle cellStyle = cell.getCellStyle();
int num = 1;
for (Entry<String, Map<String, List<BasicDBObject>>> bmd : bmdMap.entrySet()) {
    //单位
    int deptRowIndex = index;
    int deptRowEndIndex = deptRowIndex;
    //岗位集合
    for (Entry<String, List<BasicDBObject>> empList : bmd.getValue().entrySet()) {
        //岗位
        int jobRowIndex = index;
        //考生
        for (BasicDBObject emp : empList.getValue()) {
            if (index > 4) {
                row = sheet.createRow(index);
                cell= row.createCell(0);
            }
            cell.setCellValue(num++);
            cell.setCellStyle(cellStyle);
            cell= row.createCell(3);
            cell.setCellValue(emp.getString("姓名"));
            cell.setCellStyle(cellStyle);
            cell= row.createCell(4);
            cell.setCellValue(emp.getString("examCardId"));
            cell.setCellStyle(cellStyle);
            index++;
        }
        row = sheet.getRow(jobRowIndex);
        if (empList.getValue().size() > 1) {
            int jobRowEndIndex = jobRowIndex + empList.getValue().size() - 1;
            //合并单元格
            CellRangeAddress cellRange = new CellRangeAddress(jobRowIndex, jobRowEndIndex, (short) 2, (short) 2);
            sheet.addMergedRegion(cellRange);
            //添加边框
            RegionUtil.setBorderTop(1, cellRange, sheet, workbook);
            RegionUtil.setBorderBottom(1, cellRange, sheet, workbook);
            RegionUtil.setBorderLeft(1, cellRange, sheet, workbook);
            RegionUtil.setBorderRight(1, cellRange, sheet, workbook);
        }
        cell= row.createCell(2);
        cell.setCellValue(empList.getKey());
        cell.setCellStyle(cellStyle);
        
        deptRowEndIndex += empList.getValue().size();
    }
    row = sheet.getRow(deptRowIndex);
    if (deptRowEndIndex-1 > deptRowIndex) {
        //合并单元格
        CellRangeAddress cellRange = new CellRangeAddress(deptRowIndex, deptRowEndIndex-1, (short) 1, (short) 1);
        sheet.addMergedRegion(cellRange);
        //为合并单元格添加边框
        RegionUtil.setBorderTop(1, cellRange, sheet, workbook);
        RegionUtil.setBorderBottom(1, cellRange, sheet, workbook);
        RegionUtil.setBorderLeft(1, cellRange, sheet, workbook);
        RegionUtil.setBorderRight(1, cellRange, sheet, workbook);
    }
    cell= row.createCell(1);
    cell.setCellValue(bmd.getKey());
    cell.setCellStyle(cellStyle);
}
String fileName = getExamPlan().getString("bmbName")+"面试人员名单公示.xls";
ByteArrayOutputStream byteOut = new ByteArrayOutputStream();
workbook.write(byteOut);
byteOut.close();

InputStream is = new ByteArrayInputStream(byteOut.toByteArray());
Filedownload.save(is, null, fileName);//OFBIZ导出
原文地址:https://www.cnblogs.com/BobXie85/p/11174787.html