image.png
    Pojo:

    1. package com.rit.demo.pojo;
    2. import java.math.BigDecimal;
    3. import java.util.Date;
    4. import com.baomidou.mybatisplus.annotation.IdType;
    5. import com.baomidou.mybatisplus.annotation.TableId;
    6. import com.baomidou.mybatisplus.extension.activerecord.Model;
    7. import com.fasterxml.jackson.annotation.JsonFormat;
    8. import lombok.Data;
    9. @Data
    10. public class User extends Model<User>{
    11. /**
    12. * @Fields serialVersionUID : TODO
    13. */
    14. private static final long serialVersionUID = -4847514461834601881L;
    15. //設置id自增,再能插入后返回id,設置type才能正常顯示自增id,不設置type插入id會很大
    16. @TableId(value="idx",type = IdType.AUTO)
    17. private Integer id;
    18. private String workid;
    19. private String name;
    20. private Integer age;
    21. private String gerden;
    22. @JsonFormat(locale="zh", timezone="GMT+8", pattern="yyyy-MM-dd")
    23. private Date creatTime;
    24. private BigDecimal money;
    25. }

    UserDao:

    1. package com.rit.demo.dao;
    2. import java.util.List;
    3. import com.rit.demo.pojo.User;
    4. public interface UserDao {
    5. //查询全部
    6. List<User> queryAll();
    7. }

    UserMapper.xml:

    1. <?xml version="1.0" encoding="UTF-8" ?>
    2. <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd" >
    3. <mapper namespace="com.rit.demo.dao.UserDao" >
    4. <resultMap id="BaseResultMap" type="com.rit.demo.pojo.User" >
    5. <id column="id" property="id" jdbcType="INTEGER" />
    6. <result column="workid" property="workid" jdbcType="VARCHAR" />
    7. <result column="name" property="name" jdbcType="VARCHAR" />
    8. <result column="age" property="age" jdbcType="INTEGER" />
    9. <result column="gerden" property="gerden" jdbcType="VARCHAR" />
    10. <result column="creat_time" property="creatTime" jdbcType="DATE" />
    11. <result column="money" property="money" jdbcType="DECIMAL" />
    12. </resultMap>
    13. <!-- 表字段 -->
    14. <sql id="baseColumns">
    15. u.id
    16. , u.workid
    17. , u.name
    18. , u.age
    19. , u.gerden
    20. , u.creat_time
    21. , u.money
    22. </sql>
    23. <!--查询所有数据-->
    24. <select id="queryAll" resultMap="BaseResultMap">
    25. SELECT <include refid="baseColumns" /> from user u
    26. </select>
    27. </mapper>

    UserController:

    1. package com.rit.demo.controller;
    2. import java.io.IOException;
    3. import java.io.UnsupportedEncodingException;
    4. import java.net.URLEncoder;
    5. import java.util.List;
    6. import javax.servlet.http.HttpServletResponse;
    7. import org.apache.poi.hssf.util.HSSFColor;
    8. import org.apache.poi.ss.usermodel.CellStyle;
    9. import org.apache.poi.ss.usermodel.FillPatternType;
    10. import org.apache.poi.ss.usermodel.Font;
    11. import org.apache.poi.ss.usermodel.HorizontalAlignment;
    12. import org.apache.poi.ss.usermodel.VerticalAlignment;
    13. import org.springframework.beans.factory.annotation.Autowired;
    14. import org.springframework.cache.annotation.CacheEvict;
    15. import org.springframework.cache.annotation.Cacheable;
    16. import org.springframework.stereotype.Controller;
    17. import org.springframework.web.bind.annotation.CrossOrigin;
    18. import org.springframework.web.bind.annotation.GetMapping;
    19. import org.springframework.web.bind.annotation.PostMapping;
    20. import org.springframework.web.bind.annotation.RequestBody;
    21. import org.springframework.web.bind.annotation.RequestMapping;
    22. import org.springframework.web.bind.annotation.RequestMethod;
    23. import org.springframework.web.bind.annotation.ResponseBody;
    24. import org.springframework.web.bind.annotation.RestController;
    25. import com.rit.demo.pojo.User;
    26. import com.rit.demo.service.RedisService;
    27. import com.rit.demo.service.UserService;
    28. import cn.hutool.poi.excel.ExcelUtil;
    29. import cn.hutool.poi.excel.ExcelWriter;
    30. @RestController
    31. @RequestMapping("/userCon")
    32. public class UserController {
    33. @Autowired
    34. private UserService us;
    35. @GetMapping("user_export_excel")
    36. @ResponseBody
    37. public void exportExcel(HttpServletResponse response) throws UnsupportedEncodingException{
    38. //設置響應類型
    39. response.setContentType("application/vnd.ms-excel");
    40. //設置字符編碼
    41. response.setCharacterEncoding("utf-8");
    42. //設置響應頭信息
    43. response.setHeader("Content-dispositon", "attachment:filename*=urf-8''"+URLEncoder.encode("用户数据","UTF-8")+".xlsx");
    44. List<User> list=us.queryAll();
    45. //写入文件
    46. ExcelWriter writer=ExcelUtil.getWriter();
    47. CellStyle cellStyle=writer.createCellStyle();
    48. cellStyle.setVerticalAlignment(VerticalAlignment.CENTER);
    49. cellStyle.setAlignment(HorizontalAlignment.CENTER);
    50. cellStyle.setBorderLeft(writer.getCellStyle().getBorderLeft());
    51. cellStyle.setBorderRight(writer.getCellStyle().getBorderRight());
    52. cellStyle.setBorderBottom(writer.getCellStyle().getBorderBottom());
    53. Font font=writer.createFont();
    54. font.setBold(true);
    55. font.setFontHeightInPoints((short)12);
    56. font.setFontName("微软雅黑");
    57. cellStyle.setFont(font);
    58. //设置总价单元格样式
    59. CellStyle cs=writer.createCellStyle();
    60. cs.setFillForegroundColor(HSSFColor.HSSFColorPredefined.GOLD.getIndex());
    61. cs.setFillPattern(FillPatternType.SOLID_FOREGROUND);
    62. //设置垂直居中和水平居中
    63. cs.setVerticalAlignment(VerticalAlignment.CENTER);
    64. cs.setAlignment(HorizontalAlignment.LEFT);
    65. //设置边框
    66. cs.setBorderRight(writer.getCellStyle().getBorderRight());
    67. cs.setBorderBottom(writer.getCellStyle().getBorderBottom());
    68. //merge 数字从0开始算 前面两个数字是第几行到第几行合并 后面两个数字是第几列到第几列合并
    69. //标题一
    70. writer.merge(0,0,0,11,"BOM报价单",cellStyle);
    71. //标题二
    72. writer.merge(1,1,0,3,"您上传的BOM",cellStyle);
    73. writer.merge(1,1,4,9,"商城的报价单",cellStyle);
    74. writer.merge(1,1,10,11,"总价(含税):99.99",cellStyle);
    75. //跳过前面两行(为了设置标题样式)原始的设置标题方法,不可以,例:merge(3,"标题名",false);
    76. writer.passRows(2);
    77. //设置高度(行row)
    78. writer.setRowHeight(0, 50);
    79. writer.setRowHeight(1, 30);
    80. //设置导出信息的表头
    81. writer.addHeaderAlias("workid", "工号");
    82. writer.addHeaderAlias("name", "姓名");
    83. writer.addHeaderAlias("age", "年龄");
    84. writer.addHeaderAlias("gerden", "性别");
    85. writer.addHeaderAlias("creatTime", "入职时间");
    86. writer.addHeaderAlias("money", "基本工资");
    87. //设置列宽(Colum)
    88. writer.setColumnWidth(5, 20);
    89. writer.setColumnWidth(10, 10);
    90. writer.setColumnWidth(11, 10);
    91. //设置导出表头样式,但不包括合并单元格
    92. CellStyle headCellStyle=writer.getHeadCellStyle();
    93. headCellStyle.setFillForegroundColor(HSSFColor.HSSFColorPredefined.LIME.getIndex());
    94. headCellStyle.setFillPattern(FillPatternType.SOLID_FOREGROUND);
    95. //写入
    96. writer.write(list,true);
    97. //主要针对自定义表头设置 行高(必须要写入完成后才可以设置)
    98. for (int i = 2; i < list.size(); i++) {
    99. writer.setRowHeight(i, 20);
    100. }
    101. try {
    102. writer.flush(response.getOutputStream(),true);
    103. } catch (IOException e) {
    104. e.printStackTrace();
    105. }finally {
    106. writer.close();
    107. }
    108. }
    109. }