ExcelUtils2.java 9.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252
  1. package com.ydtech.utils.excel;
  2. import cn.afterturn.easypoi.excel.ExcelExportUtil;
  3. import cn.afterturn.easypoi.excel.ExcelImportUtil;
  4. import cn.afterturn.easypoi.excel.entity.ExportParams;
  5. import cn.afterturn.easypoi.excel.entity.ImportParams;
  6. import cn.afterturn.easypoi.excel.entity.enmus.ExcelType;
  7. import com.ydtech.exception.SystemException;
  8. import com.ydtech.modules.inv.model.InvInvoiceInfo;
  9. import org.apache.commons.lang3.StringUtils;
  10. import org.apache.poi.ss.usermodel.Workbook;
  11. import org.springframework.web.multipart.MultipartFile;
  12. import javax.servlet.ServletOutputStream;
  13. import javax.servlet.http.HttpServletRequest;
  14. import javax.servlet.http.HttpServletResponse;
  15. import java.io.File;
  16. import java.io.IOException;
  17. import java.io.InputStream;
  18. import java.net.URLEncoder;
  19. import java.util.List;
  20. import java.util.Map;
  21. import java.util.NoSuchElementException;
  22. /**
  23. * @Author: shixk
  24. * @create: 2021/9/10 10:32
  25. * description: Excel导入导出工具类
  26. */
  27. public class ExcelUtils2 {
  28. /**
  29. * excel 导出
  30. *
  31. * @param list 数据列表
  32. * @param fileName 导出时的excel名称
  33. * @param response
  34. */
  35. public static void exportExcel(List<Map<String, Object>> list, String fileName, HttpServletRequest request, HttpServletResponse response) throws IOException {
  36. defaultExport(list, fileName, request, response);
  37. }
  38. /**
  39. * 默认的 excel 导出
  40. *
  41. * @param list 数据列表
  42. * @param fileName 导出时的excel名称
  43. * @param response
  44. */
  45. private static void defaultExport(List<Map<String, Object>> list, String fileName, HttpServletRequest request, HttpServletResponse response) throws IOException {
  46. //把数据添加到excel表格中
  47. Workbook workbook = ExcelExportUtil.exportExcel(list, ExcelType.HSSF);
  48. downLoadExcel(fileName, request, response, workbook);
  49. }
  50. /**
  51. * excel 导出
  52. *
  53. * @param list 数据列表
  54. * @param pojoClass pojo类型
  55. * @param fileName 导出时的excel名称
  56. * @param response
  57. * @param exportParams 导出参数(标题、sheet名称、是否创建表头,表格类型)
  58. */
  59. private static void defaultExport(List<?> list, Class<?> pojoClass, String fileName, HttpServletRequest request, HttpServletResponse response, ExportParams exportParams) throws IOException {
  60. //把数据添加到excel表格中
  61. Workbook workbook = ExcelExportUtil.exportExcel(exportParams, pojoClass, list);
  62. downLoadExcel(fileName, request, response, workbook);
  63. }
  64. /**
  65. * excel 导出
  66. *
  67. * @param list 数据列表
  68. * @param pojoClass pojo类型
  69. * @param fileName 导出时的excel名称
  70. * @param exportParams 导出参数(标题、sheet名称、是否创建表头,表格类型)
  71. * @param response
  72. */
  73. public static void exportExcel(List<?> list, Class<?> pojoClass, String fileName, ExportParams exportParams, HttpServletRequest request, HttpServletResponse response) throws IOException {
  74. defaultExport(list, pojoClass, fileName, request, response, exportParams);
  75. }
  76. /**
  77. * excel 导出
  78. *
  79. * @param list 数据列表
  80. * @param title 表格内数据标题
  81. * @param sheetName sheet名称
  82. * @param pojoClass pojo类型
  83. * @param fileName 导出时的excel名称
  84. * @param response
  85. */
  86. public static void exportExcel(List<?> list, String title, String sheetName, Class<?> pojoClass, String fileName, HttpServletRequest request, HttpServletResponse response) throws IOException {
  87. defaultExport(list, pojoClass, fileName, request, response, new ExportParams(title, sheetName, ExcelType.XSSF));
  88. }
  89. /**
  90. * excel 导出
  91. *
  92. * @param list 数据列表
  93. * @param title 表格内数据标题
  94. * @param sheetName sheet名称
  95. * @param pojoClass pojo类型
  96. * @param fileName 导出时的excel名称
  97. * @param isCreateHeader 是否创建表头
  98. * @param response
  99. */
  100. public static void exportExcel(List<?> list, String title, String sheetName, Class<?> pojoClass, String fileName, boolean isCreateHeader, HttpServletRequest request, HttpServletResponse response) throws IOException {
  101. ExportParams exportParams = new ExportParams(title, sheetName, ExcelType.XSSF);
  102. exportParams.setCreateHeadRows(isCreateHeader);
  103. defaultExport(list, pojoClass, fileName, request, response, exportParams);
  104. }
  105. /**
  106. * excel下载
  107. *
  108. * @param fileName 下载时的文件名称
  109. * @param response
  110. * @param workbook excel数据
  111. */
  112. private static void downLoadExcel(String fileName, HttpServletRequest request, HttpServletResponse response, Workbook workbook) throws IOException {
  113. try {
  114. response.reset();
  115. response.addHeader("content-type", "application/vnd.ms-excel;charset=UTF-8");
  116. response.setHeader("Content-Disposition", "attachment;filename=" + fileName + ".xlsx");
  117. // //2023-05-22 修改文件名中文问题
  118. // response.setHeader("Content-Disposition", "attachment;filename*= UTF-8''"+ URLEncoder.encode(fileName,"UTF-8")+ ".xlsx");
  119. response.addHeader("Cache-Control", "no-cache");
  120. response.setHeader("Set-Cookie", "fileDownload=true; path=/");
  121. response.setHeader("Access-Control-Allow-Origin", "*");
  122. ServletOutputStream outputStream = response.getOutputStream();
  123. workbook.write(outputStream);
  124. if (outputStream != null) {
  125. outputStream.close();
  126. }
  127. if (workbook != null) workbook.close();
  128. } catch (Exception e) {
  129. throw new IOException(e.getMessage());
  130. }
  131. }
  132. /**
  133. * excel 导入
  134. *
  135. * @param file excel文件
  136. * @param pojoClass pojo类型
  137. * @param <T>
  138. * @return
  139. */
  140. public static <T> List<T> importExcel(MultipartFile file, Class<T> pojoClass) throws IOException {
  141. return importExcel(file, 0, 1, pojoClass);
  142. }
  143. /**
  144. * excel 导入
  145. *
  146. * @param filePath excel文件路径
  147. * @param titleRows 表格内数据标题行
  148. * @param headerRows 表头行
  149. * @param pojoClass pojo类型
  150. * @param <T>
  151. * @return
  152. */
  153. public static <T> List<T> importExcel(String filePath, Integer titleRows, Integer headerRows, Class<T> pojoClass) throws IOException {
  154. if (StringUtils.isBlank(filePath)) {
  155. return null;
  156. }
  157. ImportParams params = new ImportParams();
  158. params.setTitleRows(titleRows);
  159. params.setHeadRows(headerRows);
  160. // params.setNeedSave(true); //不保存
  161. params.setSaveUrl("/home/server/upload/excel/");
  162. try {
  163. return ExcelImportUtil.importExcel(new File(filePath), pojoClass, params);
  164. } catch (NoSuchElementException e) {
  165. throw new IOException("模板不能为空");
  166. } catch (Exception e) {
  167. throw new IOException(e.getMessage());
  168. }
  169. }
  170. /**
  171. * excel 导入
  172. *
  173. * @param file 上传的文件
  174. * @param titleRows 表格内数据标题行
  175. * @param headerRows 表头行
  176. * @param pojoClass pojo类型
  177. * @param <T>
  178. * @return
  179. */
  180. public static <T> List<T> importExcel(MultipartFile file, Integer titleRows, Integer headerRows, Class<T> pojoClass) throws IOException {
  181. if (file == null) {
  182. return null;
  183. }
  184. try {
  185. return importExcel(file.getInputStream(), titleRows, headerRows, pojoClass);
  186. } catch (Exception e) {
  187. throw new IOException(e.getMessage());
  188. }
  189. }
  190. /**
  191. * excel 导入
  192. *
  193. * @param inputStream 文件输入流
  194. * @param titleRows 表格内数据标题行
  195. * @param headerRows 表头行
  196. * @param pojoClass pojo类型
  197. * @param <T>
  198. * @return
  199. */
  200. public static <T> List<T> importExcel(InputStream inputStream, Integer titleRows, Integer headerRows, Class<T> pojoClass) throws Exception {
  201. if (inputStream == null) {
  202. return null;
  203. }
  204. ImportParams params = new ImportParams();
  205. params.setTitleRows(titleRows);
  206. params.setHeadRows(headerRows);
  207. // params.setSaveUrl("/home/server/upload/excel/");
  208. // params.setNeedSave(true); //不保存
  209. // params.setNeedVerify(true);
  210. params.setStartSheetIndex(0);
  211. try {
  212. return ExcelImportUtil.importExcel(inputStream, pojoClass, params);
  213. } catch (NoSuchElementException e) {
  214. throw new IOException("excel文件不能为空");
  215. } catch (Exception e) {
  216. throw new IOException(e.getMessage());
  217. }
  218. }
  219. public static void main(String[] args) {
  220. File file = new File("E:\\123\\bbb.xlsx");
  221. ImportParams importParams = new ImportParams();
  222. importParams.setTitleRows(0);
  223. importParams.setHeadRows(1);
  224. importParams.setSheetNum(1);
  225. List<InvInvoiceInfo> objList = ExcelImportUtil.importExcel(file, InvInvoiceInfo.class, importParams);
  226. for (InvInvoiceInfo vo : objList) {
  227. // System.out.println(vo.getInvoiceDate()+ "---" + vo.getIncomeMoney());
  228. }
  229. }
  230. }