文章目录

  • 前言
  • 一、Hutool是什么?
  • 二、使用步骤
    • 1.引入maven依赖
    • 2. 配置宽度自适应
    • 3.Excel导出
  • 三、原理

前言

一、Hutool是什么?

Hutool是一个小而全的Java工具类库,通过静态方法封装,降低相关API的学习成本,提高工作效率,使Java拥有函数式语言般的优雅,让Java语言也可以“甜甜的”。

Hutool中的工具方法来自每个用户的精雕细琢,它涵盖了Java开发底层代码中的方方面面,它既是大型项目开发中解决小问题的利器,也是小型项目中的效率担当;

Hutool是项目中“util”包友好的替代,它节省了开发人员对项目中公用类和公用工具方法的封装时间,使开发专注于业务,同时可以最大限度的避免封装不完善带来的bug。

二、使用步骤

1.引入maven依赖

<dependency><groupId>cn.hutool</groupId><artifactId>hutool-all</artifactId><version>5.6.5</version>
</dependency><dependency><groupId>org.apache.poi</groupId><artifactId>poi-ooxml</artifactId><version>4.1.2</version>
</dependency><dependency><groupId>org.apache.poi</groupId><artifactId>poi-ooxml-schemas</artifactId><version>4.1.2</version>
</dependency>

2. 配置宽度自适应

