spring boot:使用poi导出excel电子表格文件(spring boot 2.3.1)
一,什么是poi?
1,poi
poi是用来兼容微软文档格式的java api,
它是apache的顶级项目之一,
也是我们在生产环境中导出excel时使用最多的库
2,poi官方网站:
http://poi.apache.org/
说明:刘宏缔的架构森林是一个专注架构的博客,地址:https://www.cnblogs.com/architectforest
对应的源码可以访问这里获取: https://github.com/liuhongdi/
说明:作者:刘宏缔 邮箱: 371125307@qq.com
二,演示项目的相关信息
1,项目地址:
https://github.com/liuhongdi/exportexcel
2,项目说明:
读取数据库中的商品数据,
保存成excel表格文件,或下载excel表格文件
3,项目结构,如图:
三,配置文件说明:
1,pom.xml
<!--引入poi begin-->
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi</artifactId>
<version>4.1.2</version>
</dependency> <dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi-ooxml</artifactId>
<version>4.1.2</version>
</dependency>
<!--poi end--> <!--mybatis begin-->
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
<version>2.1.3</version>
</dependency>
<!--mybatis end--> <!--mysql begin-->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<scope>runtime</scope>
</dependency>
<!--mysql end-->
说明:导入poi依赖是用来实现导出excel表格功能
2,application.properties
#mysql
spring.datasource.url=jdbc:mysql://localhost:3306/store?characterEncoding=utf8&useSSL=false
spring.datasource.username=root
spring.datasource.password=lhddemo
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver #mybatis
mybatis.mapper-locations=classpath:/mapper/*Mapper.xml
mybatis.type-aliases-package=com.example.demo.mapper
mybatis.configuration.log-impl=org.apache.ibatis.logging.stdout.StdOutImpl
3,数据表建表sql
CREATE TABLE `goods` (
`goodsId` int(11) NOT NULL AUTO_INCREMENT COMMENT 'id',
`goodsName` varchar(500) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL DEFAULT '' COMMENT 'name',
`subject` varchar(200) NOT NULL DEFAULT '' COMMENT '标题',
`price` decimal(15,2) NOT NULL DEFAULT '0.00' COMMENT '价格',
`stock` int(11) NOT NULL DEFAULT '0' COMMENT 'stock',
PRIMARY KEY (`goodsId`)
) ENGINE=InnoDB AUTO_INCREMENT=0 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='商品表'
四,java代码说明
1,ExcelUtil.java
public class ExcelUtil { //save excel to a file
public static void saveExcelFile( HSSFWorkbook wb, String filepath){ File file = new File(filepath);
if (file.exists()) {
file.delete();
}
try {
wb.write(new FileOutputStream(file));
} catch (Exception e) {
e.printStackTrace();
}
} //download a execl file
public static void downExecelFile(HSSFWorkbook wb,String filename) {
ServletRequestAttributes servletRequestAttributes = (ServletRequestAttributes) RequestContextHolder.getRequestAttributes();
HttpServletResponse response = servletRequestAttributes.getResponse();
try {
// 输出Excel文件
OutputStream output = response.getOutputStream();
response.reset();
//设置文件头
response.setHeader("Content-Disposition",
"attchement;filename=" + new String(filename.getBytes("utf-8"),
"ISO8859-1"));
response.setContentType("application/msexcel");
wb.write(output);
wb.close();
} catch (Exception e) {
e.printStackTrace();
}
}
}
分别实现了把HSSFWorkbook保存成文件和下载两个功能
2,HomeController.java
@RestController
@RequestMapping("/home")
public class HomeController { @Resource
private GoodsMapper goodsMapper; @GetMapping("/exportexcel")
public void exportExcel() { HSSFWorkbook wb = new HSSFWorkbook();
// 根据页面index 获取sheet页
HSSFSheet sheet = wb.createSheet("商品基本信息");
createTitle(wb,sheet); //设置列宽度
List<Goods> goodsList = goodsMapper.selectAllGoods();
//表内容从第二行开始
int i=1;
for (Goods goodsOne : goodsList) {
HSSFRow row = sheet.createRow(i + 1);
//创建HSSFCell对象 设置单元格的值
row.createCell(0).setCellValue(goodsOne.getGoodsId());
row.createCell(1).setCellValue(goodsOne.getGoodsName());
row.createCell(2).setCellValue(goodsOne.getSubject());
row.createCell(3).setCellValue(goodsOne.getStock());
i++;
} //保存成文件
ExcelUtil.saveExcelFile(wb,"/data/file/html/商品信息.xls");
//下载文件
ExcelUtil.downExecelFile(wb,"商品信息.xls");
} //创建标题和表头
private void createTitle(HSSFWorkbook workbook,HSSFSheet sheet){
//用CellRangeAddress合并单元格,在这里作为sheet中的标题
//参数1:起始行 参数2:终止行 参数3:起始列 参数4:终止列
CellRangeAddress region1 = new CellRangeAddress(0, 0, 0, 3);
sheet.addMergedRegion(region1); HSSFRow row_title = sheet.createRow(0);
row_title.setHeightInPoints(26);
HSSFCell cell_title;
cell_title = row_title.createCell(0);
cell_title.setCellValue("商品信息表"); //设置标题样式:居中加粗
HSSFCellStyle style_title = workbook.createCellStyle();
HSSFFont font_title = workbook.createFont();
font_title.setBold(true);
font_title.setFontHeightInPoints((short) 20);
font_title.setColor(HSSFColor.HSSFColorPredefined.BLUE.getIndex());
style_title.setFont(font_title);
style_title.setAlignment(HorizontalAlignment.CENTER);
style_title.setVerticalAlignment(VerticalAlignment.CENTER);
cell_title.setCellStyle(style_title); //以下为表头
HSSFRow row = sheet.createRow(1);
//设置行高
row.setHeightInPoints(18);
//设置列宽度
sheet.setColumnWidth(0,10*256);
sheet.setColumnWidth(1,30*256);
sheet.setColumnWidth(2,30*256);
sheet.setColumnWidth(3,10*256);
//设置样式:居中加粗
HSSFCellStyle style = workbook.createCellStyle();
HSSFFont font = workbook.createFont();
font.setBold(true);
font.setColor(HSSFColor.HSSFColorPredefined.GREEN.getIndex());
style.setFont(font);
style.setAlignment(HorizontalAlignment.CENTER);
style.setVerticalAlignment(VerticalAlignment.CENTER);
//添加4个字段
HSSFCell cell;
cell = row.createCell(0);
cell.setCellValue("id");
cell.setCellStyle(style); cell = row.createCell(1);
cell.setCellValue("商品名称");
cell.setCellStyle(style); cell = row.createCell(2);
cell.setCellValue("商品描述");
cell.setCellStyle(style); cell = row.createCell(3);
cell.setCellValue("库存数量");
cell.setCellStyle(style);
}
}
说明:注意HSSFCellStyle是用来定义表格样式的类,
我们需要借助它来实现表格中文字的样式,
包括:HSSFFont:字体样式,
HorizontalAlignment 水平对齐
VerticalAlignment 垂直对齐
HSSFColor:文字颜色
说明:保存成excel文件和下载excel文件两功能没有关联,
这里只为演示,大家按需求使用
3,mybatis用到的mapper类和mapper xml文件,
商品的对象类: Goods.java
比较简单,参见github上的代码即可,
不再贴出
五,测试效果
1,下载excel
访问地址:
http://127.0.0.1:8080/home/exportexcel
下载的excel表格内容如图:
可以看到我们配置的样式已生效
六,查看spring boot的版本
. ____ _ __ _ _
/\\ / ___'_ __ _ _(_)_ __ __ _ \ \ \ \
( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \
\\/ ___)| |_)| | | | | || (_| | ) ) ) )
' |____| .__|_| |_|_| |_\__, | / / / /
=========|_|==============|___/=/_/_/_/
:: Spring Boot :: (v2.3.1.RELEASE)
spring boot:使用poi导出excel电子表格文件(spring boot 2.3.1)的更多相关文章
- Spring Boot利用poi导出Excel
至于poi的用法就不多说了,网上多得很,但是发现spring boot结合poi的就不多了,而且大多也有各种各样的问题. public class ExcelData implements Seria ...
- spring boot 整合 poi 导出excel
一. 第一种方式 1.首先从中央仓库中导入架包Poi3.14以及Poi-ooxml3.14. <dependency> <groupId>org.apache.poi</ ...
- java poi导出EXCEL xls文件代码
String _currentPage = request.getParameter("currentPage"); Integer currentPage = 0; if(_cu ...
- POI导出Excel和InputStream存储为文件
POI导出Excel和InputStream存储为文件 本文需要说明的两个问题 InputStream如何保存到某个文件夹下 POI生成Excel POI操作utils类 代码如下.主要步骤如下: ...
- POI导出excel的简单demo
目前使用过两种导出excel的方式,一种是如题所示的使用POI的方式进行数据的导出,这种方式一般只有在处理比较多的数据或者说需要导出的excel表格中有图片之类的需要特殊处理的文件的时候使用:还有一种 ...
- [转载]poi导出excel,可以自定义保存路径
poi导出excel比js导出excel安全性更好,在使用poi导出excel时,先要导入poi-3.5-FINAL-20090928.jar包到你项目的lib目录下,我这里选择是3.5版的 1.ac ...
- POI导出EXCEL经典实现
1.Apache POI简介 Apache POI是Apache软件基金会的开放源码函式库,POI提供API给Java程式对Microsoft Office格式档案读和写的功能. .NET的开发人员则 ...
- Java POI 导出EXCEL经典实现 Java导出Excel
转自http://blog.csdn.net/evangel_z/article/details/7332535 在web开发中,有一个经典的功能,就是数据的导入导出.特别是数据的导出,在生产管理或者 ...
- java中使用poi导出excel表格数据并且可以手动修改导出路径
在我们开发项目中,很多时候会提出这样的需求:将前端的某某数据以excel表格导出,今天就给大家写一个简单的模板. 这里我们选择使用poi导出excel: 第一步:导入需要的jar包到 lib 文件夹下
随机推荐
- 备忘录:SQL SERVER2014 出现:“Cannot find one or more components”
目录 1. 起因 2. 解决方案 3. 备注 4. 参考 2020年9月13日 00:40:09-shanzm 1. 起因 因为卸载vs2015的时候,使用了一个VS2013/2015卸载工具Tota ...
- 必考算法之 Top K 问题
大家好,这里是<齐姐聊算法>系列之 Top K 问题. Top K 问题是面试中非常常考的算法题. 8 Leetcode 上这两题大同小异,这里以第一题为例. 题意: 给一组词,统计出现频 ...
- 硬核看房利器——Web 全景的实现
作者:凹凸曼 - EC 疫情期间,打破社交距离限制的交互模式被推向前台,为不少行业的传统交易提供了想象的空间. 疫情时期,房地产租售业受到的冲击无疑是巨大的,由于人口流动的限制,需求量大幅减少,无法现 ...
- JVM直接内存(Direct Memory)
直接内存 1.直接内存不是虚拟机运行时数据区的一部分,也不是<Java虚拟机规范>中定义的内存区域. 2.直接内存是Java堆外的.直接向系统申请的内存区间. 3.简单理解: java p ...
- Java语言的优势
首先, Java语言是一种纯粹的面向对象的编程语言.这样就决定了Java语言更能直接客观地反映现实生活中的对象,因此Java语言更适合大型的复杂系统开发. 其次, Java语言是一种平台无关的语言. ...
- 仿苏宁移动web页面 自适应 rem&less
index.html <!DOCTYPE html> <html lang="en"> <head> <meta charset=&quo ...
- java8的::
public static void main(String[] args) throws Exception { // 第一种方法引用的类型是构造器引用,语法是Class::new,或者更一般的形式 ...
- hystrix(8) 插件
上一节讲到HystrixCommand的执行流程. Hystrix内部将一些模块实现成了插件,并且提供了用户提供自己的实现,通过配置来替换插件.Hystrix提供了5个插件,分别为并发相关插件(Hys ...
- @RequestParam,@RequestBody,@ResponseBody,@PathVariable注解的一点小总结
一.前提知识: http协议规定一次请求对应一次响应,根据不同的请求方式,请求的内容会有所不同: 发送GET请求是没有请求体的,参数会直接拼接保留到url后一并发送: 而POST请求是带有请求体的,带 ...
- Elasticsearch(2):索引详谈
在上一篇博客中,介绍了ES中的一些核心概念和ES.Kibana安装方法.本节开始,我们从索引开始来学习ES的操作方法. 1 创建索引¶ 创建一个索引的方法很简单,在Kibana中运行下行请 ...