位置: 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织梦系统防黑仿攻击的目录安全设置方法(织梦系统基本参数)

  • 7-zip怎么压缩文件(7-zip怎么压缩文件为什么还这么大)

    7-zip怎么压缩文件(7-zip怎么压缩文件为什么还这么大)

  • soul会员有什么用(soul会员有什么功能)

    soul会员有什么用(soul会员有什么功能)

  • 为什么探探有消息就是看不到(为什么探探消息没有了)

    为什么探探有消息就是看不到(为什么探探消息没有了)

  • 店铺浏览量是什么意思(店铺浏览量和商品浏览量的区别)

    店铺浏览量是什么意思(店铺浏览量和商品浏览量的区别)

  • 连接失败请检查你的网络设置是什么意思(连接失败请检查sql server注册属性)

    连接失败请检查你的网络设置是什么意思(连接失败请检查sql server注册属性)

  • oppoa92s支持快充吗(oppoa92s是不是快充)

    oppoa92s支持快充吗(oppoa92s是不是快充)

  • 重装系统后软件如何恢复原状(重装系统后软件打不开)

    重装系统后软件如何恢复原状(重装系统后软件打不开)

  • 新注册微信身份证无法实名(新注册微信验证身份)

    新注册微信身份证无法实名(新注册微信验证身份)

  • 怎么弄成pdf格式(微信图片怎么弄成pdf格式)

    怎么弄成pdf格式(微信图片怎么弄成pdf格式)

  • 如何添加脚注横线(如何添加脚注横线上的字)

    如何添加脚注横线(如何添加脚注横线上的字)

  • 抖音限关是什么意思(抖音限关是怎么回事)

    抖音限关是什么意思(抖音限关是怎么回事)

  • 用两个手机的必要性(用二个手机的人)

    用两个手机的必要性(用二个手机的人)

  • 华为mate30怎么下载软件(华为mate30怎么下载谷歌)

    华为mate30怎么下载软件(华为mate30怎么下载谷歌)

  • ipad6代和ipad7有啥区别(ipad6和7买哪个)

    ipad6代和ipad7有啥区别(ipad6和7买哪个)

  • 苹果信息有个感叹号什么意思(苹果信息有个感叹号在闪)

    苹果信息有个感叹号什么意思(苹果信息有个感叹号在闪)

  • 小鱼便签怎么彻底删除(小鱼便签如何删除)

    小鱼便签怎么彻底删除(小鱼便签如何删除)

  • 华为新系统鸿蒙什么时候出(华为新系统鸿蒙和安卓有什么区别)

    华为新系统鸿蒙什么时候出(华为新系统鸿蒙和安卓有什么区别)

  • 华为clt一al00什么型号(华为clt一al00手机)

    华为clt一al00什么型号(华为clt一al00手机)

  • 抖音橱窗收费标准(抖音橱窗收费标准最新)

    抖音橱窗收费标准(抖音橱窗收费标准最新)

  • 如何在头像上加上国旗(怎么在头像加字)

    如何在头像上加上国旗(怎么在头像加字)

  • 抖音尬舞机在哪里打开(尬舞机怎么找不到了)

    抖音尬舞机在哪里打开(尬舞机怎么找不到了)

  • 华为nova4e和nova5i对比(华为nova4e和nova5i哪个音质好点)

    华为nova4e和nova5i对比(华为nova4e和nova5i哪个音质好点)

  • QQ音乐绿钻怎么取消业务(qq音乐绿钻怎么升级等级)

    QQ音乐绿钻怎么取消业务(qq音乐绿钻怎么升级等级)

  • 【MySQL】表的数据处理(mysql表中数据)

    【MySQL】表的数据处理(mysql表中数据)

  • as命令  汇编语言编译器(汇编语言a命令怎么用)

    as命令 汇编语言编译器(汇编语言a命令怎么用)

  • Monaco-editor的JSONSchema配置及使用介绍

    Monaco-editor的JSONSchema配置及使用介绍

  • 会计核算职能有哪些特征
  • 以前年度损益调整在利润表中怎么填
  • 收取商标权使用费分录
  • 经营范围变更银行不变更有影响吗
  • 银行账户利息怎么记账
  • 机动车检测公司上班时间
  • 企业所得税完税凭证在哪里打印
  • 商场收取租户电费怎么处理税收?
  • 机关和事业单位哪个好
  • 税法上的营业收入与会计差异
  • 加油站销售加油卡是否征收增值税
  • 营改增后接受实物投资是否需要缴纳增值税?
  • 增值税发票没有地址和开户行有效吗
  • 公司进货可以计提折旧吗
  • 企业交的社保是什么
  • 新成立的公司怎么交公积金
  • 天然气的销售需要什么资质
  • 认缴制下股权转让如何不交税
  • 财税2018 39号文件
  • 资产处置损益在企业所得税汇算时如何填列
  • 普通发票需要什么
  • 取得甲供材料按简易征收发票能抵扣吗
  • 本月无票收入到下月开具如何申报
  • 税务机构
  • 主营业务收入需要交增值税吗
  • 公司室内装修
  • 技术服务费增值税可以抵扣吗
  • 局域网内如何设置静态ip
  • 保险费做什么会计分录
  • vim diff对比
  • s3tray2.exe - s3tray2是什么进程 有什么用
  • 一次摊销法优缺点
  • wordpress介绍
  • 资本公积和盈余公积的提取比例
  • npp怎么安装
  • 哪些货物出口不需要运输条件
  • 回迁安置房是否有产权
  • sass转化为css
  • 36号文45条
  • php微信公众号消息推送
  • 微信小程序完整授权
  • 发票验证校验码为什么只能填6位
  • 费用报销审批单和费用报销单区别
  • 债务豁免涉税
  • sql server2012使用方法
  • 会计政策变更追溯调整的年限
  • sql死锁的简单例子
  • 企业经营的利润目标长期化
  • 发行股票支付给证券商的费用计入哪
  • 城建税减半从什么时候开始
  • 上期有留抵进项税额,本期如何申报
  • 个人转租房需要注意什么
  • 上年度记错科目怎么调整
  • 建筑工程审计流程
  • 单位买的职工社保自己可以去社保局领卡吗
  • 费用误计入固定资产
  • 在建工程前期费用明细
  • 协定存款是什么存款
  • 投资收益的主要来源有
  • 小规模发票跨月冲红税款可以退回吗
  • 保险公司理赔时会查多久的病史
  • Slave memory leak and trigger oom-killer
  • win10的安装目录在哪
  • 神墓凌云
  • win102021年1月大更新
  • win7控制面板有哪些功能
  • linux怎样使用命令
  • fdisk硬盘分区工具
  • 在linux操作系统中把外部设备当作文件统一管理
  • win10能运行的单机游戏
  • jsp分页显示
  • eclipse awt
  • express常用中间件
  • javascriptj
  • javascript面向对象 第三方类库
  • python如何入门
  • 福建闽江人才服务中心可靠吗
  • 内蒙古国税局官网
  • 山东地税局网上办税平台
  • 食品烟酒消费包括哪些
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

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

    友情链接: 武汉网站建设