当前位置: 代码网 > it编程>编程语言>Java > org.apache.poi 导出excel(POI动态导出excel数据列表)

org.apache.poi 导出excel(POI动态导出excel数据列表)

2025年11月22日 Java 我要评论
通过poi包导出excel动态数据集合

1、先看封装的导出excel公共方法,看下面代码实例

package xx.xx.common.core.util.excel;

import cn.hutool.core.codec.Base64Encoder;
import org.apache.poi.hssf.usermodel.HSSFRow;
import org.apache.poi.hssf.usermodel.HSSFSheet;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.net.URLEncoder;
import java.util.List;
import java.util.Map;

/**
 * @author xxx
 * @description
 * @date 2025/05/09 17:00
 */

public class ExportExcel {
    /**
     * @param sheetName 工作表的名字
     * @param column  列名
     * @param data  需要导出的数据    ( map的键定义为列的名字 一定要和column中的列明保持一致  )
     * @param response
     */
    public static void exportExcel(String sheetName, List<String> column, List<Map<String,Object>> data, HttpServletRequest request, HttpServletResponse response){
        //创建工作薄
        HSSFWorkbook hssfWorkbook = new HSSFWorkbook();
        //创建sheet
        HSSFSheet sheet = hssfWorkbook.createSheet(sheetName);
        // 表头
        HSSFRow headRow = sheet.createRow(0);
        for (int i = 0; i < column.size(); i++){
            headRow.createCell(i).setCellValue(column.get(i));
        }

        for (int i = 0; i < data.size(); i++) {
            HSSFRow dataRow = sheet.createRow(sheet.getLastRowNum() + 1);
            for (int x = 0; x < column.size(); x++) {
                dataRow.createCell(x).setCellValue(data.get(i).get(column.get(x))==null?"":data.get(i).get(column.get(x)).toString());
            }
        }

        response.setContentType("application/vnd.ms-excel");

        try {
            //获取浏览器名称
            String agent=request.getHeader("user-agent");
            String filename=sheetName+".xls";
            //不同浏览器需要对文件名做特殊处理
            if (agent.contains("Firefox")) { // 火狐浏览器
                filename = "=?UTF-8?B?"
                        +  Base64Encoder.encode(filename.getBytes("utf-8"))
                        + "?=";
                filename = filename.replaceAll("\r\n", "");
            } else { // IE及其他浏览器
                filename = URLEncoder.encode(filename, "utf-8");
                filename = filename.replace("+"," ");
            }
            //推送浏览器
            response.setHeader("Content-Disposition","attachment;filename="+filename);
            hssfWorkbook.write(response.getOutputStream());
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}
2、再来看下调用示例,先定义表头,再映射表头与列表数据,看代码
@Override
    public void export(String entrustCode, HttpServletRequest request, HttpServletResponse response) {
        List<OrderCustoms> list = orderCustomsMapper.getOrder(entrustCode);
        //创建excel表头
        List<String> column = new ArrayList<>();
        column.add("编号");
        column.add("型号");
        column.add("品牌");
        column.add("数量");
        column.add("单价");
        //表头对应的数据
        List<Map<String,Object>> data = new ArrayList<>();
        for (int i = 0; i < list.size(); i++) {
            Map<String, Object> dataMap = new HashMap<>();
            OrderCustomsClearanceT t = list.get(i);
            dataMap.put("编号", t.getCustomsNumber());
            dataMap.put("型号", t.getPdModel());
            dataMap.put("品牌", t.getBrand());
            dataMap.put("数量", t.getOrderNum());
            dataMap.put("单价", t.getOrderPrice());
            data.add(dataMap);
        }
        //调用导出工具类
        ExportExcel.exportExcel("sheet名称",column,data,request,response);
    }
(0)

相关文章:

版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。

发表评论

验证码:
Copyright © 2017-2026  代码网 保留所有权利. 粤ICP备2024248653号
站长QQ:2386932994 | 联系邮箱:2386932994@qq.com