网站首页 > 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
6.查看下载的excel文件
关于poi的相关知识可以查看我之前的文章《java导出excel之使用poi》,本例还可以不断完善。
猜你喜欢
- 2024-09-21 如何把excel表格处理成json数据(jason转excel)
- 2024-09-21 一个读Excel数据的小例子,提供给爱学习的Java后端开发
- 2024-09-21 快速将Excel、CSV等格式文件数据转换到java对象
- 2024-09-21 GitHub Star 8800+ 的阿里开源的 Java 解析 Excel 工具
- 2024-09-21 还在重复劳动?不如用Python自动生成Excel以邮件发送
- 2024-09-21 Java8如何让Excel的读写变得更加简单高效
- 2024-09-21 java打印Excel表格(java输出excel表格)
- 2024-09-21 整理关于java写入内容到excel的例子供大家参考
- 2024-09-21 JavaAPI开发(3)POI——如何将List转换为excel文件
- 2024-09-21 【Java程序】读取指定路径下文件夹中的文件名,生成Excel表格!
你 发表评论:
欢迎- 最近发表
-
- class版本不兼容错误原因分析(class更新)
- 甲骨文Oracle公司为Java的最新LTS版本做出改进
- 「版本发布」Minecraft Java开发版 1.19.4-pre1 发布
- java svn版本管理工具(svn软件版本管理)
- 我的世界1.8.10钻石在第几层(我的世界1.7.2钻石在哪层)
- Java开发高手必备:在电脑上轻松切换多个JDK版本
- 2022 年 Java 开发报告:Java 8 八年不到,开发者都在用什么?
- 开发java项目,选择哪个版本的JDK比较合适?
- Java版本选型终极指南:8 vs 17 vs 21特性对决!大龄程序员踩坑总结
- POI Excel导入(poi excel导入附件)
- 标签列表
-
- java反编译工具 (77)
- java反射 (57)
- java接口 (61)
- java随机数 (63)
- java7下载 (59)
- java数据结构 (61)
- java 三目运算符 (65)
- java对象转map (63)
- Java继承 (69)
- java字符串替换 (60)
- 快速排序java (59)
- java并发编程 (58)
- java api文档 (60)
- centos安装java (57)
- java调用webservice接口 (61)
- java深拷贝 (61)
- 工厂模式java (59)
- java代理模式 (59)
- java.lang (57)
- java连接mysql数据库 (67)
- java重载 (68)
- java 循环语句 (66)
- java反序列化 (58)
- java时间函数 (60)
- java是值传递还是引用传递 (62)
本文暂时没有评论,来添加一个吧(●'◡'●)