当前位置:   article > 正文

Spring Boot集成easypoi快速入门Demo

Spring Boot集成easypoi快速入门Demo

1.什么是easypoi?

Easypoi功能如同名字easy,主打的功能就是容易,让一个没见接触过poi的人员就可以方便的写出Excel导出,Excel模板导出,Excel导入,Word模板导出,通过简单的注解和模板语言(熟悉的表达式语法),完成以前复杂的写法。

2.代码工程

实验目的:实现excel导入和导出

pom.xml

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <project xmlns="http://maven.apache.org/POM/4.0.0"
  3. xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  4. xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
  5. <parent>
  6. <artifactId>springboot-demo</artifactId>
  7. <groupId>com.et</groupId>
  8. <version>1.0-SNAPSHOT</version>
  9. </parent>
  10. <modelVersion>4.0.0</modelVersion>
  11. <artifactId>eaypoi</artifactId>
  12. <properties>
  13. <maven.compiler.source>8</maven.compiler.source>
  14. <maven.compiler.target>8</maven.compiler.target>
  15. </properties>
  16. <dependencies>
  17. <dependency>
  18. <groupId>org.springframework.boot</groupId>
  19. <artifactId>spring-boot-starter-web</artifactId>
  20. </dependency>
  21. <dependency>
  22. <groupId>org.springframework.boot</groupId>
  23. <artifactId>spring-boot-autoconfigure</artifactId>
  24. </dependency>
  25. <dependency>
  26. <groupId>org.springframework.boot</groupId>
  27. <artifactId>spring-boot-starter-test</artifactId>
  28. <scope>test</scope>
  29. </dependency>
  30. <dependency>
  31. <groupId>cn.afterturn</groupId>
  32. <artifactId>easypoi-spring-boot-starter</artifactId>
  33. <version>4.1.2</version>
  34. </dependency>
  35. <dependency>
  36. <groupId>org.projectlombok</groupId>
  37. <artifactId>lombok</artifactId>
  38. </dependency>
  39. <dependency>
  40. <groupId>com.alibaba</groupId>
  41. <artifactId>fastjson</artifactId>
  42. <version>2.0.40</version>
  43. </dependency>
  44. </dependencies>
  45. </project>

HelloWorldController.java

  1. package com.et.easypoi.controller;
  2. import com.alibaba.fastjson.JSONObject;
  3. import com.et.easypoi.Util.FileUtil;
  4. import com.et.easypoi.model.GoodType;
  5. import com.et.easypoi.model.Goods;
  6. import org.springframework.stereotype.Controller;
  7. import org.springframework.web.bind.annotation.RequestMapping;
  8. import org.springframework.web.bind.annotation.ResponseBody;
  9. import org.springframework.web.bind.annotation.RestController;
  10. import javax.servlet.http.HttpServletResponse;
  11. import java.util.*;
  12. @RestController
  13. public class HelloWorldController {
  14. @RequestMapping("/hello")
  15. public Map<String, Object> showHelloWorld(){
  16. Map<String, Object> map = new HashMap<>();
  17. map.put("msg", "HelloWorld");
  18. return map;
  19. }
  20. @RequestMapping("/exportExcel")
  21. public void export(HttpServletResponse response) throws Exception {
  22. //mock datas
  23. Goods goods1 = new Goods();
  24. List<GoodType> goodTypeList1 = new ArrayList<>();
  25. GoodType goodType1 = new GoodType();
  26. goodType1.setTypeId("apple-1");
  27. goodType1.setTypeName("apple-red");
  28. goodTypeList1.add(goodType1);
  29. GoodType goodType2 = new GoodType();
  30. goodType2.setTypeId("apple-2");
  31. goodType2.setTypeName("apple-white");
  32. goodTypeList1.add(goodType2);
  33. goods1.setNo(110);
  34. goods1.setName("apple");
  35. goods1.setShelfLife(new Date());
  36. goods1.setGoodTypes(goodTypeList1);
  37. Goods goods2 = new Goods();
  38. List<GoodType> goodTypeList2 = new ArrayList<>();
  39. GoodType goodType21 = new GoodType();
  40. goodType21.setTypeId("wine-1");
  41. goodType21.setTypeName("wine-red");
  42. goodTypeList2.add(goodType21);
  43. GoodType goodType22 = new GoodType();
  44. goodType22.setTypeId("wine-2");
  45. goodType22.setTypeName("wine-white");
  46. goodTypeList2.add(goodType22);
  47. goods2.setNo(111);
  48. goods2.setName("wine");
  49. goods2.setShelfLife(new Date());
  50. goods2.setGoodTypes(goodTypeList2);
  51. List<Goods> goodsList = new ArrayList<Goods>();
  52. goodsList.add(goods1);
  53. goodsList.add(goods2);
  54. for (Goods goods : goodsList) {
  55. System.out.println(goods);
  56. }
  57. //export
  58. FileUtil.exportExcel(goodsList, Goods.class,"product.xls",response);
  59. }
  60. @RequestMapping("/importExcel")
  61. public void importExcel() throws Exception {
  62. //loal file
  63. String filePath = "C:\\Users\\Dell\\Downloads\\product.xls";
  64. //anaysis excel
  65. List<Goods> goodsList = FileUtil.importExcel(filePath,0,1,Goods.class);
  66. //also use MultipartFile,invoke FileUtil.importExcel(MultipartFile file, Integer titleRows, Integer headerRows, Class<T> pojoClass)
  67. System.out.println("load data count【"+goodsList.size()+"】row");
  68. //TODO save datas
  69. for (Goods goods:goodsList) {
  70. JSONObject.toJSONString(goods);
  71. }
  72. }
  73. }

