当前位置:   article > 正文

Springboot下使用easyExcel玩转Excel表的导出_springboot easyexcel下载改成是否支持文本格式

springboot easyexcel下载改成是否支持文本格式

1、Excel表格的导出:

1、搭建一个springboot项目:

https://blog.csdn.net/LemonSnm/article/details/87894940

 2、maven中加入EasyExcel所需包

  1. <!-- https://mvnrepository.com/artifact/com.alibaba/easyexcel -->
  2. <dependency>
  3. <groupId>com.alibaba</groupId>
  4. <artifactId>easyexcel</artifactId>
  5. <version>2.1.6</version>
  6. </dependency>

2、模拟学生实体类Student

  1. package com.lemon.entity;
  2. import com.alibaba.excel.annotation.ExcelIgnoreUnannotated;
  3. import com.alibaba.excel.annotation.ExcelProperty;
  4. /**
  5. * 学生类
  6. * @author lemon
  7. * @since 2020-05-26
  8. */
  9. @ExcelIgnoreUnannotated()
  10. public class Student {
  11. private Integer myId;
  12. @ExcelProperty(value = "学号",index = 0) //0 对应导出Excel表格的第一列
  13. private Integer id;
  14. @ExcelProperty(value = "姓名",index = 1)
  15. private String name;
  16. @ExcelProperty(value = "性别",index = 2)
  17. private String sex;
  18. @ExcelProperty(value = "班级",index = 3)
  19. private String grade;
  20. @Override
  21. public String toString() {
  22. return "Student{" +
  23. "id=" + id +
  24. ", name='" + name + '\'' +
  25. ", sex='" + sex + '\'' +
  26. ", grade='" + grade + '\'' +
  27. '}';
  28. }
  29. public Integer getId() {
  30. return id;
  31. }
  32. public void setId(Integer id) {
  33. this.id = id;
  34. }
  35. public String getName() {
  36. return name;
  37. }
  38. public void setName(String name) {
  39. this.name = name;
  40. }
  41. public String getSex() {
  42. return sex;
  43. }
  44. public void setSex(String sex) {
  45. this.sex = sex;
  46. }
  47. public String getGrade() {
  48. return grade;
  49. }
  50. public void setGrade(String grade) {
  51. this.grade = grade;
  52. }
  53. }

3、导出功能controller:

  1. package com.lemon.controller;
  2. import com.alibaba.excel.EasyExcel;
  3. import com.alibaba.excel.util.StringUtils;
  4. import com.lemon.easyutils.EasyExcelListener;
  5. import com.lemon.entity.Student;
  6. import org.springframework.stereotype.Controller;
  7. import org.springframework.web.bind.annotation.RequestMapping;
  8. import javax.servlet.http.HttpServletRequest;
  9. import javax.servlet.http.HttpServletResponse;
  10. import java.io.FileInputStream;
  11. import java.net.URLEncoder;
  12. import java.text.SimpleDateFormat;
  13. import java.util.*;
  14. /**
  15. * 测试controller
  16. * @author lemon
  17. * @since 2020/5/26 0026
  18. */
  19. @Controller
  20. @RequestMapping("/test")
  21. public class TestController {
  22. /**
  23. * 主页面
  24. * @author lemon
  25. * @since 2020/5/26 0026
  26. */
  27. @RequestMapping("/index")
  28. public String index(){
  29. return "/views/index";
  30. }
  31. /**
  32. * 导出
  33. * @author lemon
  34. * @since 2020/5/26 0026
  35. */
  36. @RequestMapping("/export")
  37. public void export(HttpServletRequest request, HttpServletResponse response) throws Exception {
  38. //模拟需要导出的数据
  39. List<Student> list = new ArrayList<Student>();
  40. Student student = new Student();
  41. student.setId(1);
  42. student.setName("1321");
  43. student.setSex("男");
  44. student.setGrade("一年级");
  45. for (int i = 0; i < 5; i++) {
  46. list.add(student);
  47. }
  48. //设置并导出
  49. // 这里注意 有同学反应使用swagger 会导致各种问题,请直接用浏览器或者用postman
  50. response.setContentType("application/vnd.ms-excel");
  51. response.setCharacterEncoding("utf-8");
  52. //设置文件名
  53. SimpleDateFormat fDate = new SimpleDateFormat("yyyy-MM-dd-HH-mm-ss");
  54. String fileName = "导出测试表" + fDate.format(new Date()) + ".xlsx";
  55. // 这里URLEncoder.encode可以防止中文乱码 当然和easyexcel没有关系
  56. response.setHeader("Content-disposition", "attachment;filename=" + URLEncoder.encode(fileName, "UTF-8"));
  57. EasyExcel.write(response.getOutputStream(), Student.class).sheet("sheet1").doWrite(list);
  58. }
  59. }

4、导出功能的页面:

  1. <html>
  2. <head>
  3. <title>测试</title>
  4. </head>
  5. <body>
  6. <button onclick="myExport()" >导出</button>
  7. </body>
  8. </html>
  9. <script>
  10. function myExport() {
  11. window.location.href = "/test/export"
  12. }
  13. </script>

5、测试:

输入http://localhost:8081/test/index

点击导出 选择导出位置:

 

一下为输出内容格式设置:

