位置: IT常识 - 正文

Java Hutool 包工具类推荐 ExcelUtil(javatoolkit详解)

编辑:rootadmin
Java Hutool 包工具类推荐 ExcelUtil 包引入 hutool包版本号可根据实际情况更换 <dependency> <groupId>cn.hutool</groupId> <artifactId>hutool-all</artifactId> <version>5.8.4.M1</ ... Java Hutool 包工具类推荐 ExcelUtil包引入

hutool包版本号可根据实际情况更换

<dependency> <groupId>cn.hutool</groupId> <artifactId>hutool-all</artifactId> <version>5.8.4.M1</version></dependency>

除hutool包之外,还需要引入操作Excel必要包

<dependency> <groupId>org.apache.poi</groupId> <artifactId>poi-ooxml</artifactId> <version>5.0.0</version></dependency><dependency> <groupId>org.apache.poi</groupId> <artifactId>poi-ooxml-full</artifactId> <version>5.0.0</version></dependency>一般简单表头Excel封装工具类

直接上代码

package io.supers.common.utils;import cn.hutool.core.io.IoUtil;import cn.hutool.core.util.URLUtil;import cn.hutool.poi.excel.ExcelUtil;import cn.hutool.poi.excel.ExcelWriter;import cn.hutool.poi.excel.style.StyleUtil;import io.supers.framework.em.BaseErrorEnum;import io.supers.framework.exception.RRException;import org.apache.commons.collections.CollectionUtils;import org.apache.poi.ss.usermodel.CellStyle;import org.apache.poi.ss.usermodel.DataFormat;import org.apache.poi.ss.usermodel.HorizontalAlignment;import org.apache.poi.ss.usermodel.Workbook;import org.springframework.web.multipart.MultipartFile;import javax.servlet.ServletOutputStream;import javax.servlet.http.HttpServletResponse;import java.io.IOException;import java.util.List;import java.util.Map;/** * Excel 工具类 * * @author guoc * @date 2022年05月31日 下午 17:21 */public class ExcelUtils { /** * 下载 Excel 模板 (只有表头的 Excel) * * @param response response * @param headers 表头 * @param fileName 文件名 */ public static void exportHeaders(HttpServletResponse response, List<String> headers, String fileName) { export(response, null, headers, fileName); } /** * 导出或下载 Excel 公用方法 * * @param response 当前请求的 HttpServletResponse * @param rows 需要写入的数据 List * @param fileName 最终文件名 */ public static void export(HttpServletResponse response, List<Map<String, Object>> rows, List<String> headers, String fileName) { // 获取 Writer ExcelWriter writer = ExcelUtil.getWriter(true); // 写入表头 writer = writer.writeHeadRow(headers); // 若是有数据 则写入数据 if (CollectionUtils.isNotEmpty(rows)) { writer.write(rows); } Workbook workbook = writer.getWorkbook(); CellStyle defaultCellStyle = StyleUtil.createDefaultCellStyle(workbook); DataFormat format = writer.getWorkbook().createDataFormat(); // 默认为 文本格式 defaultCellStyle.setDataFormat(format.getFormat("@")); // 默认为 居中 defaultCellStyle.setAlignment(HorizontalAlignment.CENTER); for (int i = 0; i < headers.size(); i++) { String h = headers.get(i); h = h == null ? " " : h; writer.setColumnStyle(i, defaultCellStyle); // 默认宽度为 3 * 表头字符数 writer.setColumnWidth(i, 3 * h.length()); } try { // 弹出下载对话框的文件名,不能为中文,中文请自行编码 fileName = URLUtil.encode(fileName); response.setHeader("Access-Control-Expose-Headers", "Content-Disposition"); response.setHeader("Content-Disposition", "attachment;filename=" + fileName + ".xlsx"); response.setContentType(ExcelUtil.XLSX_CONTENT_TYPE); // 输出 ServletOutputStream out = response.getOutputStream(); writer.flush(out, true); // 关闭writer,释放内存 writer.close(); //此处记得关闭输出Servlet流 IoUtil.close(out); } catch (IOException e) { e.printStackTrace(); throw new RRException(BaseErrorEnum.COMMON_ERROR, "下载文件失败!\n" + e.getMessage()); } } /** * 读取上传到后台的excel * * @param file MultipartFile 上传的文件 * @return 数据列表 * @throws IOException e */ public static List<Map<String, Object>> readExcelRows(MultipartFile file) throws IOException { return ExcelUtil.getReader(file.getInputStream()).readAll(); }}

工具类封装了三个方法, 只写入表头方法, 写入表头和数据方法 和 读取表格数据列表方法。

三个方法的操作简单,看代码就能明白,不多赘述了。

复杂表头或表格内合并单元格写入

合并单元格核心方法

// cn.hutool.poi.excel.ExcelWriter#merge(int, int, int, int, java.lang.Object, boolean)/** * 合并某行的单元格,并写入对象到单元格<br> * 如果写到单元格中的内容非null,行号自动+1,否则当前行号不变<br> * 样式为默认标题样式,可使用{@link #getHeadCellStyle()}方法调用后自定义默认样式 * * @param firstRow 起始行,0开始 * @param lastRow 结束行,0开始 * @param firstColumn 起始列,0开始 * @param lastColumn 结束列,0开始 * @param content 合并单元格后的内容 * @param isSetHeaderStyle 是否为合并后的单元格设置默认标题样式,只提取边框样式 * @return this * @since 4.0.10 */ public ExcelWriter merge(int firstRow, int lastRow, int firstColumn, int lastColumn, Object content, boolean isSetHeaderStyle) {Assert.isFalse(this.isClosed, "ExcelWriter has been closed!");CellStyle style = null;if (null != this.styleSet) {style = styleSet.getStyleByValueType(content, isSetHeaderStyle);}return merge(firstRow, lastRow, firstColumn, lastColumn, content, style);}

看完一般表头写入的代码,可以得知,此工具类写入表头时只需传入表头的字符串列表,即 List<String>,若是遇到动态表头时,则可以通过遍历的操作,先生成出导出数据中所有需要的表头信息,即可为下一步的写入数据的数据列表List<Map<String,Object>> 做准备了。

若是遇到某列或某些列中有合并单元格的,一般都有规律的,可以遍历数据时根据合并的数据项内容通过合并单元格方法进行合并单元格操作。

总结

通过以上方法,可以处理绝大多数情况的导出写入和基本所有的导入读取(导入时的模板尽量规定为简单表头)。

写入写出数据基本上都使用的是Map<String,Object>,若是要转成JavaBean,自行写方法对应即可。

本文链接地址:https://www.jiuchutong.com/zhishi/312925.html 转载请保留说明!

上一篇:帝国CMS首页调用内容页下载地址的方法(帝国cms首页调用显示标题图片代码)

下一篇:dedecms织梦系统防黑仿攻击的目录安全设置方法(织梦系统基本参数)

  • h5网页设计源代码案例分析,即实力证明。当你想展现自己的优势时,一定要有场景作为支撑

    h5网页设计源代码案例分析,即实力证明。当你想展现自己的优势时,一定要有场景作为支撑

  • 怎样充分的利用自媒体平台做矩阵推广(怎样充分利用课余时间)

    怎样充分的利用自媒体平台做矩阵推广(怎样充分利用课余时间)

  • excel太宽了怎么转pdf(excel太宽了怎么转一页pdf)

    excel太宽了怎么转pdf(excel太宽了怎么转一页pdf)

  • 苹果11ios13.6更新方法是什么(苹果11更新13.7)

    苹果11ios13.6更新方法是什么(苹果11更新13.7)

  • 为什么微信群聊不显示(为什么微信群聊名称改不了)

    为什么微信群聊不显示(为什么微信群聊名称改不了)

  • 抖音关注置顶怎么弄(抖音关注置顶怎么取消掉)

    抖音关注置顶怎么弄(抖音关注置顶怎么取消掉)

  • 淘宝红包没领取会自动退回吗(淘宝红包没领取会退回吗)

    淘宝红包没领取会自动退回吗(淘宝红包没领取会退回吗)

  • 重复文件可以删除吗(重复文件可以删除吗电脑)

    重复文件可以删除吗(重复文件可以删除吗电脑)

  • 无法解析服务器域名(无法解析服务器的名称或地址是怎么回事)

    无法解析服务器域名(无法解析服务器的名称或地址是怎么回事)

  • 移动硬盘2tb是多大容量(移动硬盘2tb多少钱)

    移动硬盘2tb是多大容量(移动硬盘2tb多少钱)

  • 苹果7plus有3dtouch功能吗(苹果7plus有volte功能吗)

    苹果7plus有3dtouch功能吗(苹果7plus有volte功能吗)

  • qq音乐hq和sq区别(qq音乐sq和hq有什么区别)

    qq音乐hq和sq区别(qq音乐sq和hq有什么区别)

  • word怎么画多条横线(word怎么画角度线)

    word怎么画多条横线(word怎么画角度线)

  • realme Q怎么通话录音(realme怎么调通话音量)

    realme Q怎么通话录音(realme怎么调通话音量)

  • 苹果xs支持多少瓦无线充(苹果xs支持多少瓦)

    苹果xs支持多少瓦无线充(苹果xs支持多少瓦)

  • vivo的桌面小插件在哪(vivo手机桌面小插件怎么弄出来)

    vivo的桌面小插件在哪(vivo手机桌面小插件怎么弄出来)

  • wps如何合并两个文档(wps如何合并两个word文档)

    wps如何合并两个文档(wps如何合并两个word文档)

  • wps里怎么查找内容(wps怎么查找内容全部导出)

    wps里怎么查找内容(wps怎么查找内容全部导出)

  • 物联卡实名后怎么注销(物联卡实名怎么实名)

    物联卡实名后怎么注销(物联卡实名怎么实名)

  • 10代处理器上市时间(10代处理器排行榜)

    10代处理器上市时间(10代处理器排行榜)

  • 苹果手机的彩蛋在哪里(苹果手机彩蛋有什么)

    苹果手机的彩蛋在哪里(苹果手机彩蛋有什么)

  • 5g上市是换手机还是换手机卡呢(5g出来是不是有要换手机)

    5g上市是换手机还是换手机卡呢(5g出来是不是有要换手机)

  • 文本轮廓在哪设置(文本轮廓为实线怎么设置)

    文本轮廓在哪设置(文本轮廓为实线怎么设置)

  • 抖音如何看别人的位置(抖音如何看别人的直播回放)

    抖音如何看别人的位置(抖音如何看别人的直播回放)

  • chmod命令  改变文件或目录权限(chmod命令用于更改文件或目录的所有者)

    chmod命令 改变文件或目录权限(chmod命令用于更改文件或目录的所有者)

  • dpkg-query命令  在dpkg数据库中查询软件包(dpkg-configure-a)

    dpkg-query命令 在dpkg数据库中查询软件包(dpkg-configure-a)

  • 未核销fyc
  • 房开企业涉及哪些税种
  • 开立一般户需要基本户开户行许可证吗
  • 个人所得税如果两份工作怎么扣
  • 小规模纳税人水电费税率
  • 境内企业向境外放款额度最长放款期限为两年
  • 没有ca证书怎么连接wifi加密设备
  • 电梯提供安装的增值税税率最新的
  • 核定征收个体户个人经营所得税
  • 材料检测费怎么计算
  • 抬头是别的公司怎么报销
  • 自产产品对外捐赠需要缴纳增值税吗
  • 目前建筑里面税金总共包括几部分
  • 不动产有法律效力吗
  • 如何辩别这样发票的真伪?
  • 如何判断境内企业所得税
  • 广告服务差额征税
  • 汇总会计报表和合并会计报表均是
  • 工会会费可以一年交两个单位吗
  • 发票冲红可以冲红数量不变金额减少
  • 收取赔偿金开具什么发票
  • 预付办公用品费用,未收到发票
  • WordPress置顶文章的相关PHP函数小结
  • 出租房屋收取的水电费的税率
  • PHP:mb_list_encodings()的用法_mbstring函数
  • 自产产品用于业务招待 如何申报企业所得税
  • 进价金额核算法的账务处理特点
  • win10平板模式怎么显示桌面
  • oracle win10
  • 营改增预收款确认收入
  • 执行企业会计制度的企业有哪些
  • 员工宿舍装宽带
  • 中药饮片适用增值税税率
  • 没有关系怎么表达
  • 前端vue面试题
  • 销售提成占比
  • mkfifo命令
  • 现代c++教程
  • 机票退票手续费新规定2023
  • 核销对哪些单据对应关系进行的操作
  • 小规模自开专票办理流程
  • 施工图审查费属于什么费用类别
  • FreeBSD安装xfce4: 鼠标不能用
  • 赠送给客户的礼品税法
  • 开收据是财务还是出纳
  • 家具厂成本
  • 宿舍宽带费用
  • 公司出售二手车要交哪些税
  • 固定资产汽车折旧年限是多少年
  • 上市公司股票增发条件
  • 电脑更换显示器需要重装驱动吗
  • 待抵扣进项税额和进项税额的区别
  • 债务利息收入
  • 收到知识产权服务费入什么科目
  • 新单位建账怎么做
  • 房地产开发企业销售自行开发的房地产项目
  • 建筑企业其他业务收入范围
  • 详谈是什么意思
  • freebsd安装手动分区
  • vmwarevmx进程是干嘛的
  • xp系统镜像文件怎么制作
  • linux动态链接库怎么调用
  • 怎样让xp系统变得更加流畅
  • 笔记本用linux系统
  • cmd命令符大全
  • win8系统截图工具快捷键
  • 简述opengl的编程步骤
  • android 滚动选择器
  • cocos2dx怎么用
  • dos批命令
  • python入门后学什么
  • 实用的批处理
  • unity怎么设置多个关卡
  • node搭建项目
  • jquery验证邮箱格式
  • 关于Colloder事件
  • jquery使用教程
  • js中写html代码
  • javascript ref
  • 消费税的税收筹划ppt
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

    网站地图: 企业信息 工商信息 财税知识 网络常识 编程技术

    友情链接: 武汉网站建设