poi导出excel复杂表头表格数据

import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import org.apache.poi.hssf.usermodel.HSSFCell;
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.junit.Test;

public class ExcelExport {
    
     @Test
     public void createExcel() throws IOException {

        //创建HSSFWorkbook对象(excel的文档对象)
        HSSFWorkbook wb = new HSSFWorkbook();
        //建立新的sheet对象(excel的表单)
        HSSFSheet sheet = wb.createSheet("成绩表");
        //在sheet里创建第一行,参数为行索引(excel的行),可以是0~65535之间的任何一个
        HSSFRow row1 = sheet.createRow(0);
        //创建单元格(excel的单元格,参数为列索引,可以是0~255之间的任何一个
        HSSFCell cell = row1.createCell(0);
        //设置单元格内容
        cell.setCellValue("时间");
        //合并单元格CellRangeAddress构造参数依次表示起始行,截至行,起始列, 截至列
        sheet.addMergedRegion(new CellRangeAddress(0,1,0,0));
        //创建单元格(excel的单元格,参数为列索引,可以是0~255之间的任何一个
        HSSFCell cell12 = row1.createCell(1);
        //设置单元格内容
        cell12.setCellValue("数据1");
        //合并单元格CellRangeAddress构造参数依次表示起始行,截至行,起始列, 截至列
        sheet.addMergedRegion(new CellRangeAddress(0,0,1,2));
        //创建单元格(excel的单元格,参数为列索引,可以是0~255之间的任何一个
        HSSFCell cell13 = row1.createCell(3);
        //设置单元格内容
        cell13.setCellValue("数据2");
        //合并单元格CellRangeAddress构造参数依次表示起始行,截至行,起始列, 截至列
        sheet.addMergedRegion(new CellRangeAddress(0,0,3,4));
        //在sheet里创建第二行,通过索引控制位置,
        HSSFRow row2 = sheet.createRow(1);
        row2.createCell(1).setCellValue("数据11");//createCell(1)位置
        row2.createCell(2).setCellValue("数据22");
        row2.createCell(3).setCellValue("数据33");
        row2.createCell(4).setCellValue("数据44");
        //在sheet里创建第三行,填充数据
        HSSFRow row3 = sheet.createRow(2);
        row3.createCell(0).setCellValue("2018-06-07");
        row3.createCell(1).setCellValue(100);
        row3.createCell(2).setCellValue(87);
        row3.createCell(3).setCellValue(90);
        row3.createCell(4).setCellValue(78);
        //输出
          FileOutputStream outputStream = new FileOutputStream(new File("d:\\成绩表.xls"));
          wb.write(outputStream);
          outputStream.close();
        /**
        //输出Excel文件
        OutputStream output=response.getOutputStream();
        //代码转中文名称
        response.addHeader("Content-Disposition", "attachment;filename="+new String ("中文名称".getBytes(),"iso-8859-1")+".xls");
        response.setContentType("application/msexcel");
        wb.write(output);
        output.close();
        **/
    }

}

结果:216d35fb9a43d103d85a297544fc006e89c.jpg

注意点:(1)前端页面调用的时候,不能用ajax请求,ajax的返回值类型是json,text,html,xml类型,不是流类型,所以无法实现文件下载。

a、隐藏表单,用提交表单的形式;

b、用window.open() 或 window.location.href();

c、创建iframe,iframe的src可以是文件地址url来直接下载文件

参考:http://langgufu.iteye.com/blog/2076373 

(2)导出文件名称可能会出现中文乱码,需要转码,

0bf76f2041a7ac937abef830c27e43ab172.jpg

(3)注意表头索引位置

转载于:https://my.oschina.net/cs20160712/blog/1840933

  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
对于导出复杂表头POI操作,你可以按照以下步骤进行: 1. 创建工作簿和工作表:使用POI的Workbook和Sheet类创建一个新的工作簿和工作表对象。 ```java Workbook workbook = new XSSFWorkbook(); Sheet sheet = workbook.createSheet("Sheet1"); ``` 2. 设置表头样式:创建CellStyle对象并设置表头的样式,例如字体、背景色、边框等。 ```java CellStyle headerStyle = workbook.createCellStyle(); Font font = workbook.createFont(); font.setBold(true); headerStyle.setFont(font); // 设置其他样式属性 ``` 3. 创建表头行:在工作表中创建一行作为表头行,并设置单元格样式。 ```java Row headerRow = sheet.createRow(0); headerRow.setHeightInPoints(25); // 设置行高 // 创建并设置表头单元格 Cell cell1 = headerRow.createCell(0); cell1.setCellValue("表头1"); cell1.setCellStyle(headerStyle); // 创建其他表头单元格 ``` 4. 合并表头单元格:使用Sheet的addMergedRegion方法合并具有相同内容的表头单元格。 ```java sheet.addMergedRegion(new CellRangeAddress(0, 0, 0, 2)); // 合并从第一列到第三列的单元格 ``` 5. 导出数据:将数据导出表格中,设置每个单元格的值和样式。 ```java Row dataRow = sheet.createRow(1); // 创建并设置数据单元格 Cell cell2 = dataRow.createCell(0); cell2.setCellValue("数据1"); // 创建其他数据单元格 ``` 6. 导出文件:使用FileOutputStream将工作簿写入到文件中。 ```java FileOutputStream fileOut = new FileOutputStream("path/to/output/file.xlsx"); workbook.write(fileOut); fileOut.close(); ``` 通过以上步骤,你可以使用POI导出带有复杂表头Excel文件。记得在代码中进行异常处理以确保正常导出
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值