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

本文介绍了如何使用Java的POI库来导出Excel文件,并详细讲解了如何合并单元格以及设置边框的方法,是Java开发者进行Excel操作的重要参考资料。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值