如何使用POI导出excel表格,以及处理浏览器无法识别下载文件的问题
2022年5月31日更新, 推荐easyExcel或者Crab2Died/Excel4J, 使用起来很方便
废话不多说, 直接上代码.
1. 依赖
<properties><poi.version>3.11</poi.version>
</properties><dependency><groupId>org.apache.poi</groupId><artifactId>poi</artifactId><version>${poi.version}</version>
</dependency>
<dependency><groupId>org.apache.poi</groupId><artifactId>poi-ooxml</artifactId><version>${poi.version}</version>
</dependency>
<dependency><groupId>org.apache.poi</groupId><artifactId>poi-ooxml-schemas</artifactId><version>${poi.version}</version>
</dependency>
2. 代码
3.1 控制层
@RequestMapping(value = "/exportStoreOrderList")
public String exportXls(){///创建excel代码exportService.exportXls();return NONE;
}
接口省略
3.2 serviceImpl
@Override
public void exportXls() {try {//查询分区所有数据List<Order> listOrder = orderDao.findAll();//当前excel创建对象HSSFWorkbook hwb = new HSSFWorkbook();HSSFSheet createSheet = hwb.createSheet();//创建sheet页/*设置列宽*/createSheet.setColumnWidth(0, 10000);/*设置字体,边框,这个有心思的可以去详细找找教程,这里实在不好弄*/HSSFCellStyle style = hwb.createCellStyle();style.setBorderBottom(HSSFCellStyle.BORDER_THIN);style.setAlignment(HSSFCellStyle.ALIGN_LEFT); // 靠左// 字体HSSFFont font = hwb.createFont();font.setFontName("宋体");font.setFontHeightInPoints((short) 12);// 12号字体style.setFont(font);HSSFRow titleRow = createSheet.createRow(0);//创建标题行titleRow.createCell(0).setCellValue("订单编号");titleRow.createCell(1).setCellValue("商品编号");titleRow.createCell(2).setCellValue("商品名");titleRow.createCell(3).setCellValue("商品价格");titleRow.createCell(4).setCellValue("下单时间");if(listOrder != null){for (Order data: listOrder ) {///循环在标题行后添加数据int lastRowNum = createSheet.getLastRowNum()+1;//当前需要增加行的下标 HSSFRow dataRow = createSheet.createRow(lastRowNum);dataRow.createCell(0).setCellValue(data.getId());dataRow.createCell(1).setCellValue(data.getGoodId());dataRow.createCell(2).setCellValue(data.getGoodNum());dataRow.createCell(3).setCellValue(data.getPrice());dataRow.createCell(4).setCellValue(data.getTime());}}//边框for (int j = 0; j <= 4 ; j++) {dataRow.getCell(j).setCellStyle(style);}//一个流 两个头//文件名称String filename = "数据.xls";//获取User-agent 当前是哪个浏览器String userAgent = ServletActionContext.getRequest().getHeader("User-Agent");// 这里使用到FileUtils工具类进行编码String encodeFilename = FileUtils.encodeDownloadFilename(filename, userAgent);ServletActionContext.getResponse().setHeader("content-disposition", "filename="+encodeFilename);//文件后缀ServletActionContext.getResponse().setContentType("application/vnd.ms-excel;charset=UTF-8");//输出流对象ServletOutputStream outputStream = ServletActionContext.getResponse().getOutputStream();hwb.write(outputStream);hwb.close();} catch (IOException e) {e.printStackTrace();}
}
不对文件名进行编码处理的话, 有些浏览器无法识别下载文件
注意: 如果页面使用了frame框架, 点击mvc方法调用地址, 但是没有弹出下载框, 而其他的配置代码没有问题的话, 用get请求,window.open(url+?参数)试试
3.3 FileUtils
import java.io.IOException;
import java.net.URLEncoder;
import java.util.Base64;public class FileUtils {/*** 下载文件时,针对不同浏览器,进行附件名的编码* * @param filename* 下载文件名* @param agent* 客户端浏览器* @return 编码后的下载附件名* @throws IOException*/public static String encodeDownloadFilename(String filename, String agent)throws IOException {// 如果是火狐浏览器if (agent.contains("Firefox")) { filename = "=?UTF-8?B?"+ Base64.getEncoder().encodeToString(filename.getBytes("utf-8"))+ "?=";filename = filename.replaceAll("\r\n", "");// IE及其他浏览器} else { filename = URLEncoder.encode(filename, "utf-8");filename = filename.replace("+"," ");}return filename;}
}
如何使用POI导出excel表格,以及处理浏览器无法识别下载文件的问题相关推荐
- java 浏览器 excel导出excel_使用Java导出Excel表格并由浏览器直接下载——基于POI框架...
非异步方法 /** * 使用Java导出Excel表格并由浏览器直接下载--基于POI框架 * * @param response * @return * @throws IllegalAccessE ...
- Java web项目利用POI导出EXCEL表格
SSH2 POI导出EXCEL表格 1.首先导入poi的jar包 HSSFWorkbook :工作簿,代表一个excel的整个文档 HSSFSheet:工作表 HSSFRow :行 HSSFCell: ...
- java中poi导出Excel表格(前台流文件接收)
java中poi导出Excel表格,前端以流的方式接收,而非直接生成文件再下载,解决多台服务器部署后,路径地址不统一导致的下载问题. 生成Excel示例图: 2.代码说明 ① 在上次的基础上增加了底部 ...
- POI导出Excel表格,去掉数字框的左上角绿色的小三角
在用POI导出Excel表格,数字框的左上角有个绿色的小三角,看着很不舒服,如下图所示: 目的:当单元格为数字时,不要转为文本输出,就直接按数字格式输出,去掉左上角的绿色小三角形. 解决办法:在网上找 ...
- Spring Boot poi 导出Excel表格、Txt到浏览器下载
Spring Boot & poi 导出Excel表格.Txt到浏览器下载 原文链接:小回博客 文章目录 Spring Boot & poi 导出Excel表格.Txt到浏览器下载 一 ...
- java poi导出Excel表格超大数据量解决方案
Java实现导出excel表格功能,大部分都会使用apache poi,apache poi API 地址 POI之前的版本不支持大数据量处理,如果数据过多则经常报OOM错误,有时候调整JVM大小效果 ...
- 复杂的POI导出Excel表格(多行表头、合并单元格)
poi导出excel有两种方式: 第一种:从无到有的创建整个excel,通过HSSFWorkbook,HSSFSheet HSSFCell, 等对象一步一步的创建出工作簿,sheet,和单元格,并添加 ...
- @excel注解_java bean 一对多,多对一 poi导出excel表格
最近造了个poi导出 excel轮子 特点 java bean 一对多.多对一关系合并单元行 支持图片导出 Bean 一对多关系合并行 代码 public class User { @Excel(na ...
- 使用Java导出Excel表格并由浏览器直接下载——基于POI框架
目录 背景描述 技术准备 导出Excel--尝鲜版 导出Excel--封装版(通过反射) 导出Excel--深度封装(设置下拉选项) 扩展--多个列分别是不同的下拉选项怎么封装 2019-10-28 ...
最新文章
- linux系统执行crontab定时任务 涉及redis-cli报错:/bin/sh: redis-cli:command not found
- crontab清理日志
- [leetcode]94.二叉树的中序遍历
- 华数联手海信升级互联网电视平台
- mysql多副本搭建_一个简单的MySQL多实例环境搭建
- 学生管理系统分层开发
- SpringBoot(十四)_springboot使用内置定时任务Scheduled的使用(一)
- 书籍-微服务架构与实践
- 崩溃中!我终于看明白了,什么是财富自由的底层逻辑!思维导图+笔记精华
- 计算机实战项目 之 含文档+PPT+源码等]精品基于Uniapp实现的美食餐厅订餐点餐APP
- 【渝粤教育】电大中专金融与税收 (2)作业 题库
- 【树莓派C语言开发】实验01:双色LED
- Linux 音频驱动(一) ASoC音频框架简介
- 当当网 R 语言学习资料统计分析
- 想学习如何把excel图片转表格?1分钟教会你图片转表格怎么转
- python爬虫:使用scrapy框架抓取360超清壁纸(10W+超清壁纸等你来爬)
- 北斗GPS校时器(卫星授时器)助力桥梁监控系统建设
- CDN加速原理及步骤
- Win10夜间模式无效
- GitHub前100第三方库及各大公司使用的第三方库