复杂的POI导出Excel表格(多行表头、合并单元格)

这篇博客介绍了如何使用Java的POI库来导出包含多行表头和合并单元格的Excel表格。文中详细讲解了HSSFWorkbook的用法,并提供了创建标题样式、表头样式和内容样式的代码示例,适用于需要复杂格式的Excel导出场景。
摘要由CSDN通过智能技术生成

 poi导出excel有两种方式:

 第一种:从无到有的创建整个excel,通过HSSFWorkbook,HSSFSheet HSSFCell, 等对象一步一步的创建出工作簿,sheet,和单元格,并添加样式,数据等。

第二种:通过excel.xls 模板的方式,自己在桌面创建一个excel, 然后修改这个excel为模板,复制到项目中(我是放在根目录下),再然后读取模板,修改模板,给模板填充数据,最后把模板写入到另外一个excel2.xls中(硬盘中的)。 按我自己的理解,这种方式只适合,需要导出的内容是固定格式的,只需要填充一次数据的 情况。比如简历。

本文内容如下:

        1. 使用 HSSFWorkbook 对象 实现excel导出。一般是导出excel2003

        2. 使用 XSSFWorkbook 对象实现excel导出。 一般是导出excel2007

        3. 使用 SXSSFWorkbook 对象实现excel导出。 一般是导出百万级数据的excel

        4. 使用 template.xls 格式模板,实现excel导出。 一般是导出有固定字段的excel

————————————————

本文介绍 HSSFWorkbook 导出Excel多行表头、合并单元格的表格

Java代码如下:

/**
     *  导出excel (HSSFWorkbook)
     */
    public void exportExcel() {
        
        /** 第一步,创建一个Workbook,对应一个Excel文件  */
        HSSFWorkbook wb = new HSSFWorkbook();  
        
        /** 第二步,在Workbook中添加一个sheet,对应Excel文件中的sheet  */
        HSSFSheet sheet = wb.createSheet("excel导出标题");
       
        /** 第三步,设置样式以及字体样式*/
        HSSFCellStyle titleStyle = createTitleCellStyle(wb);
        HSSFCellStyle headerStyle = createHeadCellStyle(wb);
        HSSFCellStyle contentStyle = createContentCellStyle(wb);
        
         /** 第四步,创建标题 ,合并标题单元格 */
        // 行号
        int rowNum = 0;
        // 创建第一页的第一行,索引从0开始
        HSSFRow row0 = sheet.createRow(rowNum++);
        row0.setHeight((short) 800);// 设置行高
        
        String title = "excel导出标题";
        HSSFCell c00 = row0.createCell(0);
        c00.setCellValue(title);
        c00.setCellStyle(titleStyle);
        // 合并单元格,参数依次为起始行,结束行,起始列,结束列 (索引0开始)
        sheet.addMergedRegion(new CellRangeAddress(0, 0, 0, 6));//标题合并单元格操作,6为总列数 
        
        // 第二行
        HSSFRow row1 = sheet.createRow(rowNum++);
        row1.setHeight((short) 500);
        String[] row_first = {"填表单位:", "", "", "", "", " 2019年第2季度 ", ""};
        for (int i = 0; i < row_first.length; i++) {
            HSSFCell tempCell = row1.createCell(i);
            tempCell.setCellStyle(headerStyle);
            if (i == 0) {
                tempCell.setCellValue(row_first[i] + "测试单位");
            } else if (i == 5) {
                tempCell.setCellStyle(headerStyle);
                tempCell.setCellValue(row_first[i]);
            } else
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值