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表格,以及处理浏览器无法识别下载文件的问题相关推荐

  1. java 浏览器 excel导出excel_使用Java导出Excel表格并由浏览器直接下载——基于POI框架...

    非异步方法 /** * 使用Java导出Excel表格并由浏览器直接下载--基于POI框架 * * @param response * @return * @throws IllegalAccessE ...

  2. Java web项目利用POI导出EXCEL表格

    SSH2 POI导出EXCEL表格 1.首先导入poi的jar包 HSSFWorkbook :工作簿,代表一个excel的整个文档 HSSFSheet:工作表 HSSFRow :行 HSSFCell: ...

  3. java中poi导出Excel表格(前台流文件接收)

    java中poi导出Excel表格,前端以流的方式接收,而非直接生成文件再下载,解决多台服务器部署后,路径地址不统一导致的下载问题. 生成Excel示例图: 2.代码说明 ① 在上次的基础上增加了底部 ...

  4. POI导出Excel表格,去掉数字框的左上角绿色的小三角

    在用POI导出Excel表格,数字框的左上角有个绿色的小三角,看着很不舒服,如下图所示: 目的:当单元格为数字时,不要转为文本输出,就直接按数字格式输出,去掉左上角的绿色小三角形. 解决办法:在网上找 ...

  5. Spring Boot poi 导出Excel表格、Txt到浏览器下载

    Spring Boot & poi 导出Excel表格.Txt到浏览器下载 原文链接:小回博客 文章目录 Spring Boot & poi 导出Excel表格.Txt到浏览器下载 一 ...

  6. java poi导出Excel表格超大数据量解决方案

    Java实现导出excel表格功能,大部分都会使用apache poi,apache poi API 地址 POI之前的版本不支持大数据量处理,如果数据过多则经常报OOM错误,有时候调整JVM大小效果 ...

  7. 复杂的POI导出Excel表格(多行表头、合并单元格)

    poi导出excel有两种方式: 第一种:从无到有的创建整个excel,通过HSSFWorkbook,HSSFSheet HSSFCell, 等对象一步一步的创建出工作簿,sheet,和单元格,并添加 ...

  8. @excel注解_java bean 一对多,多对一 poi导出excel表格

    最近造了个poi导出 excel轮子 特点 java bean 一对多.多对一关系合并单元行 支持图片导出 Bean 一对多关系合并行 代码 public class User { @Excel(na ...

  9. 使用Java导出Excel表格并由浏览器直接下载——基于POI框架

    目录 背景描述 技术准备 导出Excel--尝鲜版 导出Excel--封装版(通过反射) 导出Excel--深度封装(设置下拉选项) 扩展--多个列分别是不同的下拉选项怎么封装 2019-10-28  ...

最新文章

  1. linux系统执行crontab定时任务 涉及redis-cli报错:/bin/sh: redis-cli:command not found
  2. crontab清理日志
  3. [leetcode]94.二叉树的中序遍历
  4. 华数联手海信升级互联网电视平台
  5. mysql多副本搭建_一个简单的MySQL多实例环境搭建
  6. 学生管理系统分层开发
  7. SpringBoot(十四)_springboot使用内置定时任务Scheduled的使用(一)
  8. 书籍-微服务架构与实践
  9. 崩溃中!我终于看明白了,什么是财富自由的底层逻辑!思维导图+笔记精华
  10. 计算机实战项目 之 含文档+PPT+源码等]精品基于Uniapp实现的美食餐厅订餐点餐APP
  11. 【渝粤教育】电大中专金融与税收 (2)作业 题库
  12. 【树莓派C语言开发】实验01:双色LED
  13. Linux 音频驱动(一) ASoC音频框架简介
  14. 当当网 R 语言学习资料统计分析
  15. 想学习如何把excel图片转表格?1分钟教会你图片转表格怎么转
  16. python爬虫:使用scrapy框架抓取360超清壁纸(10W+超清壁纸等你来爬)
  17. 北斗GPS校时器(卫星授时器)助力桥梁监控系统建设
  18. CDN加速原理及步骤
  19. Win10夜间模式无效
  20. GitHub前100第三方库及各大公司使用的第三方库

热门文章

  1. Tushare批量获取各城市股票日度行情数据
  2. NumPy学习(one day)
  3. 参加51NB九周年大连分会场活动
  4. $sigend是否可综合?
  5. Teamviewer 开机启动
  6. 『往事』之---我的一路十年
  7. 手动安装dotnet sdk后,无需再安装runtime
  8. Kobe -学习python函数
  9. B01.有意思的小东西 - pdf转word【python实用工具】
  10. 保险丝有哪些分类它的工作原理是什么?