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

  • 6招推广技巧帮您提升企业销售量(做推广的方法)

    6招推广技巧帮您提升企业销售量(做推广的方法)

  • b站可以下载视频到本地吗(B站可以下载视频吗)

    b站可以下载视频到本地吗(B站可以下载视频吗)

  • 荣耀20pro手机智慧生活有什么用(荣耀20pro智慧助手怎么关闭)

    荣耀20pro手机智慧生活有什么用(荣耀20pro智慧助手怎么关闭)

  • 怎么提前预约滴滴打车(滴滴预约车怎么提前预约)

    怎么提前预约滴滴打车(滴滴预约车怎么提前预约)

  • 京东小程序不支持购买商品(京东小程序不支持购买是什么原因)

    京东小程序不支持购买商品(京东小程序不支持购买是什么原因)

  • 三星音乐播放器不见了(三星音乐播放器app下载)

    三星音乐播放器不见了(三星音乐播放器app下载)

  • kindle可以看漫画吗(kindle上能看漫画吗)

    kindle可以看漫画吗(kindle上能看漫画吗)

  • 苹果x可以升级13.4.1吗(苹果X可以升级16系统吗)

    苹果x可以升级13.4.1吗(苹果X可以升级16系统吗)

  • 无线耳机丢了一只怎么办(无线耳机丢了还能找到吗)

    无线耳机丢了一只怎么办(无线耳机丢了还能找到吗)

  • 视频点赞有什么用(视频点赞有什么风险)

    视频点赞有什么用(视频点赞有什么风险)

  • ipad可以用airpods吗(ipad可以用airpods充电器吗)

    ipad可以用airpods吗(ipad可以用airpods充电器吗)

  • 只登qq空间有记录吗(qq空间登陆记录会在手机qq显示吗)

    只登qq空间有记录吗(qq空间登陆记录会在手机qq显示吗)

  • 苹果sn是什么意思(苹果sn就是序列号吗)

    苹果sn是什么意思(苹果sn就是序列号吗)

  • 小米mi5x是不是全网通(小米mi5x和5x有什么区别)

    小米mi5x是不是全网通(小米mi5x和5x有什么区别)

  • 微博怎么上传抖音视频(微博怎么上传抖音作品)

    微博怎么上传抖音视频(微博怎么上传抖音作品)

  • 自己淘宝二维码在哪(自己淘宝二维码在哪里)

    自己淘宝二维码在哪(自己淘宝二维码在哪里)

  • 流量1x什么意思(流量是1x怎么办)

    流量1x什么意思(流量是1x怎么办)

  • 华为三包能免费换屏吗(华为三包包多久)

    华为三包能免费换屏吗(华为三包包多久)

  • pd快充什么接口(pd快充什么接口最好)

    pd快充什么接口(pd快充什么接口最好)

  • 苹果芯片a12a11区别(苹果芯片a11和a12有什么区别)

    苹果芯片a12a11区别(苹果芯片a11和a12有什么区别)

  • 小米cc9可以用内存卡吗(小米cc9能放内存卡吗)

    小米cc9可以用内存卡吗(小米cc9能放内存卡吗)

  • 闲鱼可以租房吗(咸鱼能出租房子吗)

    闲鱼可以租房吗(咸鱼能出租房子吗)

  • 苹果手机xr能无线充电吗(苹果xr手机可以无线充电吗?)

    苹果手机xr能无线充电吗(苹果xr手机可以无线充电吗?)

  • 微信一天能删除多少人(微信一天能删除多少群聊)

    微信一天能删除多少人(微信一天能删除多少群聊)

  • Linux系统已经融入了我们的生活!论Linux系统的重要性(linux系统已经得到了广泛的应用)

    Linux系统已经融入了我们的生活!论Linux系统的重要性(linux系统已经得到了广泛的应用)

  • ipstat命令  实时显示 Linux 内核中 iptables 的工作状态(ips attack)

    ipstat命令 实时显示 Linux 内核中 iptables 的工作状态(ips attack)

  • 收到商业承兑汇票到期付款通知单,据此登记相关账簿
  • 员工为公司垫付款项
  • 消防工程改造怎么做账务处理
  • 未开票收入次月如何申报增值税
  • 原始凭证分割单样本
  • 单位购牙膏牙刷卫生纸怎么做账
  • 非房产企业出售不动产需要缴纳增值税吗
  • 其他现代服务业能开哪些税目
  • 回单一定要在开户行打吗
  • 委托外单位加工发出的材料分录
  • 个人生产经营所得税税率表
  • 实收资本印花税税率多少
  • 退租未摊销的装修费会计分录怎么写
  • 冲减预提费用
  • 国税地税企业所得税划分
  • 小规模企业税务筹划
  • 开票商品税收分录怎么写
  • 公司的净资产怎么看
  • 购买方申请的红字信息表需要邮寄给销售方吗
  • 会计相关行业的工作职责和招聘要求
  • 固定资产清理需要结转吗
  • 提现属于支出吗
  • 企业押金怎么管理
  • 增值税专用发票的税率是多少啊
  • 电脑怎么搜索文档
  • 总公司中标分公司签约
  • 工会经费会计分局
  • 住房公积金如何使用
  • 商业承兑汇票提示承兑期限
  • 21年最新cpu
  • linux命令行怎么用
  • 工伤单位支付
  • html中display none
  • 其他收益如何核算成本
  • 收到的国家电网电话
  • yolo行人检测
  • 股票溢价发行会亏本吗
  • 主营业务收入月末需要结转吗
  • AIGC之GPT-4:GPT-4的简介(核心原理/意义/亮点/技术点/缺点/使用建议)、使用方法、案例应用(计算能力/代码能力/看图能力等)之详细攻略
  • 微信小程序获取手机号失败
  • 转账不同银行同城转账手续费多少
  • 长期待摊费用是资产
  • python搞自动化
  • 小规模个体户国税怎么算
  • 企业贷款贴息怎么做账
  • 小程序集合软件
  • SQL Server 2016 CTP2.2安装配置方法图文教程
  • sql中聚合函数的用法
  • 如何在Access中设置有效性规则必须大于等于0
  • 期初余额调整怎么做凭证
  • 补贴费用申请书怎么写
  • 税控系统专用设备抵减增值税账务处理
  • 如何理解会计中的借贷? 知乎
  • 贷款指标是什么意思
  • 银行结算卡年费多少
  • 赠送给客户的商品怎么做会计分录
  • 库存商品记账
  • sql server2012操作步骤
  • mysql8 jdbc连接
  • 磁盘缓存技术
  • 电脑操作系统win7
  • freebsd使用手册
  • 苹果mac安装
  • 电脑无法检测到麦克风怎么办
  • 用xp系统打造
  • mac 照片导入项目没反应
  • 电脑出现win 7 界面 然后就不动了
  • win8 系统设置
  • win7系统通过wmic命令
  • jQuery的extend方法【三种】
  • 关于中国天气的新闻报道
  • 基于JAVASCRIPT实现的可视化工具是
  • three. js
  • The method setClass(Context, Class<?>) in the type Intent is not applicable for the问题
  • JavaScript的函数定义
  • 教你学python
  • 湖北税务查询电话
  • 国家税务总局核定的该车最低计税价格
  • 武汉税务局发票对奖
  • 北京买新车购置税怎么算
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

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

    友情链接: 武汉网站建设