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

  • 容易被忽略的淘宝店推广方法--淘宝活动(容易被忽略的淘宝名字)

    容易被忽略的淘宝店推广方法--淘宝活动(容易被忽略的淘宝名字)

  • 什么是超前点播(什么是超前点播剧)

    什么是超前点播(什么是超前点播剧)

  • vivonex后置像素多少(vivox21后置像素)

    vivonex后置像素多少(vivox21后置像素)

  • launchpad在苹果电脑里是什么意思(launchpad 在哪)

    launchpad在苹果电脑里是什么意思(launchpad 在哪)

  • 笔记本不支持5gwifi怎么办(笔记本不支持5G是不是网速浪费了)

    笔记本不支持5gwifi怎么办(笔记本不支持5G是不是网速浪费了)

  • 苹果11短信显示英文(苹果11短信显示时间怎么设置)

    苹果11短信显示英文(苹果11短信显示时间怎么设置)

  • 更新驱动有什么作用(更新驱动有什么坏处)

    更新驱动有什么作用(更新驱动有什么坏处)

  • 信息网络主要划分为三类(信息网络的具体形式有哪些种类)

    信息网络主要划分为三类(信息网络的具体形式有哪些种类)

  • 快手怎么把别人拉黑让对方看不到(快手怎么把别人的作品变成自己的原创)

    快手怎么把别人拉黑让对方看不到(快手怎么把别人的作品变成自己的原创)

  • 网页版是什么意思(网页版的)

    网页版是什么意思(网页版的)

  • 苹果8plus是什么屏幕(苹果8plus是什么芯片)

    苹果8plus是什么屏幕(苹果8plus是什么芯片)

  • sim卡哪一面朝上(华为sim卡哪一面朝上)

    sim卡哪一面朝上(华为sim卡哪一面朝上)

  • 乐科智控是什么(乐科智控是什么意思?)

    乐科智控是什么(乐科智控是什么意思?)

  • 搜狗输入法日语键盘怎么用(搜狗输入法日语怎么设置)

    搜狗输入法日语键盘怎么用(搜狗输入法日语怎么设置)

  • 苹果11如何把电量显示数字(苹果11如何把电话加入黑名单)

    苹果11如何把电量显示数字(苹果11如何把电话加入黑名单)

  • 手机有紫外线灯吗(手机紫外灯光)

    手机有紫外线灯吗(手机紫外灯光)

  • 为什么小米手机耗电快(为什么小米手机连不上wifi)

    为什么小米手机耗电快(为什么小米手机连不上wifi)

  • 小爱同学关机是待机吗(小爱同学帮我关机一下)

    小爱同学关机是待机吗(小爱同学帮我关机一下)

  • OPPO k5有几种解锁动画(oppok5解bl)

    OPPO k5有几种解锁动画(oppok5解bl)

  • 三星svoice怎么唤醒(三星怎么设置语音唤醒bixby)

    三星svoice怎么唤醒(三星怎么设置语音唤醒bixby)

  • Windows11 操作系统最低硬件要求详细说明(win 11操作系统)

    Windows11 操作系统最低硬件要求详细说明(win 11操作系统)

  • 系统之家u盘重装系统教程(系统之家u盘重装系统流程)

    系统之家u盘重装系统教程(系统之家u盘重装系统流程)

  • 纽格兰奇墓,爱尔兰博因河谷 (© whatapicture/plainpicture)(纽格尔官网)

    纽格兰奇墓,爱尔兰博因河谷 (© whatapicture/plainpicture)(纽格尔官网)

  • JS中的位运算(js位运算有什么用)

    JS中的位运算(js位运算有什么用)

  • 进项税额转出要补所得税吗
  • 财务软件怎么看利润
  • 出口货物退税是指
  • 水泥建材公司
  • 以件数为印花税计税依据的有哪些
  • 有红字发票如何入账
  • 公司注销公司帐户剩的钱怎么办
  • 事业单位大型修缮会计分录
  • 未开票收入改为开票收入做账
  • 付拍卖佣金入什么科目核算及会计分录怎么做?
  • 税金及附加科目有
  • 一般账户网银可以发工资吗
  • 企业委托银行收款,银行以办妥手续,而企业尚未收到凭证
  • 暂估收入是否暂列金额
  • 发票章盖收据会被税务局罚款吗
  • 作进项税转出
  • 商业健康保险个税申报
  • 取得稳岗补贴后怎么办
  • 普票红冲后原件没有了怎么办
  • 电梯管理费属什么类别
  • 民办学校会计分录 百度网盘
  • 超出经营范围开发票
  • 新版edge浏览器兼容性视图怎么设置
  • win11怎么用
  • Win11怎么不显示图标
  • 劳务发票税率是多少
  • 苹果推送最新系统怎么弄
  • 高新企业政府补贴政策
  • laravel ajax
  • 资金集中度指标公式
  • php返回数据给ajax
  • mfcc特征提取过程
  • 学会这两种方式英语
  • 建行对账单回签平啥意思
  • 织梦cms不更新了吗
  • 快递代收费用是多少
  • 公司有一个残疾人
  • SQL Server 2016的数据库对象有那些?
  • 销售不动产统一发票怎么没有税率
  • 暂缓收缴工会经费申请
  • 纳税人按照月度或者季度的实际利润额预缴有困难的
  • 运费险保费计入什么费用
  • 增值税进项税额转出的情况有哪些
  • 消防设备要多少钱
  • 对公账户是怎样的
  • 生产企业成本核算案例
  • 以货换货合同
  • 权益性投资收益按照什么确认收入的实现
  • 采购商品未入库已经付款会计分录
  • 资产负债率计算方法公式
  • 运输公司的固定资产清单
  • 公司不做账不报税有什么后果?
  • 为什么要缴纳残保金
  • 税控盘费用抵扣怎么申报什么表怎么说什么表怎么填报
  • 未达起征点的收入怎么入账
  • mysql的zip包怎么安装
  • sql Set IDENTITY_INSERT的用法
  • sql怎么比较两个表字段的内容
  • 可以按日期排序
  • win10预览版21277
  • 修改注册表解决画面撕裂
  • ubuntu注册用户
  • macos终端删除文件
  • 使用u盘安装macos
  • Win7 64位系统声卡重装过程中出现失败的解决方法
  • win10桌面底部
  • linux必不可少的分区
  • 免费获取验证码
  • linux与windows有哪些主要区别
  • linux怎样使用命令
  • win7打开软件总提示错误怎么解决
  • win10预览设置
  • 麒麟Linux系统怎么进入图形化界面
  • 基于javascript的毕业设计选题
  • 利用python进行爬虫
  • python目录文件拼接
  • 教育培训机构都交哪些税
  • 南昌 税务局
  • 江西国税局电话客服热线
  • 增值税普通发票可以抵扣吗
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

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

    友情链接: 武汉网站建设