excelUtil
util
import cn.afterturn.easypoi.excel.ExcelExportUtil;
import cn.afterturn.easypoi.excel.ExcelImportUtil;
import cn.afterturn.easypoi.excel.entity.ExportParams;
import cn.afterturn.easypoi.excel.entity.ImportParams;
import cn.afterturn.easypoi.excel.entity.enmus.ExcelType;
import cn.hutool.core.collection.CollUtil;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;
import org.apache.poi.ss.usermodel.Workbook;
import javax.servlet.http.HttpServletResponse;
import java.io.File;
import java.io.IOException;
import java.io.InputStream;
import java.lang.reflect.Field;
import java.net.URLEncoder;
import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.NoSuchElementException;
@Slf4j
public class ExcelUtil {
private static List<String> specialCode = new ArrayList<String>() {{
add("\u200E");
}};
public static <T> List<T> analysisExcel(InputStream inputStream, int sheetIndex, Class<T> pojoClass) {
if (inputStream == null) return null;
ImportParams params = new ImportParams();
params.setStartSheetIndex(sheetIndex);
params.setNeedVerfiy(true);
List<T> result = new ArrayList<>();
try {
List<T> list = ExcelImportUtil.importExcel(inputStream, pojoClass, params);
for (T t : list) {
if (!checkObjFieldIsNull(t)) {
result.add(t);
}
}
if (CollUtil.isEmpty(list)) {
log.error("导入数据不能为空");
}
} catch (NoSuchElementException e) {
log.error("excel文件不能为空{}", e.getMessage());
} catch (Exception e) {
log.error("导入异常", e);
}
return result;
}
public static <T> List<T> analysisExcel(File file, int sheetIndex, Class<T> pojoClass) {
if (file == null) return null;
ImportParams params = new ImportParams();
params.setNeedVerfiy(true);
params.setStartSheetIndex(sheetIndex);
List<T> result = new ArrayList<>();
try {
List<T> list = ExcelImportUtil.importExcel(file, pojoClass, params);
for (T t : list) {
if (!checkObjFieldIsNull(t)) {
result.add(t);
}
}
if (CollUtil.isEmpty(list)) {
log.error("导入数据不能为空");
}
} catch (NoSuchElementException e) {
log.error("excel文件不能为空{}", e.getMessage());
} catch (Exception e) {
log.error("导入异常", e);
}
return result;
}
public static void exportExcel(List<Map<String, Object>> list, String fileName, HttpServletResponse response) throws IOException {
Workbook workbook = ExcelExportUtil.exportExcel(list, ExcelType.HSSF);
downLoadExcel(fileName, response, workbook);
}
public static void exportExcel(List<?> list, Class<?> pojoClass, String fileName, HttpServletResponse response) throws IOException {
ExportParams exportParams = new ExportParams();
exportParams.setType(ExcelType.XSSF);
exportExcel(list, pojoClass, fileName, response, exportParams);
}
private static void exportExcel(List<?> list, Class<?> pojoClass, String fileName, HttpServletResponse response, ExportParams exportParams) throws IOException {
Workbook workbook = ExcelExportUtil.exportExcel(exportParams, pojoClass, list);
downLoadExcel(fileName, response, workbook);
}
public static void exportExcel(List<?> list, Class<?> pojoClass, String fileName, String title, String sheetName, HttpServletResponse response) throws IOException {
ExportParams exportParams = new ExportParams(title, sheetName, ExcelType.XSSF);
exportExcel(list, pojoClass, fileName, response, exportParams);
}
public static void exportExcel(List<?> list, String title, String sheetName, Class<?> pojoClass, String fileName, boolean isCreateHeader, HttpServletResponse response) throws IOException {
ExportParams exportParams = new ExportParams(title, sheetName, ExcelType.XSSF);
exportParams.setCreateHeadRows(isCreateHeader);
exportExcel(list, pojoClass, fileName, response, exportParams);
}
private static void downLoadExcel(String fileName, HttpServletResponse response, Workbook workbook) throws IOException {
try {
String time = LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss"));
response.setCharacterEncoding("UTF-8");
response.setHeader("content-Type", "application/vnd.ms-excel");
response.setHeader("Content-Disposition", "attachment;filename=" + URLEncoder.encode(fileName + "_" + time + ".xlsx", "UTF-8"));
response.setHeader("Access-Control-Expose-Headers", "Content-Disposition");
workbook.write(response.getOutputStream());
} catch (Exception e) {
throw new IOException(e.getMessage());
}
}
private static boolean checkObjFieldIsNull(Object obj) throws IllegalAccessException {
if (obj == null) return true;
boolean flag = true;
for (Field f : obj.getClass().getDeclaredFields()) {
f.setAccessible(true);
Object o = f.get(obj);
if (o != null) {
flag = false;
}
if (o instanceof String) {
for (String code : specialCode) {
o = o.toString().replaceAll(code, "");
}
o = StringUtils.isBlank((String) o) ? "" : ((String) o).trim();
f.set(obj, o);
}
}
return flag;
}
}