easyexcel依赖
parent
7e472e2b1f
commit
f2f8bdd3e8
5
pom.xml
5
pom.xml
|
|
@ -60,6 +60,11 @@
|
||||||
<artifactId>commons-net</artifactId>
|
<artifactId>commons-net</artifactId>
|
||||||
<version>3.3</version>
|
<version>3.3</version>
|
||||||
</dependency>
|
</dependency>
|
||||||
|
<dependency>
|
||||||
|
<groupId>com.alibaba</groupId>
|
||||||
|
<artifactId>easyexcel</artifactId>
|
||||||
|
<version>3.1.1</version>
|
||||||
|
</dependency>
|
||||||
|
|
||||||
<!-- <dependency>-->
|
<!-- <dependency>-->
|
||||||
<!-- <groupId>org.springframework.boot</groupId>-->
|
<!-- <groupId>org.springframework.boot</groupId>-->
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,109 @@
|
||||||
|
package com.gunshi.project.xyt.util;
|
||||||
|
|
||||||
|
import cn.hutool.core.collection.CollUtil;
|
||||||
|
import cn.hutool.core.io.resource.ClassPathResource;
|
||||||
|
import com.alibaba.excel.EasyExcel;
|
||||||
|
import com.alibaba.excel.ExcelWriter;
|
||||||
|
import com.alibaba.excel.support.ExcelTypeEnum;
|
||||||
|
import com.alibaba.excel.write.builder.ExcelWriterSheetBuilder;
|
||||||
|
import com.alibaba.excel.write.metadata.WriteSheet;
|
||||||
|
import jakarta.servlet.http.HttpServletResponse;
|
||||||
|
|
||||||
|
import java.io.IOException;
|
||||||
|
import java.io.OutputStream;
|
||||||
|
import java.net.URLEncoder;
|
||||||
|
import java.nio.charset.StandardCharsets;
|
||||||
|
import java.util.List;
|
||||||
|
import java.util.Map;
|
||||||
|
|
||||||
|
public class ExcelUtil {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 导出excel
|
||||||
|
*
|
||||||
|
* @param list 导出数据集合,加动态表头
|
||||||
|
* @param filename 工作表的名称
|
||||||
|
* @param clazz 实体类
|
||||||
|
* @param response 响应体
|
||||||
|
*/
|
||||||
|
public static <T> void exportExcel(List<T> list, String filename, Class<T> clazz, HttpServletResponse response,String sheetName) {
|
||||||
|
OutputStream out = null;
|
||||||
|
try {
|
||||||
|
out = getOutputStream(filename,response);
|
||||||
|
ExcelWriterSheetBuilder builder = EasyExcel.write(out, clazz)
|
||||||
|
//是否自动关闭流
|
||||||
|
.autoCloseStream(Boolean.FALSE)
|
||||||
|
//自动列宽(不太精确)
|
||||||
|
.registerWriteHandler(new VoteTitleHandler(filename))
|
||||||
|
.sheet(sheetName);
|
||||||
|
builder.doWrite(list);
|
||||||
|
} finally {
|
||||||
|
try {
|
||||||
|
if (out != null){
|
||||||
|
out.flush();
|
||||||
|
out.close();
|
||||||
|
}
|
||||||
|
} catch (IOException e) {
|
||||||
|
throw new RuntimeException("导出Excel异常");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 单表多数据模板导出 模板格式为 {.属性}
|
||||||
|
*
|
||||||
|
* @param filename 文件名
|
||||||
|
* @param templatePath 模板路径 resource 目录下的路径包括模板文件名
|
||||||
|
* 例如: excel/temp.xlsx
|
||||||
|
* 重点: 模板文件必须放置到启动类对应的 resource 目录下
|
||||||
|
* @param data 模板需要的数据
|
||||||
|
* @param list 模板需要的集合数据
|
||||||
|
*/
|
||||||
|
public static <T> void exportTemplate(Map<String, Object> data, List<T> list, String filename, String templatePath, HttpServletResponse response) {
|
||||||
|
OutputStream out = null;
|
||||||
|
try {
|
||||||
|
out = getOutputStream(filename,response);
|
||||||
|
ClassPathResource templateResource = new ClassPathResource(templatePath);
|
||||||
|
ExcelWriter excelWriter = EasyExcel.write(out)
|
||||||
|
.withTemplate(templateResource.getStream())
|
||||||
|
.excelType(ExcelTypeEnum.XLSX)
|
||||||
|
.build();
|
||||||
|
WriteSheet writeSheet = EasyExcel.writerSheet().build();
|
||||||
|
if (CollUtil.isEmpty(data)) {
|
||||||
|
throw new IllegalArgumentException("数据为空");
|
||||||
|
}
|
||||||
|
excelWriter.fill(list,writeSheet);
|
||||||
|
excelWriter.fill(data, writeSheet);
|
||||||
|
excelWriter.finish();
|
||||||
|
} finally {
|
||||||
|
try {
|
||||||
|
if (out != null){
|
||||||
|
out.flush();
|
||||||
|
out.close();
|
||||||
|
}
|
||||||
|
} catch (IOException e) {
|
||||||
|
throw new RuntimeException("导出Excel异常");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private static OutputStream getOutputStream(String fileName, HttpServletResponse response) {
|
||||||
|
try {
|
||||||
|
fileName = URLEncoder.encode(fileName, StandardCharsets.UTF_8);
|
||||||
|
response.setContentType("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet;charset=UTF-8");
|
||||||
|
response.setCharacterEncoding("utf8");
|
||||||
|
response.setHeader("Content-Disposition", "attachment; filename=" + fileName + ".xlsx");
|
||||||
|
response.setHeader("Pragma", "public");
|
||||||
|
response.setHeader("Cache-Control", "no-store");
|
||||||
|
response.addHeader("Cache-Control", "max-age=0");
|
||||||
|
return response.getOutputStream();
|
||||||
|
} catch (IOException e) {
|
||||||
|
System.out.println(e.getMessage());
|
||||||
|
}
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1,45 @@
|
||||||
|
package com.gunshi.project.xyt.util;
|
||||||
|
|
||||||
|
import com.alibaba.excel.metadata.Head;
|
||||||
|
import com.alibaba.excel.write.handler.CellWriteHandler;
|
||||||
|
import com.alibaba.excel.write.metadata.holder.WriteSheetHolder;
|
||||||
|
import com.alibaba.excel.write.metadata.holder.WriteTableHolder;
|
||||||
|
import com.baomidou.mybatisplus.core.toolkit.CollectionUtils;
|
||||||
|
import org.apache.poi.ss.usermodel.Row;
|
||||||
|
import org.springframework.util.PropertyPlaceholderHelper;
|
||||||
|
|
||||||
|
import java.util.Date;
|
||||||
|
import java.util.List;
|
||||||
|
import java.util.Properties;
|
||||||
|
|
||||||
|
|
||||||
|
public class VoteTitleHandler implements CellWriteHandler {
|
||||||
|
|
||||||
|
private String title;
|
||||||
|
|
||||||
|
private String describe;
|
||||||
|
|
||||||
|
private Date voteTime;
|
||||||
|
|
||||||
|
PropertyPlaceholderHelper placeholderHelper = new PropertyPlaceholderHelper("${", "}");
|
||||||
|
|
||||||
|
public VoteTitleHandler(String title) {
|
||||||
|
this.title = title;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void beforeCellCreate(WriteSheetHolder writeSheetHolder, WriteTableHolder writeTableHolder,
|
||||||
|
Row row, Head head, Integer integer, Integer integer1, Boolean aBoolean) {
|
||||||
|
if (head != null) {
|
||||||
|
List<String> headNameList = head.getHeadNameList();
|
||||||
|
if (CollectionUtils.isNotEmpty(headNameList)) {
|
||||||
|
Properties properties = new Properties();
|
||||||
|
properties.setProperty("title", title);
|
||||||
|
for (int i = 0; i < headNameList.size(); i++) {
|
||||||
|
headNameList.set(i, placeholderHelper.replacePlaceholders(headNameList.get(i), properties));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
Loading…
Reference in New Issue