package com.example.demo.util;import org.apache.poi.ss.usermodel.Cell;
import org.apache.poi.ss.usermodel.CellType;
import org.apache.poi.ss.usermodel.Row;
import org.apache.poi.ss.usermodel.Sheet;/*** Excel导出自适应宽度工具类** @author LL* @date 2020/12/02 22:28*/
public class AdaptiveWidthUtils {/*** 自适应宽度(中文支持)** @param sheet sheet* @param size  因为for循环从0开始,size值为 列数-1*/public static void setSizeColumn(Sheet sheet, int size) {for (int columnNum = 0; columnNum <= size; columnNum++) {int columnWidth = sheet.getColumnWidth(columnNum) / 256;for (int rowNum = 0; rowNum <= sheet.getLastRowNum(); rowNum++) {Row currentRow;//当前行未被使用过if (sheet.getRow(rowNum) == null) {currentRow = sheet.createRow(rowNum);} else {currentRow = sheet.getRow(rowNum);}if (currentRow.getCell(columnNum) != null) {Cell currentCell = currentRow.getCell(columnNum);if (currentCell.getCellType() == CellType.STRING) {int length = currentCell.getStringCellValue().getBytes().length;if (columnWidth < length) {columnWidth = length;}}}}sheet.setColumnWidth(columnNum, columnWidth * 256);}}
}

未配置宽度自适应效果:

配置后:

3.Excel导出

3.1、实体类

package com.example.demo.model;import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;/*** @author LL* @description : 用户信息* @date 2021/02/25 14:59*/@Data
@ApiModel(description = "用户信息")
public class User {@ApiModelProperty(notes = "id")private Integer id;@ApiModelProperty(notes = "姓名")private String name;@ApiModelProperty(notes = "年龄")private Integer age;}

3.2、controller层

package com.example.demo.controller;import cn.hutool.core.io.IoUtil;
import cn.hutool.core.util.ObjectUtil;
import cn.hutool.poi.excel.ExcelUtil;
import cn.hutool.poi.excel.ExcelWriter;
import com.example.demo.service.UserService;import javax.servlet.ServletOutputStream;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.net.URLEncoder;
import java.util.ArrayList;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;
/*** @author LL* @description : 用户管理模块* @date 2021/02/25 15:38*/@RestController
@RequiredArgsConstructor
@RequestMapping("/user")
@Api(value = "user", tags = "用户管理模块")
public class UserController {private final UserService userService;@GetMapping("/export/{id}")@ApiOperation(value = "导出")public void export(@PathVariable Integer id, HttpServletResponse response) {// 通过工具类创建writer,默认创建xls格式ExcelWriter writer = ExcelUtil.getWriter(true);//自定义标题别名writer.addHeaderAlias("id", "ID");writer.addHeaderAlias("name", "姓名");writer.addHeaderAlias("age", "年龄");// 合并单元格后的标题行,使用默认标题样式writer.merge(2, "用户信息");// 一次性写出内容,使用默认样式,强制输出标题List<User> userList = userService.exportUser(id);writer.write(userList, true);//out为OutputStream,需要写出到的目标流// 设置所有列为自动宽度,不考虑合并单元格AdaptiveWidthUtils.setSizeColumn(writer.getSheet(), 2);//response为HttpServletResponse对象response.setContentType("application/vnd.ms-excel;charset=utf-8");//test.xls是弹出下载对话框的文件名,不能为中文,中文请自行编码ServletOutputStream out = null;try {String fileName = URLEncoder.encode("用户信息.xlsx", "UTF-8");response.setHeader("Content-Disposition", "attachment;filename=" + fileName);out = response.getOutputStream();writer.flush(out, true);} catch (IOException e) {logger.error("用户信息导出异常", e);} finally {// 关闭writer,释放内存writer.close();}//此处记得关闭输出Servlet流IoUtil.close(out);}
}

3.3、service层

package com.example.demo.service;import com.example.demo.model.User;import java.util.List;/*** @author LL* @description : 用户管理* @date 2021/02/25 15:54*/
public interface UserService {/*** 导出用户信息* @param id 用户信息id*/List<User> exportUser(Integer id);
}
package com.example.demo.service;import com.example.demo.dao.UserMapper;
import com.example.demo.model.User;
import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Service;import java.util.List;/*** @author LL* @description :* @date 2021/02/25 16:11*/@Service
@RequiredArgsConstructor
public class UserServiceImpl implements UserService {private final UserMapper userMapper;@Overridepublic List<User> exportUser(Integer id) {userMapper.exportUser(id);}
}

3.4、dao层

package com.example.demo.dao;import com.example.demo.model.User;import java.util.List;/*** @author LL* @description : 用户管理* @date 2021/02/25 16:13*/
public interface UserMapper {/*** 导出用户信息** @param id 用户信息id*/List<User> exportUser(Integer id);
}
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.example.demo.dao.UserMapper"><sql id="TableName">tbl_user</sql><select id="exportUser">SELECT*FROMtbl_userWHEREid = #{id}</select></mapper>

提示(since 4.1.5)
默认情况下Excel中写出Bean字段不能保证顺序,此时可以使用addHeaderAlias方法设置标题别名,Bean的写出顺序就会按照标题别名的加入顺序排序。
如果不需要设置标题但是想要排序字段,请调用writer.addHeaderAlias(“age”,
“age”)设置一个相同的别名就可以不更换标题。 未设置标题别名的字段不参与排序,会默认排在前面。

三、原理

Hutool将Excel写出封装为ExcelWriter,原理为包装了Workbook对象,每次调用merge(合并单元格)或者write(写出数据)方法后只是将数据写入到Workbook,并不写出文件,只有调用flush或者close方法后才会真正写出文件。

由于机制原因,在写出结束后需要关闭ExcelWriter对象,调用close方法即可关闭,此时才会释放Workbook对象资源,否则带有数据的Workbook一直会常驻内存。

如遇到问题,欢迎留言,我会及时回复!

Hutool Java 工具类库Excel导出,配置宽度自适应极度舒适相关推荐

  1. Hutool Java 工具类库Excel导入,很方便!

    文章目录 前言 一.Hutool是什么? 二.使用步骤 1.引入maven依赖 2.Excel导入 总结 前言 一.Hutool是什么? Hutool是一个小而全的Java工具类库,通过静态方法封装, ...

  2. hutool 自定义excel_使用Hutool Java工具类库 导出Excel 超级简单

    在项目中,导出文件有时是必不可学少的需求:刚开始时,使用POI进行实现文件的导入导出功能:但是代码很多,对刚入手的小白来说,并不算友好:所以今天介绍一个Java工具类库----Hutool: HuTo ...

