pom.xml 导入
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>easyexcel</artifactId>
<version>2.2.7</version>
<exclusions>
<exclusion>
<artifactId>slf4j-api</artifactId>
<groupId>org.slf4j</groupId>
</exclusion>
</exclusions>
</dependency>
定义类SheetInfoBean,用于存储sheet名,要保存的实体类,以及数据列表
import java.util.List;
public class SheetInfoBean {
/**
* sheet页名称
*/
private String sheetName;
/**
* sheet标题bean
*/
private Class<?> headClass;
/**
* sheet页数据
*/
private List<?> dataList;
public SheetInfoBean() {
}
public SheetInfoBean(String sheetName, Class<?> headClass, List<?> dataList) {
this.sheetName = sheetName;
this.headClass = headClass;
this.dataList = dataList;
}
public String getSheetName() {
return sheetName;
}
public void setSheetName(String sheetName) {
this.sheetName = sheetName;
}
public Class<?> getHeadClass() {
return headClass;
}
public void setHeadClass(Class<?> headClass) {
this.headClass = headClass;
}
public List<?> getDataList() {
return dataList;
}
public void setDataList(List<?> dataList) {
this.dataList = dataList;
}
@Override
public String toString() {
return "SheetInfoBean{" +
"sheetName='" + sheetName + '\'' +
", headClass=" + headClass +
", dataList=" + dataList +
'}';
}
}
控制器方法写法
public void exportBaseDataExcel(HttpServletResponse response) {
// 构造各个sheet页相关信息
List<SheetInfoBean> sheetInfoList = new LinkedList<>();
sheetInfoList.add(new SheetInfoBean("绩效打分领导", JxLeader.class, iJxLeaderService.list()));
sheetInfoList.add(new SheetInfoBean("岗位级别系数人员分组", JxPostLevel.class, iJxPostLevelService.list()));
sheetInfoList.add(new SheetInfoBean("绩效岗位条线", JxPostLine.class, iJxPostLineService.list()));
sheetInfoList.add(new SheetInfoBean("部门系数", JxInstCoef.class, iJxInstCoefService.list()));
//领导部门系数
sheetInfoList.add(new SheetInfoBean("领导部门系数", JxLeaderInstCoef.class, iJxLeaderInstCoefService.list()));
sheetInfoList.add(new SheetInfoBean("身份证号对应工号", JxIdCardToEmp.class, iJxIdCardToEmpService.list()));
String fileName = "基础数据合集" + System.currentTimeMillis() + ".xlsx";
String filePath = profile + "/" + fileName;
// 导出文件
File file = new File(filePath);
try{
ExcelWriter excelWriter = EasyExcel.write(file).build();
WriteSheet writeSheet;
for (SheetInfoBean bean : sheetInfoList) {
// 构建sheet对象
writeSheet = EasyExcel.writerSheet(bean.getSheetName()).head(bean.getHeadClass()).build();
// 写出sheet数据
excelWriter.write(bean.getDataList(), writeSheet);
}
// 关流
excelWriter.finish();
File targetFile = new File(filePath);
FileInputStream inStream = new FileInputStream(targetFile);
// 设置输出的格式
response.setContentType("application/octet-stream");
response.setCharacterEncoding("utf-8");
response.addHeader("Content-Disposition", "attachment; filename=" + URLEncoder.encode(fileName, "utf-8"));
// 循环取出流中的数据
byte[] b = new byte[100];
int len;
while ((len = inStream.read(b)) > 0) {
response.getOutputStream().write(b, 0, len);
}
} catch (Exception e) {
// do something you want
e.printStackTrace();
}
}
前端vue2 导出函数
// 导出文件 func: 接口,查询接口略...
var downloadFile = function (func) {
func.then(function(result){
var curType=result.headers["content-type"];
if(curType=='application/json'){
var fileReader = new FileReader();
fileReader.onload = function() {
try {
var jsonData = JSON.parse(fileReader.result); // 说明是普通对象数据,后台转换失败
gUtils.showMessage(jsonData.message);
} catch (err) { // 解析成对象失败,说明是正常的文件流
console.log('success...');
}
};
fileReader.readAsText(result);
return;
}
var headers=result.headers;
var fileName=headers['content-disposition'].split(";")[1].split("=")[1];
var arr=fileName.split('"')
fileName=arr.join("");
fileName = revertUTF8(fileName);
if (window.navigator.msSaveOrOpenBlob) {
navigator.msSaveBlob(result, filename)
}else{
var tempLink = document.createElement("a");
var url=window.URL || window.webkitURL || window.moxURL;
tempLink.href = url.createObjectURL(result)
tempLink.setAttribute("download", fileName);
tempLink.click();
window.URL.revokeObjectURL(result);//释放bolb内存
}
});
}
Comments | NOTHING