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

  • python 遍历列表(python 遍历列表中特定数据)

    python 遍历列表(python 遍历列表中特定数据)

  • 手机为什么不能横屏(手机为什么不能闪充了)

    手机为什么不能横屏(手机为什么不能闪充了)

  • 淘宝过年有活动吗(淘宝过年活动什么时候开始2023)

    淘宝过年有活动吗(淘宝过年活动什么时候开始2023)

  • 华为手机丢了怎么找回(华为手机丢了怎么追踪精确位置)

    华为手机丢了怎么找回(华为手机丢了怎么追踪精确位置)

  • 为什么抖音看不到在线状态(为什么抖音看不了直播)

    为什么抖音看不到在线状态(为什么抖音看不了直播)

  • 3600配什么主板(2600配什么主板)

    3600配什么主板(2600配什么主板)

  • 蓝牙鼠标怎么充电(蓝牙鼠标怎么充不进电)

    蓝牙鼠标怎么充电(蓝牙鼠标怎么充不进电)

  • vivo手机相机打不开黑屏(vivo手机相机打开黑屏)

    vivo手机相机打不开黑屏(vivo手机相机打开黑屏)

  • 微信怎么深色模式(微信怎么深色模式oppo)

    微信怎么深色模式(微信怎么深色模式oppo)

  • 联想r720装内存条教程(联想r720装内存条)

    联想r720装内存条教程(联想r720装内存条)

  • 连接热点显示低数据模式(连接热点显示低数据模式怎么回事)

    连接热点显示低数据模式(连接热点显示低数据模式怎么回事)

  • 美国除了苹果还有什么手机品牌(美国除了苹果还有其他手机品牌吗)

    美国除了苹果还有什么手机品牌(美国除了苹果还有其他手机品牌吗)

  • hbase是什么类型数据库(hbase是一种)

    hbase是什么类型数据库(hbase是一种)

  • 为什么突然手机卡不显示了(为什么突然手机卡没信号了)

    为什么突然手机卡不显示了(为什么突然手机卡没信号了)

  • 计算机病毒实际上是一种特殊的什么(计算机病毒实际上是一段逻辑错误的程序)

    计算机病毒实际上是一种特殊的什么(计算机病毒实际上是一段逻辑错误的程序)

  • 华为Nova5Pro屏幕产商(华为nova5pro屏幕刷新率是多少)

    华为Nova5Pro屏幕产商(华为nova5pro屏幕刷新率是多少)

  • 手机便签是什么意思(手机便签是干什么的)

    手机便签是什么意思(手机便签是干什么的)

  • 手机呼叫失败是什么原因(手机呼叫失败是啥意思)

    手机呼叫失败是什么原因(手机呼叫失败是啥意思)

  • 淘宝自己的二维码在哪里(淘宝自己的二维码能干嘛)

    淘宝自己的二维码在哪里(淘宝自己的二维码能干嘛)

  • 华为畅享10s上市时间(华为畅享10plus什么时候上市的)

    华为畅享10s上市时间(华为畅享10plus什么时候上市的)

  • 苹果手机11和xr的区别(苹果手机11和xr,x s ma x到底哪个好用)

    苹果手机11和xr的区别(苹果手机11和xr,x s ma x到底哪个好用)

  • 淘宝怎么关闭洋淘秀(怎样关闭洋淘)

    淘宝怎么关闭洋淘秀(怎样关闭洋淘)

  • qq邮箱照片怎么保存到手机(qq邮箱照片怎么压缩发送)

    qq邮箱照片怎么保存到手机(qq邮箱照片怎么压缩发送)

  • 天籁usb设置方法(天籁usb设置方法图解)

    天籁usb设置方法(天籁usb设置方法图解)

  • macOS big sur屏幕使用时间怎么添加到小组件?(mac系统屏幕)

    macOS big sur屏幕使用时间怎么添加到小组件?(mac系统屏幕)

  • Chatgpt私有化部署(全流程)

    Chatgpt私有化部署(全流程)

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

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

  • 微信企业版支付
  • 增量留抵税额怎么做分录
  • 足浴店装修费用多少
  • 公司开普票和专票哪个好
  • 支付一次性劳务报酬怎么做账
  • 公司把钱借给个人
  • 支票报销是怎么操作的
  • 固定资产折旧财务
  • 公益性支出所得税扣除比例
  • 购进客房用品取得增值税专用发票注明税额9120
  • 出口退税进项发票稽核
  • 结转周转材料成本差异会计分录
  • 企业收到工程款开发票要扣哪些税
  • 机器维修费的会计科目
  • 境外企业提供软件使用权给境内企业
  • 雇主责任险能否证明劳动关系
  • 软件的维修性要求
  • 增值纳税人类别怎么选
  • 代收代付水电费会计分录
  • 税收滞纳金可以税前扣除吗
  • 周转材料盘点报告单
  • 付企业网银年服费怎么付
  • 企业技术开发的原则
  • w10电脑很卡
  • 预收款交税未开发票申报表怎么
  • 如何关闭开始菜单快捷键
  • PHP中Http协议post请求参数
  • 个人所得税手续费返还
  • 落枕怎么办怎么治疗
  • 黑马程序员前端工程师简历
  • 核定征收印花税的文件
  • 企业购买银行理财
  • php数组内容替换
  • 财务负责人和法人哪个责任大
  • 增值税发票校验码在哪个位置
  • 闭包 python
  • 一学就会的人是天才吗
  • php在图片上添加文字
  • 不是销售类的工作可以做什么
  • 收取的水电费怎么入账
  • 所得税费用为什么不计入营业利润
  • 分公司开票总公司收款怎么做账
  • 内账增值税计入什么科目
  • 个体户3万免税规定2019
  • 培训费属于什么
  • 固定资产处置净收入转入什么账户核算
  • 减免增值税的相关规定
  • 商家说垫付运费
  • 房屋租赁费怎么记账
  • 长期待摊费用的二级科目有哪些
  • 工程材料增值税抵扣比例
  • 公司汽车租赁开什么税目
  • 库存股的处理方式
  • 冲减多计提的工资摘要怎么写
  • 签订购货合同,计划下月购入的固定资产
  • 飞机发票和行程单一样吗
  • 产权转移书据纳税义务时间
  • 10万以下销售额怎么算
  • 银行承兑汇票怎么做账
  • mysql日期和时间函数
  • sql触发器语句
  • mysql5.7.23
  • Vista下以真正的管理员登陆的设置方法
  • linux系统硬盘分区
  • windows地图导航
  • linux命令行怎么用
  • windows 10移动版
  • win8 任务栏
  • 虚拟机安装win8系统
  • Linux系统怎么设置中文输入法
  • jquery插件是干什么的
  • python appium 微信
  • python 遍历字符串修改
  • jq获取url
  • 郑州契税怎么收
  • 国税发票查询能查出什么项目
  • 保险赔款是免征还是不征?
  • 个人所得税选择那种方式更好
  • 大兴区地方税务局
  • 如何查询有没有交医保费用
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

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

    友情链接: 武汉网站建设