  3. Hutool Java 工具类库导出 Excel,超级简单!

    前言 在开发应用系统的时候,导出文件是必不可放的功能. 以前用过POI.easyexcel等工具的导入导出功能,但总感觉太麻烦了,代码特别多,感觉并不是很好用. 今天给大家介绍一款新工具,java工具 ...

  4. hutool 自定义excel_Hutool Java 工具类库导出 Excel,超级简单!

    前言 在开发应用系统的时候,导出文件是必不可放的功能. 以前用过POI.easyexcel等工具的导入导出功能,但总感觉太麻烦了,代码特别多,感觉并不是很好用. 今天给大家介绍一款新工具,java工具 ...

  5. java导出excel_Hutool Java 工具类库导出 Excel,超级简单!

    前言 使用 <Java 2019 超神之路> <Dubbo 实现原理与源码解析 -- 精品合集> <Spring 实现原理与源码解析 -- 精品合集> <My ...

  6. excel导入导出工具类_Hutool Java工具类库导出Excel,超级简单

    前言 在开发应用系统的时候,导出文件是必不可少的功能. 以前用过POI.easyexcel等工具的导入导出功能,但总感觉太麻烦了,代码特别多,感觉并不是很好用. 今天给大家介绍一款新工具,java工具 ...

  7. Hutool是一个小而全的Java工具类库

    1.Hutool简介 Hutool 是一个小而全的 Java 工具类库,通过静态方法封装,降低相关API的学习成本,提高工作效率,使 Java 拥有函数式语言般的优雅,让 Java 语言也可以&quo ...

  8. 推荐一个好用的 Java 工具类库

    点击上方蓝色"程序猿DD",选择"设为星标" 回复"资源"获取独家整理的学习资料! 最近博主看到了一款小而全的 Java 工具类库:Huto ...

  9. 一款牛逼的Java工具类库,GitHub星标10.7k+,你敢用吗?

    点击"开发者技术前线",选择"星标????" 让一部分开发者看到未来 来自:Ryan Wang 链接:ryanc.cc/archives/hutool-java ...

最新文章

  1. Unity2017.1官方UGUI文档翻译——Scrollbar
  2. Intellij idea workflow 工作流插件安装
  3. Linux ln指令
  4. 使用ToolRunner运行Hadoop作业的原理及用法
  5. 使用Eclipse在Amazon Ec2中部署Java Web应用程序的完整指南
  6. 【OpenCV 例程200篇】08. 图像的复制(np.copy)
  7. Visual Studio 2012 简体中文 旗舰正式版 ISO 下载
  8. ExtJs与jQuery的比较
  9. 深受企业青睐的华为云
  10. JS match() 方法 使用
  11. 腾讯云轻量应用服务器云硬盘服务简单性能测试
  12. 固态硬盘是什么接口_今天说事儿—固态硬盘接口,防你入坑
  13. 京东11.11:商品搜索系统架构设计解密
  14. 客户端GUI测试技术和自动化测试架构设计简谈
  15. osgEarth示例分析——osgearth_los
  16. 电商服务器性能测试,如何测试分析电商网站的性能瓶颈(一)
  17. qt 设置背景图片、背景色步骤
  18. listen函数详解
  19. 【WEB安全】PHP靶场实战分析——DVWA
  20. 《Clean Code》读书笔记-1

热门文章

  1. Cadence LDO capless 电路,包括版图,已通过lvs ,drc检查,个人流片过,包括偏置全电路
  2. 《图解密码技术》笔记2:历史上的密码-写一篇别人看不懂的文章
  3. 寻找250(非数组求法)
  4. 用计算机怎么打出X,电脑键盘x号怎么打出来
  5. 【vscode】常用快捷键
  6. pygame战棋游戏制作之战棋光标设置上(三)
  7. win7笔记本网络连接图标一直转圈但可上网
  8. 2014腾讯校招面试之二总结
  9. 配置hadoop时,Linux主机名称不要带有下划线
  10. solaris启动过程详解