package com.ydtech.utils.excel; 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 com.ydtech.exception.SystemException; import com.ydtech.modules.inv.model.InvInvoiceInfo; import org.apache.commons.lang3.StringUtils; import org.apache.poi.ss.usermodel.Workbook; import org.springframework.web.multipart.MultipartFile; import javax.servlet.ServletOutputStream; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import java.io.File; import java.io.IOException; import java.io.InputStream; import java.net.URLEncoder; import java.util.List; import java.util.Map; import java.util.NoSuchElementException; /** * @Author: shixk * @create: 2021/9/10 10:32 * description: Excel导入导出工具类 */ public class ExcelUtils2 { /** * excel 导出 * * @param list 数据列表 * @param fileName 导出时的excel名称 * @param response */ public static void exportExcel(List> list, String fileName, HttpServletRequest request, HttpServletResponse response) throws IOException { defaultExport(list, fileName, request, response); } /** * 默认的 excel 导出 * * @param list 数据列表 * @param fileName 导出时的excel名称 * @param response */ private static void defaultExport(List> list, String fileName, HttpServletRequest request, HttpServletResponse response) throws IOException { //把数据添加到excel表格中 Workbook workbook = ExcelExportUtil.exportExcel(list, ExcelType.HSSF); downLoadExcel(fileName, request, response, workbook); } /** * excel 导出 * * @param list 数据列表 * @param pojoClass pojo类型 * @param fileName 导出时的excel名称 * @param response * @param exportParams 导出参数(标题、sheet名称、是否创建表头,表格类型) */ private static void defaultExport(List list, Class pojoClass, String fileName, HttpServletRequest request, HttpServletResponse response, ExportParams exportParams) throws IOException { //把数据添加到excel表格中 Workbook workbook = ExcelExportUtil.exportExcel(exportParams, pojoClass, list); downLoadExcel(fileName, request, response, workbook); } /** * excel 导出 * * @param list 数据列表 * @param pojoClass pojo类型 * @param fileName 导出时的excel名称 * @param exportParams 导出参数(标题、sheet名称、是否创建表头,表格类型) * @param response */ public static void exportExcel(List list, Class pojoClass, String fileName, ExportParams exportParams, HttpServletRequest request, HttpServletResponse response) throws IOException { defaultExport(list, pojoClass, fileName, request, response, exportParams); } /** * excel 导出 * * @param list 数据列表 * @param title 表格内数据标题 * @param sheetName sheet名称 * @param pojoClass pojo类型 * @param fileName 导出时的excel名称 * @param response */ public static void exportExcel(List list, String title, String sheetName, Class pojoClass, String fileName, HttpServletRequest request, HttpServletResponse response) throws IOException { defaultExport(list, pojoClass, fileName, request, response, new ExportParams(title, sheetName, ExcelType.XSSF)); } /** * excel 导出 * * @param list 数据列表 * @param title 表格内数据标题 * @param sheetName sheet名称 * @param pojoClass pojo类型 * @param fileName 导出时的excel名称 * @param isCreateHeader 是否创建表头 * @param response */ public static void exportExcel(List list, String title, String sheetName, Class pojoClass, String fileName, boolean isCreateHeader, HttpServletRequest request, HttpServletResponse response) throws IOException { ExportParams exportParams = new ExportParams(title, sheetName, ExcelType.XSSF); exportParams.setCreateHeadRows(isCreateHeader); defaultExport(list, pojoClass, fileName, request, response, exportParams); } /** * excel下载 * * @param fileName 下载时的文件名称 * @param response * @param workbook excel数据 */ private static void downLoadExcel(String fileName, HttpServletRequest request, HttpServletResponse response, Workbook workbook) throws IOException { try { response.reset(); response.addHeader("content-type", "application/vnd.ms-excel;charset=UTF-8"); response.setHeader("Content-Disposition", "attachment;filename=" + fileName + ".xlsx"); // //2023-05-22 修改文件名中文问题 // response.setHeader("Content-Disposition", "attachment;filename*= UTF-8''"+ URLEncoder.encode(fileName,"UTF-8")+ ".xlsx"); response.addHeader("Cache-Control", "no-cache"); response.setHeader("Set-Cookie", "fileDownload=true; path=/"); response.setHeader("Access-Control-Allow-Origin", "*"); ServletOutputStream outputStream = response.getOutputStream(); workbook.write(outputStream); if (outputStream != null) { outputStream.close(); } if (workbook != null) workbook.close(); } catch (Exception e) { throw new IOException(e.getMessage()); } } /** * excel 导入 * * @param file excel文件 * @param pojoClass pojo类型 * @param * @return */ public static List importExcel(MultipartFile file, Class pojoClass) throws IOException { return importExcel(file, 0, 1, pojoClass); } /** * excel 导入 * * @param filePath excel文件路径 * @param titleRows 表格内数据标题行 * @param headerRows 表头行 * @param pojoClass pojo类型 * @param * @return */ public static List importExcel(String filePath, Integer titleRows, Integer headerRows, Class pojoClass) throws IOException { if (StringUtils.isBlank(filePath)) { return null; } ImportParams params = new ImportParams(); params.setTitleRows(titleRows); params.setHeadRows(headerRows); // params.setNeedSave(true); //不保存 params.setSaveUrl("/home/server/upload/excel/"); try { return ExcelImportUtil.importExcel(new File(filePath), pojoClass, params); } catch (NoSuchElementException e) { throw new IOException("模板不能为空"); } catch (Exception e) { throw new IOException(e.getMessage()); } } /** * excel 导入 * * @param file 上传的文件 * @param titleRows 表格内数据标题行 * @param headerRows 表头行 * @param pojoClass pojo类型 * @param * @return */ public static List importExcel(MultipartFile file, Integer titleRows, Integer headerRows, Class pojoClass) throws IOException { if (file == null) { return null; } try { return importExcel(file.getInputStream(), titleRows, headerRows, pojoClass); } catch (Exception e) { throw new IOException(e.getMessage()); } } /** * excel 导入 * * @param inputStream 文件输入流 * @param titleRows 表格内数据标题行 * @param headerRows 表头行 * @param pojoClass pojo类型 * @param * @return */ public static List importExcel(InputStream inputStream, Integer titleRows, Integer headerRows, Class pojoClass) throws Exception { if (inputStream == null) { return null; } ImportParams params = new ImportParams(); params.setTitleRows(titleRows); params.setHeadRows(headerRows); // params.setSaveUrl("/home/server/upload/excel/"); // params.setNeedSave(true); //不保存 // params.setNeedVerify(true); params.setStartSheetIndex(0); try { return ExcelImportUtil.importExcel(inputStream, pojoClass, params); } catch (NoSuchElementException e) { throw new IOException("excel文件不能为空"); } catch (Exception e) { throw new IOException(e.getMessage()); } } public static void main(String[] args) { File file = new File("E:\\123\\bbb.xlsx"); ImportParams importParams = new ImportParams(); importParams.setTitleRows(0); importParams.setHeadRows(1); importParams.setSheetNum(1); List objList = ExcelImportUtil.importExcel(file, InvInvoiceInfo.class, importParams); for (InvInvoiceInfo vo : objList) { // System.out.println(vo.getInvoiceDate()+ "---" + vo.getIncomeMoney()); } } }