poi导出数据

来源:互联网 发布:棉先生衣服怎么样 知乎 编辑:程序博客网 时间:2024/06/15 09:56

环境搭建

poi-3.9.jarweb项目

源码:
DownloadServlet.java

package com.ishou.servlet;import java.io.IOException;import javax.servlet.ServletException;import javax.servlet.ServletOutputStream;import javax.servlet.http.HttpServlet;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;import org.apache.poi.hssf.usermodel.HSSFRow;import org.apache.poi.hssf.usermodel.HSSFSheet;import org.apache.poi.hssf.usermodel.HSSFWorkbook;public class DownloadServlet extends HttpServlet {    private static final long serialVersionUID = 1L;    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {        ServletOutputStream out = null;        try {             HSSFWorkbook workbook = new HSSFWorkbook();             HSSFSheet sheet = workbook.createSheet("sheet1"); // 创建表格1             HSSFRow headRow = sheet.createRow(0);  // 创建第一行             headRow.createCell(0).setCellValue("姓名");  // 设置第一行第一个单元格数据             headRow.createCell(1).setCellValue("性别");// 设置第二行第一个单元格数据             headRow.createCell(2).setCellValue("年龄");// 设置第三行第一个单元格数据             for (int i = 0; i < 3; i++) {  // 设置数据                 HSSFRow row = sheet.createRow(sheet.getLastRowNum()+1);                 row.createCell(0).setCellValue("朱古力"+i);                 row.createCell(1).setCellValue("男"+i);                 row.createCell(2).setCellValue(22+i);             }             String filename = "poi报表导出.xls"; // 中文文件名 下载无法识别,可借助Fileutils改进             String agent = request.getHeader("User-agent");             filename = FileUtils.encodeDownloadFilename(filename, agent);  // 根据不同浏览器生成下载文件名             out = response.getOutputStream();  //              response.setContentType(request.getServletContext().getMimeType(filename)); // 设置文件mime类型             response.setHeader("content-disposition", "attachment;filename="+filename); //设置响应头             workbook.write(out);   //写出流        } catch (Exception e) {            e.printStackTrace();        }finally{            if (out != null) {                out.close();            }        }    }    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {        doGet(request, response);    }}

FileUtils.java

package com.ishou.servlet;import java.io.IOException;import java.net.URLEncoder;import sun.misc.BASE64Encoder;public class FileUtils {        /**         * 下载文件时,针对不同浏览器,进行附件名的编码         *          * @param filename         *            下载文件名         * @param agent         *            客户端浏览器版本         * @return 编码后的下载附件名         *          */        public static String encodeDownloadFilename(String filename, String agent)                throws IOException {            if (agent.contains("Firefox")) { // 火狐浏览器                filename = "=?UTF-8?B?"                        + new BASE64Encoder().encode(filename.getBytes("utf-8"))                        + "?=";                filename = filename.replaceAll("\r\n", "");            } else { // IE及其他浏览器                filename = URLEncoder.encode(filename, "utf-8");                filename = filename.replace("+"," ");            }            return filename;        }}

下载结果:

这里写图片描述

表格结果:

这里写图片描述

原创粉丝点击