gunshi-project-ss/src/main/java/com/gunshi/project/xyt/util/ExcelUtil.java

149 lines
5.6 KiB
Java
Raw Normal View History

2024-07-10 10:20:51 +08:00
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 com.gunshi.project.xyt.util.excel.ExcelListener;
import com.gunshi.project.xyt.util.excel.ExcelResult;
2024-07-10 10:20:51 +08:00
import jakarta.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.InputStream;
2024-07-10 10:20:51 +08:00
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);
2024-07-11 13:36:44 +08:00
} finally {
try {
if (out != null){
out.flush();
out.close();
}
} catch (IOException e) {
throw new RuntimeException("导出Excel异常");
}
}
}
public static <T> void exportExcel(List<List<String>> head,List<T> data, 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))
.head(head)
.sheet(sheetName);
builder.doWrite(data);
2024-07-10 10:20:51 +08:00
} 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;
}
/**
* 使
*
* @param is
* @param clazz
* @param listener
* @return
*/
public static <T> ExcelResult<T> importExcel(InputStream is, Class<T> clazz, ExcelListener<T> listener) {
EasyExcel.read(is, clazz, listener).sheet().doRead();
return listener.getExcelResult();
}
2024-07-10 10:20:51 +08:00
}