public class ExcelUtils {
public static <T> void exportExcel(Map<String, List<T>> departmentData, String sheetName, Class<T> clazz, HttpServletResponse response) {
exportExcel(departmentData, sheetName, clazz, false, response);
}
public static <T> void exportExcel(Map<String, List<T>> departmentData,String sheetName, Class<T> clazz, boolean merge, HttpServletResponse response) {
try {
resetResponse(sheetName, response);
ServletOutputStream os = response.getOutputStream();
ExcelWriterBuilder writerBuilder = EasyExcel.write(os, clazz).autoCloseStream(false)
.registerWriteHandler(new LongestMatchColumnWidthStyleStrategy())
.registerConverter(new ExcelBigNumberConvert());
ExcelWriter excelWriter = writerBuilder.build();
for (Map.Entry<String, List<T>> entry : departmentData.entrySet()) {
String departmentName = entry.getKey();
List<T> departmentList = entry.getValue();
ExcelWriterSheetBuilder sheetBuilder = writerBuilder.sheet(departmentName);
if (merge) {
sheetBuilder.registerWriteHandler(new CellMergeStrategy(departmentList, true));
}
WriteSheet sheet = sheetBuilder.head(clazz).build();
excelWriter.write( departmentList, sheet);
}
excelWriter.finish();
} catch (IOException e) {
throw new RuntimeException("导出Excel异常", e);
}
}
private static void resetResponse(String sheetName, HttpServletResponse response) throws UnsupportedEncodingException {
String filename = encodingFilename(sheetName);
FileUtils.setAttachmentResponseHeader(response, filename);
response.setContentType("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet;charset=UTF-8");
}
public static String encodingFilename(String filename) {
SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMdd");
return sdf.format(new Date()) + filename + ".xlsx";
}
private ExcelUtils() {
}
}