model

  1. package com.et.easypoi.model;
  2. import cn.afterturn.easypoi.excel.annotation.Excel;
  3. import cn.afterturn.easypoi.excel.annotation.ExcelCollection;
  4. import lombok.Data;
  5. import java.io.Serializable;
  6. import java.util.Date;
  7. import java.util.List;
  8. @Data
  9. public class Goods implements Serializable {
  10. @Excel(name = "NO",needMerge = true ,width = 20)
  11. private Integer no;
  12. @Excel(name = "name",needMerge = true ,width = 20)
  13. private String name;
  14. @Excel(name = "shelfLife",width = 20,needMerge = true ,exportFormat = "yyyy-MM-dd")
  15. private Date shelfLife;
  16. @ExcelCollection(name = "goodTypes")
  17. private List<GoodType> goodTypes;
  18. }
  1. package com.et.easypoi.model;
  2. import cn.afterturn.easypoi.excel.annotation.Excel;
  3. import lombok.Data;
  4. /**
  5. * @author liuhaihua
  6. * @version 1.0
  7. * @ClassName GoodType
  8. * @Description todo
  9. * @date 2024年04月15日 11:02
  10. */
  11. @Data
  12. public class GoodType {
  13. @Excel(name = "typeId", width = 20,height = 8)
  14. private String typeId;
  15. @Excel(name = "typeName", width = 20,height = 8)
  16. private String typeName;
  17. }

FileUtil

