packageorg.alanlau.common.util;importorg.apache.commons.fileupload.disk.DiskFileItem;importorg.apache.commons.fileupload.disk.DiskFileItemFactory;importorg.apache.commons.lang3.time.DateFormatUtils;import org.apache.poi.ss.usermodel.*;importorg.apache.poi.ss.util.CellRangeAddress;importorg.apache.poi.ss.util.RegionUtil;importorg.apache.poi.xssf.usermodel.XSSFClientAnchor;importorg.apache.poi.xssf.usermodel.XSSFWorkbook;importorg.apache.tomcat.util.http.fileupload.IOUtils;importorg.slf4j.Logger;importorg.slf4j.LoggerFactory;importorg.springframework.web.multipart.MultipartFile;importorg.springframework.web.multipart.commons.CommonsMultipartFile;importjavax.servlet.http.HttpServletResponse;importjava.io.IOException;importjava.io.InputStream;importjava.io.OutputStream;importjava.io.UnsupportedEncodingException;importjava.net.URLEncoder;importjava.time.LocalDateTime;importjava.time.format.DateTimeFormatter;importjava.util.Date;importjava.util.HashMap;importjava.util.List;importjava.util.Map;/*** 支持复合表头导出的Excel工具类
*
*@authorliukun
*@version1.0
* @date 2020/2/18 20:22*/
public classExcelUtils {privateExcelUtils() {throw new UnsupportedOperationException("initialization is prohibited...");
}private static Logger logger = LoggerFactory.getLogger(ExcelUtils.class);/*** 图片*/
public static classImage {private byte[] imageData;public Image(byte[] imageData) {this.imageData =imageData;
}public byte[] getImageData() {returnimageData;
}
}/*** 导出(目前仅支持小于两行表头的合并操作)
*@paramrealName 导出文件名
*@paramdata 导出数据
*@paramfields 导出字段,比如 date|时间,firstHeader|表头1,secondHeader|表头2,sub001|编号-0001|子标题1,sub002|编号-0001|子标题2,sub003|编号-0001|子标题3,sub004|编号-0001|子标题4,remark|备注*/
public static void export(HttpServletResponse response, String realName, List>data, String fields) {
String fileName= realName + LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyyyMMdd_HHmmss")) + ".xlsx";
writeFileToResponse(construct(fields, data, fileName), response);
}/*** 导出并转换时间格式(目前仅支持小于两行表头的合并操作)
*@paramrealName 导出文件名
*@paramdata 导出数据
*@paramfields 导出字段,比如 date|时间,firstHeader|表头1,secondHeader|表头2,sub001|编号-0001|子标题1,sub002|编号-0001|子标题2,sub003|编号-0001