目录
1. 导入依赖
2. ExcelUtils 工具类
3. 大数据量生成Excel文件案列,生成多个Excel文件压缩 案列
1. 导入依赖
com.alibaba
easyexcel
2.2.8
com.google.guava
guava
28.2-jre
2. ExcelUtils 工具类
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.google.common.collect.Lists;
import com.jenkins.dto.User;
import com.jenkins.utils.ZipUtil;
import com.jenkins.utils.excel.dto.WorkbookDto;
import java.io.File;
import java.util.ArrayList;
import java.util.List;
import java.util.concurrent.atomic.AtomicReference;
import java.util.function.Supplier;
public class ExcelUtils {
private static final String pathConfig = "C:/tmp";
private static final int EXCEL_LIMIT_NUM = 500000;
public static File createMultiFileExcelZipFile(List> suppliers) {
File zipFile = null;
// 临时目录
File localDir = ExcelUtils.createDir(pathConfig);
int sheetNumber = 0;
for (Supplier supplier : suppliers) {
WorkbookDto workbookDto = supplier.get();
File file = new File(localDir, workbookDto.getFileName() + "_" + workbookDto.getFileSuffix() + ".xlsx");
ExcelWriter excelWriter = EasyExcel.write(file.getAbsolutePath()).excelType(ExcelTypeEnum.XLSX).build();
if (workbookDto.getDataList().size() > EXCEL_LIMIT_NUM) {
List> parts = Lists.partition(workbookDto.getDataList(), EXCEL_LIMIT_NUM);
for (int i = 1; i <= parts.size(); i++) {
List> list = parts.get(i - 1);
writeExcel(excelWriter, list, workbookDto.getExcelClass(), sheetNumber, "sheet" + i);
sheetNumber++;
}
} else {
writeExcel(excelWriter, workbookDto.getDataList(), workbookDto.getExcelClass(), sheetNumber, "sheet1");
sheetNumber++;
}
excelWriter.finish();
}
String srcFilePath = localDir.getPath();
String destFilePath = srcFilePath;
zipFile = ZipUtil.compress(srcFilePath, destFilePath);
if (null != zipFile) {
deleteFileDir(localDir);
}
return zipFile;
}
public static void writeExcel(ExcelWriter excelWriter, List> dataList, Class> excelClass, Integer sheetNumber,
String sheetName) {
Class> cls = null;
if (dataList == null || dataList.isEmpty()) {
cls = excelClass;
} else {
cls = dataList.get(0).getClass();
}
WriteSheet sheet = EasyExcel.writerSheet(sheetNumber, sheetName).head(cls).build();
excelWriter.write(dataList, sheet);
}
private static boolean deleteFileDir(File dirFile) {
if (!dirFile.exists()) {
return false;
}
if (dirFile.isFile()) {
return dirFile.delete();
} else {
for (File file : dirFile.listFiles()) {
deleteFileDir(file);
}
}
return dirFile.delete();
}
private static File createDir(String localDirPath) {
File localDir = new File(localDirPath);
if (!localDir.exists()) {
localDir.mkdirs();
}
return localDir;
}
}
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.google.common.collect.Lists;
import com.jenkins.dto.User;
import com.jenkins.utils.ZipUtil;
import com.jenkins.utils.excel.dto.WorkbookDto;
import java.io.File;
import java.util.ArrayList;
import java.util.List;
import java.util.concurrent.atomic.AtomicReference;
import java.util.function.Supplier;
public class ExcelUtils {
private static final String pathConfig = "C:/tmp";
private static final int EXCEL_LIMIT_NUM = 500000;
public static File createMultiFileExcelZipFile(List> suppliers) {
File zipFile = null;
// 临时目录
File localDir = ExcelUtils.createDir(pathConfig);
int sheetNumber = 0;
for (Supplier supplier : suppliers) {
WorkbookDto workbookDto = supplier.get();
File file = new File(localDir, workbookDto.getFileName() + "_" + workbookDto.getFileSuffix() + ".xlsx");
ExcelWriter excelWriter = EasyExcel.write(file.getAbsolutePath()).excelType(ExcelTypeEnum.XLSX).build();
if (workbookDto.getDataList().size() > EXCEL_LIMIT_NUM) {
List> parts = Lists.partition(workbookDto.getDataList(), EXCEL_LIMIT_NUM);
for (int i = 1; i <= parts.size(); i++) {
List> list = parts.get(i - 1);
writeExcel(excelWriter, list, workbookDto.getExcelClass(), sheetNumber, "sheet" + i);
sheetNumber++;
}
} else {
writeExcel(excelWriter, workbookDto.getDataList(), workbookDto.getExcelClass(), sheetNumber, "sheet1");
sheetNumber++;
}
excelWriter.finish();
}
String srcFilePath = localDir.getPath();
String destFilePath = srcFilePath;
zipFile = ZipUtil.compress(srcFilePath, destFilePath);
if (null != zipFile) {
deleteFileDir(localDir);
}
return zipFile;
}
public static void writeExcel(ExcelWriter excelWriter, List> dataList, Class> excelClass, Integer sheetNumber,
String sheetName) {
Class> cls = null;
if (dataList == null || dataList.isEmpty()) {
cls = excelClass;
} else {
cls = dataList.get(0).getClass();
}
WriteSheet sheet = EasyExcel.writerSheet(sheetNumber, sheetName).head(cls).build();
excelWriter.write(dataList, sheet);
}
private static boolean deleteFileDir(File dirFile) {
if (!dirFile.exists()) {
return false;
}
if (dirFile.isFile()) {
return dirFile.delete();
} else {
for (File file : dirFile.listFiles()) {
deleteFileDir(file);
}
}
return dirFile.delete();
}
private static File createDir(String localDirPath) {
File localDir = new File(localDirPath);
if (!localDir.exists()) {
localDir.mkdirs();
}
return localDir;
}
}