通用工具类,导出和导出封装

  1. package com.et.easypoi.Util;
  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.et.easypoi.service.ExcelExportStyler;
  8. import org.apache.commons.lang3.StringUtils;
  9. import org.apache.poi.ss.usermodel.CellStyle;
  10. import org.apache.poi.ss.usermodel.FillPatternType;
  11. import org.apache.poi.ss.usermodel.IndexedColors;
  12. import org.apache.poi.ss.usermodel.Workbook;
  13. import org.springframework.web.multipart.MultipartFile;
  14. import javax.servlet.ServletOutputStream;
  15. import javax.servlet.http.HttpServletResponse;
  16. import java.io.File;
  17. import java.io.IOException;
  18. import java.io.OutputStream;
  19. import java.net.URLEncoder;
  20. import java.util.List;
  21. import java.util.Map;
  22. import java.util.NoSuchElementException;
  23. public class FileUtil {
  24. public static void exportExcel(List<?> list, String title, String sheetName, Class<?> pojoClass, String fileName, boolean isCreateHeader, HttpServletResponse response) throws Exception {
  25. ExportParams exportParams = new ExportParams(title, sheetName);
  26. exportParams.setCreateHeadRows(isCreateHeader);
  27. defaultExport(list, pojoClass, fileName, response, exportParams);
  28. }
  29. public static void exportExcel(List<?> list, Class<?> pojoClass, String fileName, HttpServletResponse response) throws Exception {
  30. ExportParams exportParams = new ExportParams();
  31. exportParams.setStyle(ExcelExportStyler.class); // set style
  32. defaultExport(list, pojoClass, fileName, response, exportParams);
  33. }
  34. public static void exportExcel(List<?> list, String title, String sheetName, Class<?> pojoClass,String fileName, HttpServletResponse response) throws Exception {
  35. defaultExport(list, pojoClass, fileName, response, new ExportParams(title, sheetName));
  36. }
  37. public static void exportExcel(List<Map<String, Object>> list, String fileName, HttpServletResponse response) throws Exception {
  38. defaultExport(list, fileName, response);
  39. }
  40. private static void defaultExport(List<?> list, Class<?> pojoClass, String fileName, HttpServletResponse response, ExportParams exportParams) throws Exception {
  41. Workbook workbook = ExcelExportUtil.exportExcel(exportParams,pojoClass,list);
  42. if (workbook != null);
  43. downLoadExcel(fileName, response, workbook);
  44. }
  45. private static void downLoadExcel(String fileName, HttpServletResponse response, Workbook workbook) throws Exception {
  46. OutputStream outputStream=null;
  47. try {
  48. response.setCharacterEncoding("UTF-8");
  49. response.setHeader("content-Type", "application/vnd.ms-excel");
  50. response.setHeader("Content-Disposition",
  51. "attachment;filename=" + URLEncoder.encode(fileName, "UTF-8"));
  52. outputStream = response.getOutputStream();
  53. workbook.write(outputStream);
  54. } catch (IOException e) {
  55. throw new Exception(e.getMessage());
  56. }finally {
  57. try {
  58. outputStream.close();
  59. } catch (IOException e) {
  60. e.printStackTrace();
  61. }
  62. }
  63. }
  64. private static void defaultExport(List<Map<String, Object>> list, String fileName, HttpServletResponse response) throws Exception {
  65. Workbook workbook = ExcelExportUtil.exportExcel(list, ExcelType.HSSF);
  66. if (workbook != null);
  67. downLoadExcel(fileName, response, workbook);
  68. }
  69. public static <T> List<T> importExcel(String filePath,Integer titleRows,Integer headerRows, Class<T> pojoClass) throws Exception {
  70. if (StringUtils.isBlank(filePath)){
  71. return null;
  72. }
  73. ImportParams params = new ImportParams();
  74. params.setTitleRows(titleRows);
  75. params.setHeadRows(headerRows);
  76. List<T> list = null;
  77. try {
  78. list = ExcelImportUtil.importExcel(new File(filePath), pojoClass, params);
  79. }catch (NoSuchElementException e){
  80. throw new Exception("template not null");
  81. } catch (Exception e) {
  82. e.printStackTrace();
  83. throw new Exception(e.getMessage());
  84. }
  85. return list;
  86. }
  87. public static <T> List<T> importExcel(MultipartFile file, Integer titleRows, Integer headerRows, Class<T> pojoClass) throws Exception {
  88. if (file == null){
  89. return null;
  90. }
  91. ImportParams params = new ImportParams();
  92. params.setTitleRows(titleRows);
  93. params.setHeadRows(headerRows);
  94. List<T> list = null;
  95. try {
  96. list = ExcelImportUtil.importExcel(file.getInputStream(), pojoClass, params);
  97. }catch (NoSuchElementException e){
  98. throw new Exception("excel file not null");
  99. } catch (Exception e) {
  100. throw new Exception(e.getMessage());
  101. }
  102. return list;
  103. }
  104. }

ExcelExportStyler

