网站和新媒体建设方案,端子东莞网站建设,怎么给自己网站做搜索框,动漫设计好学吗前言#xff1a;在这里分享自己第一次使用EasyExcel并且编写工具类#xff0c;且在接口中支持excel文件下载的一系列流程#xff0c;包含所有前后端#xff08;JSJAVA#xff09;完整代码#xff0c;可以根据自己需要自行提取#xff0c;仅供参考。 一.引入EasyExcel依赖…前言在这里分享自己第一次使用EasyExcel并且编写工具类且在接口中支持excel文件下载的一系列流程包含所有前后端JSJAVA完整代码可以根据自己需要自行提取仅供参考。 一.引入EasyExcel依赖
dependencygroupIdcom.alibaba/groupIdartifactIdeasyexcel/artifactIdversion2.2.7/version
/dependency
二.自定义创建一个实体类如下这里使用了lombok
package com.genew.nms.cloud.lm.vo;import com.alibaba.excel.annotation.ExcelIgnore;
import com.alibaba.excel.annotation.ExcelProperty;
import com.alibaba.excel.annotation.write.style.ColumnWidth;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.genew.nms.cloud.lm.config.LocalDateStringConverter;
import lombok.Data;
import lombok.experimental.Accessors;
import org.springframework.format.annotation.DateTimeFormat;import java.io.Serializable;
import java.time.LocalDateTime;/*** author Salong* date 2023/5/29 15:38*/Data
Accessors(chain true)
public class UserModel implements Serializable {private static final long serialVersionUID 1L;ExcelIgnoreprivate String id;ExcelProperty(value User Name)ColumnWidth(20)private String userId;ExcelProperty(value User IP)ColumnWidth(20)private String userIp;ExcelProperty(value Log Time, converter LocalDateStringConverter.class)ColumnWidth(20)DateTimeFormat(pattern yyyy-MM-dd HH:mm:ss)JsonFormat(pattern yyyy-MM-dd HH:mm:ss)private LocalDateTime logTime;}其中各个注解功能如下
ExceIgnore标注的属性不会被EasyExcel读取识别
ExcelProperty(value 用户名) 被此标记的对象属性将会显示在‘用户名’的表头下面此注解还有一个index字段int类型从1开始可以不写默认按照从上往下的顺序给excel排列。
ColumnWidth(20) 表示此列的宽度可以根据内容的长短自定义宽度
需要注意日期类型的属性在ExcelProperty注解中需要额外添加coverter字段 三.编写EasyExcel工具类这里有两个class完整代码已贴出直接复制即可使用
1.ExcelUtils类
package com.genew.nms.cloud.lm.util;import com.alibaba.excel.EasyExcel;
import com.alibaba.excel.ExcelWriter;
import com.alibaba.excel.support.ExcelTypeEnum;
import com.alibaba.excel.write.metadata.WriteSheet;
import com.alibaba.fastjson2.JSON;
import lombok.extern.slf4j.Slf4j;import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.OutputStream;
import java.net.URLEncoder;
import java.util.Arrays;
import java.util.HashMap;
import java.util.List;
import java.util.Map;/*** author Salong* date 2022/8/18 10:51*/Slf4j
public class ExcelUtils {/*** 本地访问* param fileFullPath 本地完整路径* param sheets sheet模板*/public static void writeLocalExcel(String fileFullPath, SheetModel... sheets) {if (null sheets || sheets.length0){log.error(所需参数sheets缺失!);}ExcelWriter excelWriter EasyExcel.write(fileFullPath).build();ListSheetModel list Arrays.asList(sheets);list.forEach(e-{WriteSheet writeSheet EasyExcel.writerSheet(e.getIndex(), e.getSheetName()).head(e.getClazz()).build();excelWriter.write(e.getData(),writeSheet);});log.info(写入excel成功!);excelWriter.finish();}/**** param response http请求返回response对象* param fileName excel文件名* param excelTypeEnum excel后缀类型(输入ExcelTypeEnum.XLS或者ExcelTypeEnum.XLSX)* param sheets sheet表单模板* throws IOException*/public static void writeWebExcel(HttpServletResponse response, String fileName, ExcelTypeEnum excelTypeEnum, SheetModel... sheets) {if (null sheets || sheets.length0){log.error(所需参数sheets缺失!);}ListSheetModel list Arrays.asList(sheets);try {OutputStream outputStream getOutputStream(response, fileName,excelTypeEnum);ExcelWriter excelWriter EasyExcel.write(outputStream).build();list.forEach(e-{WriteSheet writeSheet EasyExcel.writerSheet(e.getIndex(), e.getSheetName()).head(e.getClazz()).build();excelWriter.write(e.getData(),writeSheet);});log.info(写入excel成功!);excelWriter.finish();} catch (IOException e) {log.error(excel导出出失败, e);// 重置responseresponse.reset();response.setContentType(application/json);response.setCharacterEncoding(utf-8);MapString, String map new HashMap();map.put(status, 500);map.put(message, 下载文件失败 e.getMessage());try {response.getWriter().println(JSON.toJSONString(map));} catch (IOException ex) {log.error(response写入信息失败!,ex);}}}/*** 导出时生成OutputStream*/private static OutputStream getOutputStream(HttpServletResponse response, String fileName,ExcelTypeEnum excelTypeEnum)throws IOException {response.setContentType(application/vnd.ms-excel);response.setCharacterEncoding(utf-8);// 这里URLEncoder.encode可以防止中文乱码String file URLEncoder.encode(fileName, UTF-8).replaceAll(\\, %20);response.setHeader(Content-disposition, attachment;filename*utf-8 file excelTypeEnum.getValue());return response.getOutputStream();}
}2.SheetModel类
package com.genew.nms.cloud.lm.util;import lombok.Data;
import lombok.experimental.Accessors;import java.io.Serializable;
import java.util.List;/*** author Salong* date 2022/8/18 10:52*/Data
Accessors(chain true)
public class SheetModelT implements Serializable {/*** 表单排序(一个Excel的不同的sheet名称不能一样,会覆盖*/private int index;/*** sheet表单名称一个Excel的不同的sheet名称不能一样会覆盖*/private String sheetName;/*** 表单填充内容*/private ListT data;/*** 表头数据类型*/private ClassT clazz;
}四.使用方法示例
其中下面演示的response为HttpServletResponse对象可以用于在网络中传输
本地生成的参考工具类ExcelUtils.writeLocalExcel方法这里不一一举例。 //1.模拟获取到的数据信息并且放在List中这里用UserModel来举例
ListUserModel usersnew ArrayList();
//2.新建SheetModel对象(工作表)
SheetModelUserModel model new SheetModel();
//3.构建SheetModel对象基本信息(工作表)
model.setData(users)
.setIndex(0)
.setSheetName(user log)
.setClazz(UserModel.class);//其中model为此excel中的一个工作表若excel中有多个工作表可重复构建多个model对象
//但是index不能一样否则会覆盖内容
SheetModelUserModel model01 new SheetModel();
model01 .setData(users)
.setIndex(1)
.setSheetName(user1 log)
.setClazz(UserModel.class);//4.将上面定义的所有工作表写入到excel(上面的名称是工作表名称这里的名称为excel名称)
ExcelUtils.writeWebExcel(response, system Log, ExcelTypeEnum.XLS, model,model01); 五.前端接收文件JS
//js中定义需要引入axios
export function cg(config){let url/api/xxx;return axios.post(url,config,{responseType: blob});
}//vue中使用
cg(config).then((response){const blob new Blob([response.data], { type: application/zip });let url window.URL.createObjectURL(blob);const link document.createElement(a); // 创建a标签link.href url;link.download gc.zip; // 重命名文件link.click();URL.revokeObjectURL(url); // 释放内存}).catch((err){console.log(err);})