6、设置单元格格式为文本

  1. import com.alibaba.excel.metadata.CellData;
  2. import com.alibaba.excel.metadata.Head;
  3. import com.alibaba.excel.write.handler.CellWriteHandler;
  4. import com.alibaba.excel.write.metadata.holder.WriteSheetHolder;
  5. import com.alibaba.excel.write.metadata.holder.WriteTableHolder;
  6. import org.apache.poi.hssf.usermodel.HSSFCellStyle;
  7. import org.apache.poi.ss.usermodel.*;
  8. import org.apache.poi.xssf.usermodel.XSSFCellStyle;
  9. import java.util.List;
  10. /**
  11. * 设置单元格格式
  12. * @author lemon
  13. * @since 2020/8/11 0011
  14. */
  15. public class EasyExcelRowWriteHandlerUtils implements CellWriteHandler {
  16. @Override
  17. public void beforeCellCreate(WriteSheetHolder writeSheetHolder, WriteTableHolder writeTableHolder, Row row, Head head, Integer integer, Integer integer1, Boolean aBoolean) {
  18. }
  19. @Override
  20. public void afterCellCreate(WriteSheetHolder writeSheetHolder, WriteTableHolder writeTableHolder, Cell cell, Head head, Integer integer, Boolean aBoolean) {
  21. //设置单元格格式为文本
  22. Workbook workbook = writeSheetHolder.getSheet().getWorkbook();
  23. CellStyle cellStyle = workbook.createCellStyle();
  24. DataFormat dataFormat = workbook.createDataFormat();
  25. cellStyle.setDataFormat(dataFormat.getFormat("@"));
  26. cell.setCellStyle(cellStyle);
  27. //设置0-30列为文本形式
  28. for (int i = 0; i < 30; i++) {
  29. writeSheetHolder.getSheet().setDefaultColumnStyle(i, cellStyle);
  30. }
  31. }
  32. @Override
  33. public void afterCellDataConverted(WriteSheetHolder writeSheetHolder, WriteTableHolder writeTableHolder, CellData cellData, Cell cell, Head head, Integer integer, Boolean aBoolean) {
  34. }
  35. @Override
  36. public void afterCellDispose(WriteSheetHolder writeSheetHolder, WriteTableHolder writeTableHolder, List<CellData> list, Cell cell, Head head, Integer integer, Boolean aBoolean) {
  37. }
  38. }

用法:

  1. EasyExcelFactory.write(response.getOutputStream(),
  2. Student.class).registerWriteHandler(new
  3. EasyExcelRowWriteHandlerUtils()).sheet().doWrite(new ArrayList());

7、导出表格带下拉框

  1. import com.alibaba.excel.write.handler.SheetWriteHandler;
  2. import com.alibaba.excel.write.metadata.holder.WriteSheetHolder;
  3. import com.alibaba.excel.write.metadata.holder.WriteWorkbookHolder;
  4. import org.apache.poi.ss.usermodel.DataValidation;
  5. import org.apache.poi.ss.usermodel.DataValidationConstraint;
  6. import org.apache.poi.ss.usermodel.DataValidationHelper;
  7. import org.apache.poi.ss.usermodel.Sheet;
  8. import org.apache.poi.ss.util.CellRangeAddressList;
  9. import org.apache.poi.xssf.usermodel.XSSFDataValidation;
  10. import java.util.Map;
  11. /**
  12. * 设置单元格下拉框
  13. * @author lemon
  14. * @since 2020/7/27
  15. */
  16. public class EasyExcelSheetSelectUtils implements SheetWriteHandler {
  17. //第0列开始 设置某列的下拉内容
  18. private Map<Integer,String[]> mapDropDown;
  19. public EasyExcelSheetSelectUtils(Map<Integer, String[]> mapDropDown) {
  20. this.mapDropDown = mapDropDown;
  21. }
  22. @Override
  23. public void beforeSheetCreate(WriteWorkbookHolder writeWorkbookHolder, WriteSheetHolder writeSheetHolder) {
  24. }
  25. @Override
  26. public void afterSheetCreate(WriteWorkbookHolder writeWorkbookHolder, WriteSheetHolder writeSheetHolder) {
  27. Sheet sheet = writeSheetHolder.getSheet();
  28. ///开始设置下拉框 //设置下拉框
  29. DataValidationHelper helper = sheet.getDataValidationHelper();
  30. for (Map.Entry<Integer, String[]> entry : mapDropDown.entrySet()) {
  31. /***起始行、终止行、起始列、终止列**/
  32. CellRangeAddressList addressList = new CellRangeAddressList(1, 1000, entry.getKey(), entry.getKey());
  33. /***设置下拉框数据**/
  34. DataValidationConstraint constraint = helper.createExplicitListConstraint(entry.getValue());
  35. DataValidation dataValidation = helper.createValidation(constraint, addressList);
  36. /***处理Excel兼容性问题**/
  37. if (dataValidation instanceof XSSFDataValidation) {
  38. dataValidation.setSuppressDropDownArrow(true);
  39. dataValidation.setShowErrorBox(true);
  40. } else {
  41. dataValidation.setSuppressDropDownArrow(false);
  42. }
  43. sheet.addValidationData(dataValidation);
  44. }
  45. }
  46. }

用法:

  1. //性别下拉框设置
  2. String[] sexStr = new String[]{"男","女"};
  3. //设置下拉框内容
  4. Map<Integer,String []> mapDropDown = new HashMap<>();
  5. //设置在第五列
  6. mapDropDown.put(5,sexStr);
  7. //设置在第7列
  8. mapDropDown.put(7,sexStr);
  9. EasyExcelFactory.write(response.getOutputStream(), Student.class).registerWriteHandler(new EasyExcelSheetSelectUtils(mapDropDown)).sheet().doWrite(new ArrayList());

 

 

 

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

闽ICP备14008679号