设置表头,单元格样式

  1. package com.et.easypoi.service;
  2. import cn.afterturn.easypoi.excel.entity.params.ExcelExportEntity;
  3. import cn.afterturn.easypoi.excel.entity.params.ExcelForEachParams;
  4. import cn.afterturn.easypoi.excel.export.styler.IExcelExportStyler;
  5. import org.apache.poi.ss.usermodel.*;
  6. public class ExcelExportStyler implements IExcelExportStyler {
  7. private static final short STRING_FORMAT = (short) BuiltinFormats.getBuiltinFormat("TEXT");
  8. private static final short FONT_SIZE_TEN = 10;
  9. private static final short FONT_SIZE_ELEVEN = 11;
  10. private static final short FONT_SIZE_TWELVE = 12;
  11. /**
  12. * header style
  13. */
  14. private CellStyle headerStyle;
  15. /**
  16. * title style
  17. */
  18. private CellStyle titleStyle;
  19. /**
  20. * cell style
  21. */
  22. private CellStyle styles;
  23. public ExcelExportStyler(Workbook workbook) {
  24. this.init(workbook);
  25. }
  26. /**
  27. * init
  28. *
  29. * @param workbook
  30. */
  31. private void init(Workbook workbook) {
  32. this.headerStyle = initHeaderStyle(workbook);
  33. this.titleStyle = initTitleStyle(workbook);
  34. }
  35. @Override
  36. public CellStyle getHeaderStyle(short color) {
  37. return headerStyle;
  38. }
  39. @Override
  40. public CellStyle getTitleStyle(short color) {
  41. return titleStyle;
  42. }
  43. @Override
  44. public CellStyle getStyles(boolean parity, ExcelExportEntity entity) {
  45. return styles;
  46. }
  47. @Override
  48. public CellStyle getStyles(Cell cell, int dataRow, ExcelExportEntity entity, Object obj, Object data) {
  49. return getStyles(true, entity);
  50. }
  51. @Override
  52. public CellStyle getTemplateStyles(boolean isSingle, ExcelForEachParams excelForEachParams) {
  53. return null;
  54. }
  55. /**
  56. * init --HeaderStyle
  57. *
  58. * @param workbook
  59. * @return
  60. */
  61. private CellStyle initHeaderStyle(Workbook workbook) {
  62. CellStyle style = getBaseCellStyle(workbook);
  63. style.setFont(getFont(workbook, FONT_SIZE_TWELVE, true));
  64. return style;
  65. }
  66. /**
  67. * init-TitleStyle
  68. *
  69. * @param workbook
  70. * @return
  71. */
  72. private CellStyle initTitleStyle(Workbook workbook) {
  73. CellStyle style = getBaseCellStyle(workbook);
  74. style.setFont(getFont(workbook, FONT_SIZE_ELEVEN, false));
  75. // ForegroundColor
  76. style.setFillForegroundColor(IndexedColors.GREY_25_PERCENT.getIndex());
  77. style.setFillPattern(FillPatternType.SOLID_FOREGROUND);
  78. return style;
  79. }
  80. /**
  81. * BaseCellStyle
  82. *
  83. * @return
  84. */
  85. private CellStyle getBaseCellStyle(Workbook workbook) {
  86. CellStyle style = workbook.createCellStyle();
  87. style.setBorderBottom(BorderStyle.THIN);
  88. style.setBorderLeft(BorderStyle.THIN);
  89. style.setBorderTop(BorderStyle.THIN);
  90. style.setBorderRight(BorderStyle.THIN);
  91. style.setAlignment(HorizontalAlignment.CENTER);
  92. style.setVerticalAlignment(VerticalAlignment.CENTER);
  93. style.setWrapText(true);
  94. return style;
  95. }
  96. /**
  97. * Font
  98. *
  99. * @param size
  100. * @param isBold
  101. * @return
  102. */
  103. private Font getFont(Workbook workbook, short size, boolean isBold) {
  104. Font font = workbook.createFont();
  105. font.setFontName("宋体");
  106. font.setBold(isBold);
  107. font.setFontHeightInPoints(size);
  108. return font;
  109. }
  110. }
  1. package com.et.easypoi.service;
  2. import cn.afterturn.easypoi.excel.entity.params.ExcelExportEntity;
  3. import org.apache.poi.ss.usermodel.CellStyle;
  4. public interface IExcelExportStyler {
  5. /**
  6. * heder style
  7. * @param headerColor
  8. * @return
  9. */
  10. public CellStyle getHeaderStyle(short headerColor);
  11. /**
  12. * title style
  13. * @param color
  14. * @return
  15. */
  16. public CellStyle getTitleStyle(short color);
  17. /**
  18. * getstyle
  19. * @param Parity
  20. * @param entity
  21. * @return
  22. */
  23. public CellStyle getStyles(boolean Parity, ExcelExportEntity entity);
  24. }

以上只是一些关键代码,所有代码请参见下面代码仓库

代码仓库

  • https://github.com/Harries/springboot-demo

3.测试

启动Spring Boot应用

导出

访问http://127.0.0.1:8088/importExcelb5043bf02dcd0f9dcd291e008581e387.png

导入

访问http://127.0.0.1:8088/importExcel

  1. Goods(no=110, name=apple, shelfLife=Mon Apr 15 13:28:36 CST 2024, goodTypes=[GoodType(typeId=apple-1, typeName=apple-red), GoodType(typeId=apple-2, typeName=apple-white)])
  2. Goods(no=111, name=wine, shelfLife=Mon Apr 15 13:28:36 CST 2024, goodTypes=[GoodType(typeId=wine-1, typeName=wine-red), GoodType(typeId=wine-2, typeName=wine-white)])
  3. load data count【3row

4.引用

  • http://www.ibloger.net/article/3391.html

  • http://www.liuhaihua.cn/archives/710424.html

  • http://doc.wupaas.com/docs/easypoi/easypoi-1c0u9a1bv66f4

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/AllinToyou/article/detail/439087
推荐阅读
相关标签
  

闽ICP备14008679号