SpringBoot+Hutool+thymeleaf完成导出Excel的实现⽅法
⽬录
1、引⼊依赖
2、创建实体类
3、创建导出接⼝
4、创建html
5、测试导出
导出Excel的框架有很多种,POI相对来说⽐较⽼了,很多Excel框架底层都是POI、有EasyPoi、EasyExcel、包括Hutool当中封装的也是POI。唯⼀不同的是Hutool⼯具包不局限与做Excel、他⾥⾯封装了⼤量的util,⼀般现在开发都会⽤到糊涂。
本篇⽰例当中不仅仅有后端,⽽且还提供了前端html,html当中利⽤js将后端输出流直接下载为⽂件。
实现的效果如下:⼀点击导出⽂件直接下载到本地。应该现在导出普遍都是这样。
1、引⼊依赖
这⾥⽤到了lombok,就是简化实体类当中的get、set⽅法的。
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<optional>true</optional>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-thymeleaf</artifactId>
</dependency>
<!-- 导出重要依赖|截⽌2022-03-09 hutool和poi-ooxml依赖是最新的 -->
<!--POI组件设置字体样式-->
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi-ooxml</artifactId>
<version>5.2.1</version>
</dependency>
<dependency>
<groupId>cn.hutool</groupId>
<artifactId>hutool-all</artifactId>
<version>5.7.22</version>
</dependency>
2、创建实体类
⽤于导出测试使⽤。
import lombok.AllArgsConstructor;
import lombok.Data;
@Data
@AllArgsConstructor
public class User {
private String name;
private Integer age;
private String sex;
3、创建导出接⼝
导出主要是围绕ExcelWriter类来进⾏开发的。
我⼤概看了⼀眼,根据api其实任何复杂的Excel导出都可以做出来,API可以设置指定单元格样式字体、还有指定⾏的样式字体、合并单元格等等…
import cn.l.ExcelUtil;
import cn.l.ExcelWriter;
l.hutoolexcel.domain.User;
import org.apache.poi.ss.usermodel.CellStyle;
import org.apache.poi.ss.usermodel.Font;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.URLEncoder;
import java.nio.charset.StandardCharsets;
import java.util.*;
@Controller
@RequestMapping("/test")
public class TestController {
springboot其实就是spring
/**
* 导出测试
*
* @param response
* @param startDate
* @param endDate
*/
@PostMapping("/export")
public void export2(HttpServletResponse response, String startDate, String endDate) {
List<User> list = data();
// 1.创建ExcelWriter
// 通过⼯具类创建writer,默认创建xls格式
ExcelWriter excelWriter = Writer();
//创建xlsx格式的
//ExcelWriter writer = Writer(true);
// 2.设置⼀级标题
// 合并单元格后的标题⾏,使⽤默认标题样式,从0开始
<(2, "学⽣记录");
// 设置表头⾼度
excelWriter.setRowHeight(0, 25);
// 3.设置⼆级标题
excelWriter.addHeaderAlias("name", "姓名");
excelWriter.addHeaderAlias("age", "年龄");
excelWriter.addHeaderAlias("sex", "性别");
// 4.设置表头字体
// 获取表头样式,获取样式后可⾃定义样式
CellStyle headCellStyle = HeadCellStyle();
// 获取单元格样式
//        CellStyle cellStyle = CellStyle();
// 设置内容字体
Font font = ateFont();
// 设置字体
font.setFontName("宋体");
// 设置字体⼤⼩
font.setFontHeightInPoints((short) 14);
// 字体加粗
font.setBold(true);
// 字体颜⾊
font.setColor(Font.SS_NONE);
headCellStyle.setFont(font);
// 5.设置单元格宽度
int[] arr = {30, 30, 25};
for (int i = 0; i < arr.length; i++) {
excelWriter.setColumnWidth(i, arr[i]);
// 只导出有别名的字段
excelWriter.setOnlyAlias(true);
// ⼀次性写出内容,使⽤默认样式,强制输出标题
excelWriter.write(list, true);
// 从第⼏⾏写⼊
//        excelWriter.setCurrentRow(1);
//        excelWriter.writeRow(data());
// 设置某个单元格的样式
/
/        CellStyle orCreateCellStyle = OrCreateCellStyle(0, 1);
// 设置某⾏的样式
//        excelWriter.setRowStyle();
try {
String fileName = de("统计" + startDate + "⽇到" + endDate + "⽇", StandardCharsets.UTF_8.name());            response.setContentType("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet");
response.setCharacterEncoding("utf-8");
response.setHeader("Content-disposition", "attachment;filename*=utf-8''" + fileName + ".xlsx");
// 将Excel Workbook刷出到输出流
excelWriter.OutputStream());
} catch (IOException e) {
e.printStackTrace();
throw new RuntimeException("⽂件写⼊失败!");
}
//关闭流
excelWriter.close();
}
/**
* 构造导出的数据
*
* @return
*/
public List<User> data() {
List<User> users = new ArrayList<>();
users.add(new User("张三", 2, "男"));
users.add(new User("李四", 2, "⼥"));
return users;
}
}
4、创建html
在templates下创建index.html,这样启动项⽬后直接访问8080端⼝,他会直接调到index.html。
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
<script src="ajax.aspnetcdn/ajax/jquery/jquery-3.5.1.min.js"></script>
</head>
<body>
<input type="button" id="clickme" value="导出"/>
</body>
<script type="text/javascript">
function postExcelFile(params, url) { //params是post请求需要的参数,url是请求url地址
var form = ateElement("form");
form.style.display = 'none';
form.action = url;
document.body.appendChild(form);
for (var key in params) {
var input = ateElement("input");
input.name = key;
input.value = params[key];
form.appendChild(input);
}
form.submit();
}
//点击导出按钮导出excel表格
var params = {};
params.startDate = '2022-01-01';
postExcelFile(params, "/test/export");
}
</script>
</html>
5、测试导出
到此这篇关于SpringBoot+Hutool+thymeleaf完成导出Excel的⽂章就介绍到这了,更多相关SpringBoot导出Excel内容请搜索以前的⽂章或继续浏览下⾯的相关⽂章希望⼤家以后多多⽀持!

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。