java导出excel及下载的实现-java下载文件

在实际的项目中,使用java实现excel的读取和导出数据是很常见的技术。本文简单实现java导出excel并下载的功能。其中,java导出excel使用的是Apache poi技术,使用之前需要在项目中引入相关的jar包。poi相关技术之前有过探讨,在此不再赘述。

关于下载的功能实现,一种是通过超链接指向文件路径的方式实现下载,使用这种方式常见于文件上传之后的下载实现。当然,本例使用上述方式也能实现,分为2步:第一步是将文件导出到服务器相关目录,详见之前poi文章中的相关实现,相当于缓存文件;第二步,是使用超链接指向文件的路径。上述实现较为简单,本文不再赘述,本文讨论的是使用servlet实现excel文件的导出下载功能。

具体思路:

1.response通过设置Header和ContentType可以实现Excel文件的下载,具体设置如下:

// 设置response的Header

response.addHeader("Content-Disposition", "attachment;filename="

+ new String(filename.getBytes(),"iso8859-1")+".xls");

response.setContentType("application/vnd.ms-excel;charset=utf-8");

2. 使用poi可以将需要导出的数据写入OutputStream,而OutputStream可以由esponse.getOutputStream()提供,相关代码如下:

//excel写入输出流

wb.write(response.getOutputStream());

3.java实现excel的导出和下载的源代码如下:

package com.company.servlet;

import java.io.*;

import java.util.*;

import javax.servlet.ServletException;

import javax.servlet.http.*;

import org.apache.poi.hssf.usermodel.*;

import org.apache.poi.ss.util.CellRangeAddress;

/**

* Excel导出并下载

* <p>Title:DownloadServlet </p>

* <p>Description:TODO </p>

* <p>Company: </p>

* @author code legend

* @date 2016-10-31 下午9:10:17

*/

public class DownloadServlet extends HttpServlet {

public void doGet(HttpServletRequest request, HttpServletResponse response)

throws ServletException, IOException {

doPost(request, response);

}

public void doPost(HttpServletRequest request, HttpServletResponse response)

throws ServletException, IOException {

//创建工作簿

HSSFWorkbook wb = new HSSFWorkbook();

//创建工作表

HSSFSheet sheet = wb.createSheet("new sheet");

for(int i=0;i<3;i++){

//设置列宽

sheet.setColumnWidth(i, 3000);

}

//创建行

HSSFRow row = sheet.createRow(0);

row.setHeightInPoints(30);//设置行高

//创建单元格

HSSFCell cell = row.createCell(0);

cell.setCellValue("用户信息表");

//合并单元格

sheet.addMergedRegion(new CellRangeAddress(0, 0, 0, 2));

//创建行

HSSFRow row1 = sheet.createRow(1);

//标题信息

String[] titles = {"ID","用户名","密码"};

for(int i=0;i<3;i++){

//创建单元格

HSSFCell cell1 = row1.createCell(i);

cell1.setCellValue(titles[i]);

}

//模拟数据,实际情况下String[]多为实体bean

List<String[]> list = new ArrayList<String[]>();

list.add(new String[]{"1","zhangsan","111"});

list.add(new String[]{"2","lisi","222"});

list.add(new String[]{"3","wangwu","333"});

//循环赋值

for(int i=0;i<list.size();i++){

//创建行

HSSFRow row2 = sheet.createRow(i+2);

//创建单元格

HSSFCell cell1 = row2.createCell(0);

cell1.setCellValue(list.get(i)[0]);

//创建单元格

HSSFCell cell2 = row2.createCell(1);

cell2.setCellValue(list.get(i)[1]);

//创建单元格

HSSFCell cell3 = row2.createCell(2);

cell3.setCellValue(list.get(i)[2]);

}

String filename = "用户信息表";

// 清空response

response.reset();

// 设置response的Header

response.addHeader("Content-Disposition", "attachment;filename="

+ new String(filename.getBytes(),"iso8859-1")+".xls");

//excel写入输出流

wb.write(response.getOutputStream());

OutputStream toClient = new BufferedOutputStream(

response.getOutputStream());

response.setContentType("application/vnd.ms-excel;charset=utf-8");

toClient.flush();

toClient.close();

}

}

4.servlet在web.xml中的相关配置

<servlet>

<servlet-name>DownloadServlet</servlet-name>

<servlet-class>com.company.servlet.DownloadServlet</servlet-class>

</servlet>

<servlet-mapping>

<servlet-name>DownloadServlet</servlet-name>

<url-pattern>/DownloadServlet</url-pattern>

</servlet-mapping>

5.访问测试

部署项目到Tomcat,启动Tomcat,访问http://localhost:8080/Chat/DownloadServlet

java导出excel及下载的实现6.查看下载的excel文件

java导出excel及下载的实现 关于poi的相关知识可以查看我之前的文章《java导出excel之使用poi》,本例还可以不断完善。

推荐阅读

    excel怎么用乘法函数

    excel怎么用乘法函数,乘法,函数,哪个,excel乘法函数怎么用?1、首先用鼠标选中要计算的单元格。2、然后选中单元格后点击左上方工具栏的fx公

    鼠标不能拖动文件了

    鼠标不能拖动文件了,鼠标,拖动,本文目录鼠标不能拖动文件了电脑鼠标无法拖动软件图标了,怎么办鼠标不能滚动怎么调整电脑鼠标不能进行任何

    电脑系统城|电脑系统下载 win7

    电脑系统城|电脑系统下载 win7,电脑系统城,不少朋友在使用电脑时候,有时碰到电脑卡住,不能使用,很多人都会选择装机来解决。那么电脑装机软件

    excel中乘法函数是什么?

    excel中乘法函数是什么?,乘法,函数,什么,打开表格,在C1单元格中输入“=A1*B1”乘法公式。以此类推到多个单元。1、A1*B1=C1的Excel乘法公式

    如何把老版本的excel更新换代?

    如何把老版本的excel更新换代?,更新换代,版本,如何,对于Excel来说,老版本的Excel更新换代要从软件工具更换、知识准备、应用环境配套3个角度

    标准差excel用什么函数?

    标准差excel用什么函数?,函数,标准,什么,在数据单元格的下方输入l标准差公式函数公式“=STDEVPA(C2:C6)”。按下回车,求出标准公差值。详细

    手机通讯录导出|手机通讯录导出不全

    手机通讯录导出|手机通讯录导出不全,,手机通讯录导出不全建议进行以下操作: 1.重新开关机 2.如果手机套有保护套,取下后测试 3.备份手机数据