一,什么是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)的更多相关文章

  1. Spring Boot利用poi导出Excel

    至于poi的用法就不多说了,网上多得很,但是发现spring boot结合poi的就不多了,而且大多也有各种各样的问题. public class ExcelData implements Seria ...

  2. spring boot 整合 poi 导出excel

    一. 第一种方式 1.首先从中央仓库中导入架包Poi3.14以及Poi-ooxml3.14. <dependency> <groupId>org.apache.poi</ ...

  3. java poi导出EXCEL xls文件代码

    String _currentPage = request.getParameter("currentPage"); Integer currentPage = 0; if(_cu ...

  4. POI导出Excel和InputStream存储为文件

    POI导出Excel和InputStream存储为文件   本文需要说明的两个问题 InputStream如何保存到某个文件夹下 POI生成Excel POI操作utils类 代码如下.主要步骤如下: ...

  5. POI导出excel的简单demo

    目前使用过两种导出excel的方式,一种是如题所示的使用POI的方式进行数据的导出,这种方式一般只有在处理比较多的数据或者说需要导出的excel表格中有图片之类的需要特殊处理的文件的时候使用:还有一种 ...

  6. [转载]poi导出excel,可以自定义保存路径

    poi导出excel比js导出excel安全性更好,在使用poi导出excel时,先要导入poi-3.5-FINAL-20090928.jar包到你项目的lib目录下,我这里选择是3.5版的 1.ac ...

  7. POI导出EXCEL经典实现

    1.Apache POI简介 Apache POI是Apache软件基金会的开放源码函式库,POI提供API给Java程式对Microsoft Office格式档案读和写的功能. .NET的开发人员则 ...

  8. Java POI 导出EXCEL经典实现 Java导出Excel

    转自http://blog.csdn.net/evangel_z/article/details/7332535 在web开发中,有一个经典的功能,就是数据的导入导出.特别是数据的导出,在生产管理或者 ...

  9. java中使用poi导出excel表格数据并且可以手动修改导出路径

    在我们开发项目中,很多时候会提出这样的需求:将前端的某某数据以excel表格导出,今天就给大家写一个简单的模板. 这里我们选择使用poi导出excel: 第一步:导入需要的jar包到 lib 文件夹下

随机推荐

  1. Python 字符串去除相邻重复的元素

    1 def quchong(S): 2 str1=[""] 3 for i in S: 4 if i == str1[-1]: 5 str1.pop() 6 else: 7 str ...

  2. 【NOIP2013模拟】黑魔法师之门

    题目描述 经过了16个工作日的紧张忙碌,未来的人类终于收集到了足够的能源.然而在与Violet星球的战争中,由于Z副官的愚蠢,地球的领袖applepi被邪恶的黑魔法师Vani囚禁在了Violet星球. ...

  3. 循环删除list的方法

    错误的方法: 正确的方法:

  4. Oracle数据库sqlldr工具的使用

    sqlldr导入文本内容到数据库表时,需要指定一个ctl文件(控制文件),通过该文件来完成数据的导入. 1 首先创建一个表student create table student( stu_id nu ...

  5. Mybatis 注解形式

        1.查询 // 查询 @Select("select id, name, type, numbers, cancelled, completed, percentage from c ...

  6. 如何使用二维码进行表白-一键制作二维码,gif二维码制作

    " 如何使用二维码进行表白-一键制作二维码" 二维码在我们现在生活中随处可见,因为一次突发奇想,那我们可不可以制作一个自己的二维码呢!然后让女朋友去扫描一下----嘿嘿嘿--不行, ...

  7. PHP:文件包含漏洞

    简单记录一些文件包含漏洞的常用方法 产生原因: 文件包含漏洞的产生原因是在通过引入文件时,由于传入的文件名没有经过合理的校验,或者校检被绕过,从而操作了预想之外的文件,就可能导致意外的文件泄露甚至恶意 ...

  8. 【小白学PyTorch】13 EfficientNet详解及PyTorch实现

    参考目录: 目录 1 EfficientNet 1.1 概述 1.2 把扩展问题用数学来描述 1.3 实验内容 1.4 compound scaling method 1.5 EfficientNet ...

  9. Spring Boot 项目打成 war 包部署

    Spring Boot 一个非常方便的功能就是支持内置的 Servlet 容器,一般我们部署 Spring Boot 应用时都是打成一个可执行的 Jar 包进行部署.其实 Spring Boot 也是 ...

  10. CCNP七层参考模型

    一.OSI七层参考模型 七层参考模型由ISO组织提出,为什么是参考模型呢?因为我们现在实际应用的是TCP/IP协议栈,OSI模型仅供学习参考,下面具体说一下有哪七层: (7)应用层:应用程序和服务功能 ...