EasyExcelUtil.java 5.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121
  1. package com.huaxu.common;
  2. import java.io.File;
  3. import java.io.IOException;
  4. import java.io.InputStream;
  5. import java.net.URL;
  6. import java.util.ArrayList;
  7. import java.util.Date;
  8. import java.util.HashSet;
  9. import java.util.List;
  10. import java.util.Set;
  11. import com.alibaba.excel.metadata.Font;
  12. import com.alibaba.excel.metadata.Sheet;
  13. import com.alibaba.excel.metadata.TableStyle;
  14. import com.alibaba.excel.support.ExcelTypeEnum;
  15. import org.apache.commons.lang.time.DateFormatUtils;
  16. import org.apache.poi.ss.formula.functions.T;
  17. import org.apache.poi.ss.usermodel.FillPatternType;
  18. import org.apache.poi.ss.usermodel.HorizontalAlignment;
  19. import org.apache.poi.ss.usermodel.IndexedColors;
  20. import org.apache.poi.ss.usermodel.VerticalAlignment;
  21. import org.apache.poi.xssf.streaming.SXSSFSheet;
  22. import com.alibaba.excel.EasyExcel;
  23. import com.alibaba.excel.ExcelWriter;
  24. import com.alibaba.excel.annotation.ExcelProperty;
  25. import com.alibaba.excel.annotation.format.DateTimeFormat;
  26. import com.alibaba.excel.annotation.format.NumberFormat;
  27. import com.alibaba.excel.annotation.write.style.ColumnWidth;
  28. import com.alibaba.excel.annotation.write.style.ContentRowHeight;
  29. import com.alibaba.excel.annotation.write.style.HeadRowHeight;
  30. import com.alibaba.excel.util.FileUtils;
  31. import com.alibaba.excel.write.merge.LoopMergeStrategy;
  32. import com.alibaba.excel.write.metadata.WriteSheet;
  33. import com.alibaba.excel.write.metadata.WriteTable;
  34. import com.alibaba.excel.write.metadata.style.WriteCellStyle;
  35. import com.alibaba.excel.write.metadata.style.WriteFont;
  36. import com.alibaba.excel.write.style.HorizontalCellStyleStrategy;
  37. import com.alibaba.excel.write.style.column.LongestMatchColumnWidthStyleStrategy;
  38. /**
  39. * @ClassName EasyExcelUtil
  40. * @Description: Excel导出通用工具类
  41. * @Author :WYY
  42. * @Date 2020/10/27
  43. * @Version V1.0
  44. **/
  45. public class EasyExcelUtil {
  46. /**
  47. * @MethodName:Excel导出
  48. * @Description: TODO
  49. * @Param: path 导出基础路径 t实体名 excelName 文件名 data数据
  50. * @Return:
  51. * @Author: WYY
  52. * @Date: 2020/10/28
  53. **/
  54. public static String excelWrite(String path,Class t, String excelName,List data) {
  55. String filePath = "";
  56. String fileName = DateFormatUtils.format(new Date(), "yyyy/MM/dd") + File.separator;
  57. fileName = fileName + excelName + System.currentTimeMillis() + ".xlsx";
  58. try {
  59. getAbsoluteFile(path, fileName);
  60. EasyExcel.write(path + fileName, t)
  61. .excelType(ExcelTypeEnum.XLSX)
  62. .registerWriteHandler(new CustemhandlerUtils())
  63. .registerWriteHandler(EasyExcelUtil.getStyleStrategy())
  64. .sheet("Export")
  65. .doWrite(data);
  66. filePath = getPathFileName(path, fileName);
  67. } catch (IOException e) {
  68. e.printStackTrace();
  69. } finally {
  70. }
  71. return filePath;
  72. }
  73. private static final String getPathFileName(String uploadDir, String fileName) throws IOException {
  74. String pathFileName = uploadDir + "/" + fileName;
  75. return ToolUtil.path(pathFileName);
  76. }
  77. private static final File getAbsoluteFile(String uploadDir, String fileName) throws IOException {
  78. File desc = new File(uploadDir + File.separator + fileName);
  79. if (!desc.getParentFile().exists()) {
  80. desc.getParentFile().mkdirs();
  81. }
  82. return desc;
  83. }
  84. public static HorizontalCellStyleStrategy getStyleStrategy(){
  85. // 头的策略
  86. WriteCellStyle headWriteCellStyle = new WriteCellStyle();
  87. // 背景设置为灰色
  88. headWriteCellStyle.setFillForegroundColor(IndexedColors.GREY_25_PERCENT.getIndex());
  89. WriteFont headWriteFont = new WriteFont();
  90. headWriteFont.setFontHeightInPoints((short)12);
  91. // 字体样式
  92. headWriteFont.setFontName("Frozen");
  93. headWriteCellStyle.setWriteFont(headWriteFont);
  94. //自动换行
  95. headWriteCellStyle.setWrapped(false);
  96. // 水平对齐方式
  97. headWriteCellStyle.setHorizontalAlignment(HorizontalAlignment.CENTER);
  98. // 垂直对齐方式
  99. headWriteCellStyle.setVerticalAlignment(VerticalAlignment.CENTER);
  100. // 内容的策略
  101. WriteCellStyle contentWriteCellStyle = new WriteCellStyle();
  102. // 这里需要指定 FillPatternType 为FillPatternType.SOLID_FOREGROUND 不然无法显示背景颜色.头默认了 FillPatternType所以可以不指定
  103. // contentWriteCellStyle.setFillPatternType(FillPatternType.SQUARES);
  104. // 背景白色
  105. contentWriteCellStyle.setFillForegroundColor(IndexedColors.WHITE.getIndex());
  106. WriteFont contentWriteFont = new WriteFont();
  107. // 字体大小
  108. contentWriteFont.setFontHeightInPoints((short)12);
  109. // 字体样式
  110. contentWriteFont.setFontName("Calibri");
  111. contentWriteCellStyle.setWriteFont(contentWriteFont);
  112. // 这个策略是 头是头的样式 内容是内容的样式 其他的策略可以自己实现
  113. return new HorizontalCellStyleStrategy(headWriteCellStyle, contentWriteCellStyle);
  114. }
  115. }