08-22-导出进度类别列表,导入同步修改
This commit is contained in:
@ -19,12 +19,14 @@ import org.dromara.common.core.utils.file.FileUtils;
|
||||
import org.dromara.common.excel.convert.ExcelBigNumberConvert;
|
||||
import org.dromara.common.excel.core.*;
|
||||
import org.dromara.common.excel.handler.DataWriteHandler;
|
||||
import org.springframework.http.HttpHeaders;
|
||||
|
||||
import java.io.IOException;
|
||||
import java.io.InputStream;
|
||||
import java.io.OutputStream;
|
||||
import java.io.UnsupportedEncodingException;
|
||||
import java.util.Collection;
|
||||
import java.util.Collections;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
|
||||
@ -203,6 +205,60 @@ public class ExcelUtil {
|
||||
builder.doWrite(list);
|
||||
}
|
||||
|
||||
/**
|
||||
* 导出多sheet excel(增强版,解决XML安全问题)
|
||||
*
|
||||
* @param sheetData 多个sheet的数据
|
||||
* @param sheetNames 多个sheet的名称
|
||||
* @param clazz 实体类
|
||||
* @param optionsList 级联下拉选内容列表
|
||||
*/
|
||||
public static <T> void exportMultiSheetExcelEnhanced(List<List<T>> sheetData, List<String> sheetNames, Class<T> clazz, List<List<DropDownOptions>> optionsList,HttpServletResponse response) throws IOException {
|
||||
resetResponse("file", response);
|
||||
ExcelWriter excelWriter = null;
|
||||
ServletOutputStream os = response.getOutputStream();
|
||||
|
||||
try {
|
||||
// 使用SXSSFWorkbook避免内存问题,并减少XML处理复杂度
|
||||
excelWriter = EasyExcel.write(os)
|
||||
.head(clazz)
|
||||
.autoCloseStream(false)
|
||||
.registerConverter(new ExcelBigNumberConvert())
|
||||
.build();
|
||||
|
||||
|
||||
// 为每个sheet写入数据
|
||||
for (int i = 0; i < sheetData.size(); i++) {
|
||||
// 创建基本sheet配置
|
||||
WriteSheet writeSheet = EasyExcel.writerSheet(i, sheetNames.get(i))
|
||||
.head(clazz)
|
||||
.build();
|
||||
|
||||
// 添加下拉选项(如果存在)
|
||||
if (optionsList != null && optionsList.size() > i && optionsList.get(i) != null) {
|
||||
ExcelDownHandler handler = new ExcelDownHandler(optionsList.get(i));
|
||||
writeSheet.setCustomWriteHandlerList(
|
||||
Collections.singletonList(handler));
|
||||
}
|
||||
|
||||
// 写入数据
|
||||
excelWriter.write(sheetData.get(i), writeSheet);
|
||||
}
|
||||
|
||||
} finally {
|
||||
// 确保资源正确释放
|
||||
if (excelWriter != null) {
|
||||
try {
|
||||
excelWriter.finish();
|
||||
} catch (Exception e) {
|
||||
// 记录日志但不中断主流程
|
||||
e.printStackTrace();
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* 单表多数据模板导出 模板格式为 {.属性}
|
||||
*
|
||||
@ -436,4 +492,7 @@ public class ExcelUtil {
|
||||
return IdUtil.fastSimpleUUID() + "_" + filename + ".xlsx";
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user