卑鄙是卑鄙者的通行证,高尚是高尚者的墓志铭。

有目录,不迷路

  • 前言
  • 编码开始
    • 依赖
    • 实体类
    • 控制层
    • 运行
  • 小提醒

前言

之前给大家介绍了Excel在本地导入的基本操作(本期博客需要有前两期博客的基础才比较好理解,大家最好看一看哦),详情可见博客:

【Apache POI】Excel操作(一):Excel本地写入基本操作的实现

以及

【Apache POI】Excel操作(二):Excel本地写入基本操作的实现(进阶版)

但很多小伙伴,或者说看过我这篇博客:那些年Java走过的路 的小伙伴可能就会问了:Java大多是运用于B/S架构的项目,也就是浏览器/服务器模式的项目,所以我往往需要的是在浏览器端导出Excel,那么我到底该怎么写呢???

别担心,本期博客将解决这个问题!!!

编码开始

依赖

既然要在web端操作,肯定需要Web的依赖:

<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId>
</dependency>

完整依赖如下:

<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId>
</dependency><!-- xls(03) -->
<dependency><groupId>org.apache.poi</groupId><artifactId>poi</artifactId><version>3.9</version>
</dependency><!-- xlsx(07) -->
<dependency><groupId>org.apache.poi</groupId><artifactId>poi-ooxml</artifactId><version>3.9</version>
</dependency><!-- 日期格式化工具 -->
<dependency><groupId>joda-time</groupId><artifactId>joda-time</artifactId><version>2.10.1</version>
</dependency><!-- lombok的依赖,idea需按照lombok的插件-->
<dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId><version>1.18.12</version><scope>provided</scope>
</dependency>

实体类

再需要一个实体类来装数据:

package com.guqueyue.entity;import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import lombok.experimental.Accessors;//lombok插件的注解
@Data // 若未使用lombok插件,请自行生成getter、setter以及toString方法
@AllArgsConstructor // 若未使用lombok插件,请自行生成有参构造方法
@NoArgsConstructor // 若未使用lombok插件,请自行生成无参构造方法
@Accessors(chain = true) // 开启链式编程
public class DemoData {/*** 书名*/private String bookName;/*** 作者*/private String author;/*** 时间*/private String dateTime;}

控制层

接下来,我们在控制层编写代码就好了:

package com.guqueyue.controller;import com.guqueyue.entity.DemoData;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.apache.poi.ss.usermodel.Cell;
import org.apache.poi.ss.usermodel.Row;
import org.apache.poi.ss.usermodel.Sheet;
import org.apache.poi.ss.usermodel.Workbook;
import org.joda.time.DateTime;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;import javax.servlet.http.HttpServletResponse;
import javax.swing.*;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.OutputStream;
import java.lang.reflect.Field;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;/*** @ClassName ExportExcelController* @Description excel导出相关的控制层* @Author 古阙月* @Date 2020/11/4 0:31* @Version 1.0**/
@RequestMapping("/exportExcel")
@RestController
public class ExportExcelController {/*** 列名数组*/static String[] rowNameArray = {"书名", "作者", "写作时间"};/*** 生成数据的方法* @return*/private List<DemoData> getData() {List<DemoData> dataList = new ArrayList<DemoData>();for (int i = 0; i < 10; i++) {DemoData data = new DemoData();data.setBookName("平凡的世界" + i);data.setDateTime(new DateTime().toString("yyyy-MM-dd HH:mm:ss"));data.setAuthor("路遥" + i);dataList.add(data);}return dataList;}/*** 导出excel* @param response* @throws Exception*/@RequestMapping("/export")public void testWrite03Web(HttpServletResponse response) throws Exception {// 1.创建一个工作簿Workbook workbook = new HSSFWorkbook();// 2.创建一个工作表Sheet sheet = workbook.createSheet("古阙月的书单");// 3.创建第一行Row row1 = sheet.createRow(0);// 创建列名for (int i = 0; i < rowNameArray.length; i++) {Cell cell = row1.createCell(i);cell.setCellValue(rowNameArray[i]);}// 遍历创建接下来的行List<DemoData> dataList = getData();for (int i = 0; i < dataList.size(); i++) {Row row = sheet.createRow(i + 1);int j = 0;DemoData demoData = dataList.get(i);// 获取反射对象Class<?> clazz = demoData.getClass();// 获取反射对象的所有属性,包括公有属性和私有属性Field[] fields = clazz.getDeclaredFields();// 遍历所有属性for (Field field : fields) {// 私有属性授权,方便访问field.setAccessible(true);// 赋值String value = (String) field.get(demoData);Cell cell = row.createCell(j);cell.setCellValue(value);j++;}}/*** 格式化当前日期,以便拼接文件名*/SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMddHHmmss");String date = sdf.format(new Date());// 生成文件名String fileName = "古阙月书籍表03" + date + ".xls";/*** 将生成的excel写入到浏览器端*/response.reset();response.setContentType("application/ms-excel;charset=UTF-8");try {response.addHeader("Content-Disposition", "attachment;filename=\""+ new String((fileName).getBytes("GBK"),"ISO8859_1") + "\"");OutputStream out = response.getOutputStream();// 写入workbook.write(out);out.flush();out.close();} catch (Exception e) {e.printStackTrace();}}
}

看见代码不要慌,其实跟上期博客相比,主要多了这么些代码而已:

/*** 将生成的excel写入到浏览器端*/
response.reset();
response.setContentType("application/ms-excel;charset=UTF-8");
try {response.addHeader("Content-Disposition", "attachment;filename=\""+ new String((fileName).getBytes("GBK"),"ISO8859_1") + "\"");OutputStream out = response.getOutputStream();// 写入workbook.write(out);out.flush();out.close();
} catch (Exception e) {e.printStackTrace();
}

运行

运行SpringBoot程序,在浏览器端输入:http://localhost:8080/exportExcel/export (因为我这里没有配置端口,所以默认为8080)

可以看到在浏览器下方成功导出了一个excel文件,点开一看:

完美!!!

小提醒

当然,我们在实际开发过程中是不可能让用户直接在浏览器端输入url来导出excel的,我们可能需要编写前端代码来发送请求。

切记,千万不要用ajax来发送请求,毕竟ajax发送请求都是由ajax引擎来发送和接收请求的,而不是浏览器!!!

本博主就因为这个发送的问题困扰了几个小时!用location.href即可:

location.href = "url";

比如没有拦截器等配置的情况之下,本篇博客中的url就是:http://localhost:8080/exportExcel/export

好了,本期博客到此结束,敬请期待下期博客,我们不见不散

【Apache POI】Excel操作(三):Excel在浏览器端即Web端写入操作的实现相关推荐

