Hutool Java 工具类库Excel导出,配置宽度自适应极度舒适
文章目录
- 前言
- 一、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导出,配置宽度自适应极度舒适相关推荐
- Hutool Java 工具类库Excel导入,很方便!
文章目录 前言 一.Hutool是什么? 二.使用步骤 1.引入maven依赖 2.Excel导入 总结 前言 一.Hutool是什么? Hutool是一个小而全的Java工具类库,通过静态方法封装, ...
- hutool 自定义excel_使用Hutool Java工具类库 导出Excel 超级简单
在项目中,导出文件有时是必不可学少的需求:刚开始时,使用POI进行实现文件的导入导出功能:但是代码很多,对刚入手的小白来说,并不算友好:所以今天介绍一个Java工具类库----Hutool: HuTo ...
- Hutool Java 工具类库导出 Excel,超级简单!
前言 在开发应用系统的时候,导出文件是必不可放的功能. 以前用过POI.easyexcel等工具的导入导出功能,但总感觉太麻烦了,代码特别多,感觉并不是很好用. 今天给大家介绍一款新工具,java工具 ...
- hutool 自定义excel_Hutool Java 工具类库导出 Excel,超级简单!
前言 在开发应用系统的时候,导出文件是必不可放的功能. 以前用过POI.easyexcel等工具的导入导出功能,但总感觉太麻烦了,代码特别多,感觉并不是很好用. 今天给大家介绍一款新工具,java工具 ...
- java导出excel_Hutool Java 工具类库导出 Excel,超级简单!
前言 使用 <Java 2019 超神之路> <Dubbo 实现原理与源码解析 -- 精品合集> <Spring 实现原理与源码解析 -- 精品合集> <My ...
- excel导入导出工具类_Hutool Java工具类库导出Excel,超级简单
前言 在开发应用系统的时候,导出文件是必不可少的功能. 以前用过POI.easyexcel等工具的导入导出功能,但总感觉太麻烦了,代码特别多,感觉并不是很好用. 今天给大家介绍一款新工具,java工具 ...
- Hutool是一个小而全的Java工具类库
1.Hutool简介 Hutool 是一个小而全的 Java 工具类库,通过静态方法封装,降低相关API的学习成本,提高工作效率,使 Java 拥有函数式语言般的优雅,让 Java 语言也可以&quo ...
- 推荐一个好用的 Java 工具类库
点击上方蓝色"程序猿DD",选择"设为星标" 回复"资源"获取独家整理的学习资料! 最近博主看到了一款小而全的 Java 工具类库:Huto ...
- 一款牛逼的Java工具类库,GitHub星标10.7k+,你敢用吗?
点击"开发者技术前线",选择"星标????" 让一部分开发者看到未来 来自:Ryan Wang 链接:ryanc.cc/archives/hutool-java ...
最新文章
- Unity2017.1官方UGUI文档翻译——Scrollbar
- Intellij idea workflow 工作流插件安装
- Linux ln指令
- 使用ToolRunner运行Hadoop作业的原理及用法
- 使用Eclipse在Amazon Ec2中部署Java Web应用程序的完整指南
- 【OpenCV 例程200篇】08. 图像的复制(np.copy)
- Visual Studio 2012 简体中文 旗舰正式版 ISO 下载
- ExtJs与jQuery的比较
- 深受企业青睐的华为云
- JS match() 方法 使用
- 腾讯云轻量应用服务器云硬盘服务简单性能测试
- 固态硬盘是什么接口_今天说事儿—固态硬盘接口,防你入坑
- 京东11.11:商品搜索系统架构设计解密
- 客户端GUI测试技术和自动化测试架构设计简谈
- osgEarth示例分析——osgearth_los
- 电商服务器性能测试,如何测试分析电商网站的性能瓶颈(一)
- qt 设置背景图片、背景色步骤
- listen函数详解
- 【WEB安全】PHP靶场实战分析——DVWA
- 《Clean Code》读书笔记-1