码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • Excel的导入与导出2


    通过Hutool实现Excel的导入导出

    1.引入相关依赖

    1. cn.hutool
    2. hutool-all
    3. 5.7.20
    4. org.apache.poi
    5. poi-ooxml
    6. 4.1.2

    2. 相关代码

    1. package com.example.demo.demo1;
    2. import cn.hutool.core.collection.CollUtil;
    3. import cn.hutool.poi.excel.ExcelReader;
    4. import cn.hutool.poi.excel.ExcelUtil;
    5. import cn.hutool.poi.excel.ExcelWriter;
    6. import org.springframework.web.bind.annotation.GetMapping;
    7. import org.springframework.web.bind.annotation.PostMapping;
    8. import org.springframework.web.bind.annotation.RequestMapping;
    9. import org.springframework.web.bind.annotation.RestController;
    10. import org.springframework.web.multipart.MultipartFile;
    11. import javax.servlet.ServletOutputStream;
    12. import javax.servlet.http.HttpServletResponse;
    13. import java.io.IOException;
    14. import java.io.InputStream;
    15. import java.net.URLEncoder;
    16. import java.time.LocalDateTime;
    17. import java.util.ArrayList;
    18. import java.util.List;
    19. /**
    20. * @Author: pengke
    21. * @Date: 2022/9/5 17:46
    22. * @Description:
    23. */
    24. @RestController
    25. @RequestMapping("/demo")
    26. public class Demo5 {
    27. //表格导出接口
    28. @RequestMapping("/export")
    29. public void export(HttpServletResponse response) throws IOException {
    30. //查询所有用户
    31. List list= new ArrayList<>();
    32. list.add(new User("甲乙丙","123456","甲乙丙"));
    33. list.add(new User("路飞","123","monkey"));
    34. //在内存操作,写到浏览器
    35. ExcelWriter writer= ExcelUtil.getWriter(true);
    36. //自定义标题别名
    37. writer.addHeaderAlias("username","用户名");
    38. writer.addHeaderAlias("password","密码");
    39. writer.addHeaderAlias("nickname","昵称");
    40. //默认配置
    41. writer.write(list,true);
    42. //设置content—type
    43. response.setContentType("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet;charset:utf-8");
    44. //设置标题
    45. String fileName= URLEncoder.encode("用户信息","UTF-8");
    46. //Content-disposition是MIME协议的扩展,MIME协议指示MIME用户代理如何显示附加的文件。
    47. response.setHeader("Content-Disposition","attachment;filename="+fileName+".xlsx");
    48. ServletOutputStream outputStream= response.getOutputStream();
    49. //将Writer刷新到OutPut
    50. writer.flush(outputStream,true);
    51. outputStream.close();
    52. writer.close();
    53. }
    54. /**
    55. * 导入excel
    56. * @param file
    57. */
    58. @PostMapping("/import")
    59. public String importExcel(MultipartFile file) throws IOException {
    60. //1.第一种 头必须和实体(英文)一样
    61. //文件处理成io流
    62. InputStream in = file.getInputStream();
    63. // //io流给ExcelReader
    64. ExcelReader excelReader=ExcelUtil.getReader(in);
    65. // //读取数据且转化为list
    66. // List list = excelReader.readAll(User.class);
    67. //2.第二种导入方式
    68. //忽略第一行头(第一行是中文的情况),直接读取表的内容
    69. List> list = excelReader.read(1);
    70. List listUser = CollUtil.newArrayList();
    71. for (List row: list) {
    72. User user=new User();
    73. user.setUsername(row.get(0).toString());
    74. user.setPassword(row.get(1).toString());
    75. user.setNickname(row.get(2).toString());
    76. listUser.add(user);
    77. // ****类似一一对应****
    78. }
    79. //批量注册进数据库
    80. System.out.println(listUser);
    81. return listUser.toString();
    82. }
    83. }
    84.  

      1. package com.example.demo.test1;
      2. import cn.hutool.core.collection.CollUtil;
      3. import cn.hutool.core.io.IoUtil;
      4. import cn.hutool.poi.excel.ExcelUtil;
      5. import cn.hutool.poi.excel.ExcelWriter;
      6. import com.example.demo.demo1.User;
      7. import org.apache.xmlbeans.XmlSimpleList;
      8. import org.springframework.web.bind.annotation.GetMapping;
      9. import org.springframework.web.bind.annotation.PostMapping;
      10. import org.springframework.web.bind.annotation.RequestMapping;
      11. import org.springframework.web.bind.annotation.RestController;
      12. import javax.servlet.ServletOutputStream;
      13. import javax.servlet.http.HttpServletResponse;
      14. import java.io.IOException;
      15. import java.math.BigDecimal;
      16. import java.net.URLEncoder;
      17. import java.time.format.DateTimeFormatter;
      18. import java.util.ArrayList;
      19. import java.util.LinkedHashMap;
      20. import java.util.List;
      21. import java.util.Map;
      22. /**
      23. * @Author: pengke
      24. * @Date: 2022/9/7 15:02
      25. * @Description:
      26. */
      27. @RestController
      28. @RequestMapping("/excel")
      29. public class ExcelController {
      30. @RequestMapping("/export")
      31. public String exportWaybill( HttpServletResponse response)throws IOException {
      32. ExcelWriter writer = ExcelUtil.getWriter();
      33. List> rows = CollUtil.newArrayList();
      34. List userList = new ArrayList<>();
      35. userList.add(new User("悟空","123","大圣"));
      36. userList.add(new User("八戒","456","天蓬元帅"));
      37. userList.add(new User("沙僧","789","卷帘大将"));
      38. // 通过工具类创建writer,默认创建xls格式
      39. for (int i = 0; i < userList.size(); i++) {
      40. Map map = new LinkedHashMap<>();
      41. map.put("名字", userList.get(i).getUsername());
      42. map.put("密码", userList.get(i).getPassword());
      43. map.put("昵称", userList.get(i).getNickname());
      44. rows.add(map);
      45. }
      46. //宽度自适应
      47. writer.setColumnWidth(-1, 22);
      48. // 合并单元格后的标题行,使用默认标题样式
      49. String name = URLEncoder.encode("西游记","UTF-8");
      50. writer.merge(2, "西游记");
      51. export(response, writer, rows, name);
      52. System.out.println("success");
      53. return "success";
      54. }
      55. private void export(HttpServletResponse response, ExcelWriter writer, List> rows, String name) {
      56. writer.write(rows, true);
      57. response.setContentType("application/vnd.openxmlformats-officedocument.spreadsheetml;charset=utf-8");
      58. response.setHeader("Content-Disposition", "attachment;filename=" + name + ".xls");
      59. ServletOutputStream out = null;
      60. try {
      61. out = response.getOutputStream();
      62. writer.flush(out, true);
      63. } catch (IOException e) {
      64. e.printStackTrace();
      65. } finally {
      66. writer.close();
      67. IoUtil.close(out);
      68. }
      69. }
      70. }

    85. 相关阅读:
      Spring Security 自定义授权服务器实践
      Java将查询到的List,list集合还嵌套一个list集合(把这个list集合和嵌套的list集合合并为一个list集合)
      day12 多线程02
      PyCharm+PyQT5之一环境搭建
      FOXBORO FBM233 P0926GX控制脉冲模块
      R语言使用t.test函数执行t检验验证总体均值是否是某个特定的值(从样本集推论总体均值)
      零样本学习
      使用C语言和libsocket库编写爬虫程序
      隆云通土壤含氧量传感器
      int和Integer的区别
    86. 原文地址:https://blog.csdn.net/PengK_aha/article/details/126746098
      • 最新文章
      • 攻防演习之三天拿下官网站群
        数据安全治理学习——前期安全规划和安全管理体系建设
        企业安全 | 企业内一次钓鱼演练准备过程
        内网渗透测试 | Kerberos协议及其部分攻击手法
        0day的产生 | 不懂代码的"代码审计"
        安装scrcpy-client模块av模块异常,环境问题解决方案
        leetcode hot100【LeetCode 279. 完全平方数】java实现
        OpenWrt下安装Mosquitto
        AnatoMask论文汇总
        【AI日记】24.11.01 LangChain、openai api和github copilot
      • 热门文章
      • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
        奉劝各位学弟学妹们,该打造你的技术影响力了!
        五年了,我在 CSDN 的两个一百万。
        Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
        面试官都震惊,你这网络基础可以啊!
        你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
        心情不好的时候,用 Python 画棵樱花树送给自己吧
        通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
        13 万字 C 语言从入门到精通保姆级教程2021 年版
        10行代码集2000张美女图,Python爬虫120例,再上征途
      Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1
      正则表达式工具 cron表达式工具 密码生成工具

      京公网安备 11010502049817号