ToolExcel.java 2.6 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889
  1. package thyyxxk.webserver.entity.excel;
  2. import cn.hutool.core.io.IoUtil;
  3. import cn.hutool.poi.excel.BigExcelWriter;
  4. import cn.hutool.poi.excel.StyleSet;
  5. import lombok.Data;
  6. import org.apache.poi.ss.usermodel.DataFormat;
  7. import org.apache.poi.ss.usermodel.HorizontalAlignment;
  8. import org.apache.poi.ss.usermodel.VerticalAlignment;
  9. import javax.servlet.ServletOutputStream;
  10. import javax.servlet.http.HttpServletResponse;
  11. import java.io.IOException;
  12. import java.util.ArrayList;
  13. import java.util.List;
  14. public class ToolExcel {
  15. private final List<Integer> widthIndex = new ArrayList<>();
  16. private final BigExcelWriter writer = cn.hutool.poi.excel.ExcelUtil.getBigWriter();
  17. private String format = "yyyy-mm-dd hh:mm:ss";
  18. public ToolExcel() {
  19. }
  20. public ToolExcel addTitle(String name, String alias, int width) {
  21. writer.addHeaderAlias(name, alias);
  22. widthIndex.add(width);
  23. return this;
  24. }
  25. public ToolExcel addTitle(String name, String alias) {
  26. writer.addHeaderAlias(name, alias);
  27. widthIndex.add(null);
  28. return this;
  29. }
  30. public ToolExcel setDataFormat(String format) {
  31. this.format = format;
  32. return this;
  33. }
  34. private void setCellDateFormat() {
  35. DataFormat dataFormat = writer.getWorkbook().createDataFormat();
  36. short format = dataFormat.getFormat(this.format);
  37. StyleSet styleSet = writer.getStyleSet();
  38. styleSet.getCellStyleForDate()
  39. .setDataFormat(format);
  40. }
  41. private void setCellWeight() {
  42. for (int i = 0; i < widthIndex.size(); i++) {
  43. Integer width = widthIndex.get(i);
  44. if (width != null) {
  45. writer.setColumnWidth(i, width);
  46. }
  47. }
  48. }
  49. public void exportExcel(Iterable<?> data, HttpServletResponse response) {
  50. setCellDateFormat();
  51. setCellWeight();
  52. writer.setOnlyAlias(true);
  53. writer.write(data, true);
  54. writer.getStyleSet().setAlign(HorizontalAlignment.CENTER, VerticalAlignment.CENTER);
  55. ServletOutputStream out;
  56. try {
  57. response.setContentType("application/vnd.ms-excel;charset=utf-8");
  58. response.setHeader("Content-Disposition", "attachment;filename=test.xls");
  59. out = response.getOutputStream();
  60. // 将Excel Workbook刷出到输出流
  61. writer.flush(out, true);
  62. } catch (IOException e) {
  63. e.printStackTrace();
  64. throw new RuntimeException("文件写入失败!");
  65. } finally {
  66. //关闭流
  67. writer.close();
  68. }
  69. IoUtil.close(out);
  70. }
  71. }