poi操作excel(下载excel)

本文介绍了如何使用Java的Apache POI库下载xlsx格式的Excel文件。通过设置响应编码防止乱码,获取文件绝对路径并创建File对象,然后利用FileInputStream读取文件内容。接着,使用XSSFWorkbook创建工作簿对象,并设置响应请求类型为Excel。最后,通过OutputStream将工作簿内容写入响应,完成文件下载。POI提供了HSSF、XSSF和SXSSF三种操作Excel的方式,其中XSSF适用于处理.xlsx格式,而SXSSF则适合处理大量数据以降低内存占用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

<一>:用jdk自带的输入输出流

1://可以先设置response编码,使响应给浏览器的东西不是乱码;

response.setCharacterEncoding(" UTF-8");

2://得到要下载的东西存放的地址,也就是绝对路径;自己可以设置request来拼路径(xlsx是excel表文件的后缀格式),(filepath是要下载excel文件的相对路劲,也就是文件名比如下载leavestu.xlsx则filepath=leavestu)

(自家的jar包下的方法,在core-api下)

String filename=CoreplusEnv.getRealPath(''/_upload/ ''+filepath+".xlsx");

3://以当前的绝对路径创建一个file对象;(文件在磁盘里,而程序要用他,就得创建个该路径的实例,也就是一个关联通道才能操作它,当然还有其他方法可用来创建)(自来水开水的思想)

File file=new File(filename);

4://创建一个文件输入流(字节输入流)(此处也是一样起一个关联通道的作用,而他的read方法可以去读下载excel文件中的内容)

FileInputStream is = new FileInputStream(file);

5://用poi技术也就是相关价包来提供创建此字节流的工作簿对象(此处用xssf)

首先,POI提供了HSSF、XSSF以及SXSSF三种方式操作Excel。他们的区别如下:

HSSF:是操作Excel97-2003版本,扩展名为.xls。

XSSF:是操作Excel2007版本开始,扩展名为.xlsx。

SXSSF:是在XSSF基础上,POI3.8版本开始提供的一种支持低内存占用的操作方式,扩展名为.xlsx。

1、支持的行数、列数

Excel97-2003版本,一个sheet最大行数65536,最大列数256。

Excel2007版本开始,一个sheet最大行数1048576,最大列数16384。

2、文件大小

.xlsx文件比.xls的压缩率高,也就是相同数据量下,.xlsx的文件会小很多。

3、兼容性

Excel97-2003版本是不能打开.xlsx文件的。

Excel2007开始的版本是可以打开.xls文件的。

 当然海量数据的导出肯定是推荐SXSSF的方式

Workbook    wk=new  XSSFWorkbook(is);

6:设置响应请求的样式

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

//设置表头


设置response的头报文数据,content-disposition为浏览器另存为.attachment以附件形式下载,filename下载后的文件名  new String(str.getBytes("gb2312"),"iso8859-1")文件名从iso8859-1编码转换为gb2312编码.
eg:
response.setHeader("Content-disposition","attachment;filename="+new String(str.getBytes("gb2312"),"iso8859-1"));
 

response.setHeader("Content-disposition", "attachment;filename="  
               + file.getName())

7:得到此输入流的输出流,response是响应客户端的对象,在服务器里,而他有一个得到输出流方法,来创建一个给客户端要输出的内容流;

OutputStream  os=response.getOutputStream();

8:用工作簿的write方法输出在工作簿里

 wk.write(os);

9:关闭输出流

os.close();




      

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值