servlet 实现excel 导出

本文介绍了一个使用Java实现从HTTP请求中导出Excel文件的例子。该示例通过Servlet接收HTTP请求,根据用户浏览器类型设置合适的文件名编码,并创建一个包含用户数据的简单Excel表格。文章还提供了解决浏览器文件名乱码问题的方法。

package com.test;

import java.io.IOException;
import java.io.OutputStream;
import java.net.URLEncoder;
import java.util.ArrayList;
import java.util.List;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import jxl.Workbook;
import jxl.write.Label;
import jxl.write.WritableSheet;
import jxl.write.WritableWorkbook;

/**
 * Servlet implementation class TestExcel
 */
public class TestExcel extends HttpServlet
{
    private static final long serialVersionUID = 1L;

    /**
     * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse
     *      response)
     */
    protected void doGet(HttpServletRequest request,
            HttpServletResponse response) throws ServletException, IOException
    {

        StringBuffer sbFileName = new StringBuffer();
        sbFileName.append("问卷类型维护报表.xls");
        String fileName = "";

        /*
         * 浏览器不同 可能会造成导出的excel文件名出现乱码,解决方案是判断浏览器 然后根据不同的浏览器返回不同的编码格式.
         */
        if (request.getHeader("User-Agent").toLowerCase().indexOf("firefox") > 0)
        {
            fileName = new String(sbFileName.toString().getBytes("utf-8"),
                    "iso-8859-1");
        }
        else
        {
            fileName = URLEncoder.encode(sbFileName.toString(), "UTF-8");

        }
        response.reset();
        response.setCharacterEncoding("UTF-8");
        response.setContentType("application/x-excel");
        response.setHeader("Content-Disposition", "attachment; filename="
                + fileName);

        OutputStream os = response.getOutputStream();
        List<User> list = new ArrayList<User>();
        User u1 = new User(1, "A", 21);
        User u2 = new User(2, "B", 22);
        User u3 = new User(3, "C", 23);
        User u4 = new User(4, "D", 24);
        list.add(u1);
        list.add(u2);
        list.add(u3);
        list.add(u4);
        try
        {
            exportToExcel(list, os);
        }
        catch (Exception e)
        {
            e.printStackTrace();
        }

    }

    /**
     * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse
     *      response)
     */
    protected void doPost(HttpServletRequest request,
            HttpServletResponse response) throws ServletException, IOException
    {
        this.doGet(request, response);
    }

    private static void exportToExcel(List<User> list, OutputStream os)
            throws Exception
    {
        WritableWorkbook workbook = Workbook.createWorkbook(os);
        WritableSheet sheet1 = workbook.createSheet("检查表", 0);
        sheet1.addCell(new Label(0, 0, "用户编号"));
        sheet1.addCell(new Label(1, 0, "用户姓名"));
        sheet1.addCell(new Label(2, 0, "用户年龄"));
        for (int i = 0, n = list.size(); i < n; i++)
        {
            User info = (User) list.get(i);
            Label id = new Label(0, i + 1,String.valueOf(info.getId()));
            sheet1.addCell(id);

            Label name = new Label(1, i + 1, info.getName());
            sheet1.addCell(name);

            Label age = new Label(2, i + 1, String.valueOf(info.getAge()));
            sheet1.addCell(age);
        }
        workbook.write();
        workbook.close();
    }
}
 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值