• java中使用cn.hutool.poi.excel导出Excel


     如果需要导出复杂的单元格,合并单元格,请查看 

    Java中导出Excel,合并单元格,简单上手_SUMMERENT的博客-CSDN博客

    目录

     1、引入maven依赖

    2、 编写ExportExcelVo

    3、编写ExportUtil导出数据工具,支持xlsx和csv两种

    4、编写ExcelService层,准备数据

    5、编写controller层,调用接口

    6、测试导出


     1、引入maven依赖

    1. cn.hutool
    2. hutool-all
    3. 5.3.8
    4. cn.jimmyshi
    5. bean-query
    6. 1.1.5
    7. commons-io
    8. commons-io
    9. 2.6

    注意:下面如果有报错,请查看导入的maven依赖 

    2、 编写ExportExcelVo

    1. @Data
    2. public class ExportExcelVo {
    3. private String headOne;
    4. private String headTwoCome;
    5. private String headTwoOn;
    6. private String headThreeCome;
    7. private String headThreeOn;
    8. private String headFourCome;
    9. private String headFourOn;
    10. private String headFiveCome;
    11. private String headFiveOn;
    12. }

    3、编写ExportUtil导出数据工具,支持xlsx和csv两种

    1. import cn.hutool.core.io.IoUtil;
    2. import cn.hutool.poi.excel.ExcelUtil;
    3. import cn.hutool.poi.excel.ExcelWriter;
    4. import lombok.extern.slf4j.Slf4j;
    5. import org.apache.commons.csv.CSVFormat;
    6. import org.apache.commons.csv.CSVPrinter;
    7. import org.apache.commons.io.FilenameUtils;
    8. import org.springframework.util.CollectionUtils;
    9. import cn.jimmyshi.beanquery.BeanQuery;
    10. import springboot.redis.demo.exception.MyRuntimeException;
    11. import javax.servlet.ServletOutputStream;
    12. import javax.servlet.http.HttpServletResponse;
    13. import java.io.IOException;
    14. import java.io.Writer;
    15. import java.nio.charset.StandardCharsets;
    16. import java.util.Collection;
    17. import java.util.List;
    18. import java.util.Map;
    19. /**
    20. * @Description: 导出数据工具,支持xlsx和csv两种
    21. * @Title: ExportUtil
    22. */
    23. @Slf4j
    24. public class ExportUtil {
    25. /**
    26. *
    27. * @param dataList 导出数据列表
    28. * @param fieldMap 导出的数据字段,key为对象字段名称,value为标题名称
    29. * @param fileName 导出文件名
    30. * @return void
    31. * @throws IOException 文件操作失败
    32. */
    33. public static void doExport(Collection dataList, Map fieldMap,String fileName) throws IOException{
    34. if (CollectionUtils.isEmpty(dataList)){
    35. return;
    36. }
    37. StringBuilder sb = new StringBuilder(128);
    38. for (Map.Entry e: fieldMap.entrySet()) {
    39. sb.append(e.getKey()).append(" as ").append(e.getValue()).append(", ");
    40. }
    41. //去掉末尾空格
    42. String fieldString = sb.substring(0,sb.length() - 2);
    43. //写出数据到excel格式的输出流,BeanQuery 是一个把对象转换为Map的Java工具库
    44. List> resultList = BeanQuery.select(fieldString).executeFrom(dataList);
    45. 构建HTTP输出流参数
    46. HttpServletResponse response = ContextUtil.getHttpResponse();
    47. response.setHeader("content-type", "application/octet-stream");
    48. response.setContentType("application/octet-stream");
    49. response.setHeader("Content-Disposition", "attachment;filename=" + fileName);
    50. if ("xlsx".equals(FilenameUtils.getExtension(fileName))) {
    51. ServletOutputStream out = response.getOutputStream();
    52. ExcelWriter writer = ExcelUtil.getWriter(true);
    53. writer.setRowHeight(-1, 30);
    54. writer.setColumnWidth(-1, 30);
    55. writer.setColumnWidth(1, 20);
    56. writer.write(resultList);
    57. writer.flush(out);
    58. writer.close();
    59. IoUtil.close(out);
    60. } else if ("csv".equals(FilenameUtils.getExtension(fileName))) {
    61. Collection headerList = fieldMap.values();
    62. String[] headerArray = new String[headerList.size()];
    63. headerList.toArray(headerArray);
    64. CSVFormat format = CSVFormat.DEFAULT.withHeader(headerArray);
    65. response.setCharacterEncoding(StandardCharsets.UTF_8.name());
    66. try (Writer out = response.getWriter(); CSVPrinter printer = new CSVPrinter(out, format)) {
    67. for (Map o : resultList) {
    68. for (Map.Entry entry : o.entrySet()) {
    69. printer.print(entry.getValue());
    70. }
    71. printer.println();
    72. }
    73. printer.flush();
    74. } catch (Exception e) {
    75. log.error("Failed to call ExportUtil.doExport", e);
    76. }
    77. } else {
    78. throw new MyRuntimeException("不支持的导出文件类型!");
    79. }
    80. }
    81. }

    4、编写ExcelService层,准备数据

    1. import java.util.ArrayList;
    2. import java.util.List;
    3. public class ExcelService {
    4. public static List getExportData() {
    5. ExportExcelVo excelVo = new ExportExcelVo();
    6. List list = new ArrayList<>();
    7. for (int i = 0; i < 3; i++) {
    8. excelVo.setHeadOne("AAA");
    9. excelVo.setHeadTwoCome("BBB");
    10. excelVo.setHeadTwoOn("CCC");
    11. excelVo.setHeadThreeCome("DDD");
    12. excelVo.setHeadThreeOn("EEE");
    13. excelVo.setHeadFourCome("FFF");
    14. excelVo.setHeadFourOn("GGG");
    15. excelVo.setHeadFiveCome("HHH");
    16. excelVo.setHeadFiveOn("III");
    17. list.add(excelVo);
    18. }
    19. return list;
    20. }
    21. }

    5、编写controller层,调用接口

    1. @RestController
    2. public class alibaba {
    3. @GetMapping("/exportA")
    4. public void exportA(HttpServletResponse response) throws Exception {
    5. List data = ExcelService.getExportData();
    6. // 构建导出的map
    7. Map headerMap = new LinkedHashMap<>(21);
    8. headerMap.put("headOne","单元格一");
    9. headerMap.put("headTwoCome", "单元格二");
    10. headerMap.put("headTwoOn", "单元格三");
    11. headerMap.put("headThreeCome", "单元格四");
    12. headerMap.put("headThreeOn", "单元格五");
    13. headerMap.put("headFourCome", "单元格六");
    14. headerMap.put("headFourOn", "单元格七");
    15. headerMap.put("headFiveCome", "单元格八");
    16. headerMap.put("headFiveOn", "单元格九");
    17. ExportUtil.doExport(data,headerMap,"测试.xlsx");
    18. }
    19. }

    6、测试导出

    在浏览器地址栏中访问:http://localhost:项目端口号/exportA

    如果需要导出复杂的单元格,合并单元格,请查看 

    Java中导出Excel,合并单元格,简单上手_SUMMERENT的博客-CSDN博客

  • 相关阅读:
    SpringBoot整合RabbitMQ
    094:vue+openlayers根据zoom的不同,显示不同的地图
    c++八股文笔记day1
    12 【操作mongodb数据库】
    C++基础知识(十)--- I/O
    eMAG、ManoMano、Allegro店铺如何快速出单?自己产号测评的重要性
    小谈设计模式(26)—中介者模式
    手机抓包方式汇总
    2分钟讲清楚C#的委托, C语言的函数指针,Java的函数式接口
    没有实施APS软件的工厂,常常面临的问题
  • 原文地址:https://blog.csdn.net/SUMMERENT/article/details/126499054