  1. 【Apache POI】Java 读取Excel文件

    Excel内容如下: 封装Excel行列字段的Bean: public class Employee {private String name;private String gender;privat ...

  2. 利用Apache POI读取并解析Excel的数据

    /*  * Created on 2010-12-9  * java读取excel文件  *  */ import java.io.FileInputStream; import java.io.Fi ...

  3. sql2java-excel(一):基于apache poi实现数据库表的导出及支持spring web

    sql2java是我几年年开始写的一个sql2java是一个轻量级数据库(SQL)访问代码(java)生成器.这几年一直在根据工作需要维护升级,最近的项目中需要对数据库的记录提供导出excel的功能. ...

  4. Apache POI 插入图片至 Excel 的两种方法

    方法 1 插入图片至坐标 ByteArrayOutputStream byteArrayOut = new ByteArrayOutputStream();BufferedImage bufferIm ...

  5. 【Apache POI】Excel操作(六):Excel计算公式的读取和使用

    此后如竟没有炬火,我便是唯一的光. 文章目录 前言 Excel准备 计算公式读取 直接读取 屠龙秘技 再直接读取 再通过计算公式读取 完整代码 往期回顾 前言 在上期:[Apache POI]Exce ...

  6. 【Apache POI】Excel操作(八):Excel工具类的封装(终极版)

    恋爱最珍贵的纪念品,从来就不是那些你送我的手表和项链,甚至也不是那些甜蜜的短信和合照.是你留在我身上的,如同河流留给山川的,那些你对我造成的改变. 有目录,不迷路 前言 代码开整 环境准备 正式开整 ...

  7. 【Apache POI】Excel操作(四):Excel大数据量的写入

    迷茫代表着你身边还有选择,焦虑意味着你手上还有时间. 有目录,不迷路 前言 超量数据 速率比较 原因剖析 超级版本大救星 往期回顾 前言 之前在下面这期Excel操作: [Apache POI]Exc ...

  8. 【Apache POI】Excel操作(一):Excel本地写入基本操作的实现

    有人住高楼,有人在深沟,有人光万丈,有人一身锈:世人千万种,浮云莫去求,斯人若彩虹,遇上方知有. 有目录,不迷路 前言 前期准备 POI基本介绍 Excel简单介绍 Excel版本介绍 Excel基本 ...

  9. 如何用Apache POI操作Excel文件-----如何在已有的Excel文件中插入一行新的数据?

    在POI的第一节入门中,我们提供了两个简单的例子,一个是如何用Apache POI新建一个工作薄,另外一个例子是,如果用Apache POI新建一个工作表.那么在这个章节里面,我将会给大家演示一下,如 ...

最新文章

  1. PyTorch | (2)PyTorch 入门-张量
  2. R语言与数据分析(8)-获取帮助
  3. html省市联动插件,jquery实现的交互体验更友好省市区三级联动插件
  4. [I2C]I2C总线协议图解
  5. @Resource注解研究和在SAP Hybris ECP中的应用
  6. Android项目实战欢迎界面
  7. 完美解决Mac电脑睡眠之后苹果电脑没有声音的方法
  8. extjs 中动态给gridpanel 复选框赋值
  9. JAVA常用API或编程工具003--实现pdf在线阅读功能之pdf.js
  10. php 循环table,php table循环 问题很简单 求帮助
  11. 宿主机mac os无法连接到虚拟机centos
  12. ECCV 2016 paper list
  13. python pip下载安装教程_windows下python安装pip图文教程
  14. YOLOv5 完美实现中文标签显示
  15. python图形化编程 在线教程_使用Python Editor进行在线图形化编程
  16. trove mysql 镜像_centos7下手动制作trove镜像
  17. 前端技术的发展和趋势
  18. chrome显示比例 Android,Android版Chrome在大尺寸平板电脑中将默认采用桌面模式
  19. Drone CI/CD系列(二)——python语言之配置.drone.yml文件
  20. 给数据穿上美丽的外衣

热门文章

  1. 智能称重系统应用车牌识别的工作原理和优势-业内必看
  2. ESP8266-Arduino编程实例-BME680环境传感器驱动
  3. 转载:集电极开路、漏极开路、上拉电阻、下拉电阻等接口相关基本概念
  4. 如何给加密的PDF解密?免费的
  5. Element el-table 表格详解
  6. 计算机专业,全球大学排名如何?
  7. 【安信可ESP32语音开发板专题②】ESP32-Audio-Kit 开发板适配百度dueros例程实现在线语音功能,与开发板对话聊天。
  8. 文件隐藏软件,6种保护文件方式,实现隐藏并锁定
  9. 信用卡消费陷阱知多少 如何分期付款最划算
  10. 深入学习缓存一致性问题和缓存一致性协议MESI(二)