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

  • iwatch7怎么打电话(iwatch7打电话)

    iwatch7怎么打电话(iwatch7打电话)

  • 电脑qq消息显示全在一侧是为什么(为什么电脑qq收到消息但是页面没有出现)

    电脑qq消息显示全在一侧是为什么(为什么电脑qq收到消息但是页面没有出现)

  • QQ邮箱收到信用卡申请通过AD(qq邮箱收到信用卡邀请是真的吗)

    QQ邮箱收到信用卡申请通过AD(qq邮箱收到信用卡邀请是真的吗)

  • 如何关闭自己的朋友圈(如何关闭自己的朋友圈但可以看到朋友的)

    如何关闭自己的朋友圈(如何关闭自己的朋友圈但可以看到朋友的)

  • p40是双扬声器吗(p40有双扬声器吗?)

    p40是双扬声器吗(p40有双扬声器吗?)

  • 华为聊天记录怎么能恢复(华为聊天记录怎么彻底删除)

    华为聊天记录怎么能恢复(华为聊天记录怎么彻底删除)

  • 苹果11锁屏按键失灵(苹果11锁屏按键按了屏幕反应能慢)

    苹果11锁屏按键失灵(苹果11锁屏按键按了屏幕反应能慢)

  • 微信语音视频通话邀请通知怎么关闭

    微信语音视频通话邀请通知怎么关闭

  • b站投币up主能得到什么(b站投币up主能得多少经验)

    b站投币up主能得到什么(b站投币up主能得多少经验)

  • iphone11关机充电不显示电量(iphone11关机充电状态)

    iphone11关机充电不显示电量(iphone11关机充电状态)

  • word对齐字符网络在哪(word文字对齐字符网络)

    word对齐字符网络在哪(word文字对齐字符网络)

  • 华为手机如何超级快充(华为手机如何超级长截屏)

    华为手机如何超级快充(华为手机如何超级长截屏)

  • 爱奇艺字幕显示一半(爱奇艺字幕显示在屏幕上)

    爱奇艺字幕显示一半(爱奇艺字幕显示在屏幕上)

  • 怎样调取微信聊天记录(怎么调取微信聊天内容)

    怎样调取微信聊天记录(怎么调取微信聊天内容)

  • soul关注的人怎么私聊(soul关注的人怎么看不到了)

    soul关注的人怎么私聊(soul关注的人怎么看不到了)

  • 解散微信群有啥显示(解散微信群信息是否还在?)

    解散微信群有啥显示(解散微信群信息是否还在?)

  • 手机软件安装包在哪里(手机软件安装包在哪找到)

    手机软件安装包在哪里(手机软件安装包在哪找到)

  • 华为网盘在哪里打开(华为的网盘在什么地方)

    华为网盘在哪里打开(华为的网盘在什么地方)

  • 无线反向充电什么意思(无线反向充电什么手机支持)

    无线反向充电什么意思(无线反向充电什么手机支持)

  • realtek高清晰音频管理器没有声音设置方法(Realtek高清晰音频管理器设置方法)

    realtek高清晰音频管理器没有声音设置方法(Realtek高清晰音频管理器设置方法)

  • Honeybee flying over crocuses in the Tatra Mountains, Poland (© Mirek Kijewski/Getty Images)

    Honeybee flying over crocuses in the Tatra Mountains, Poland (© Mirek Kijewski/Getty Images)

  • 图像超分综述:超长文一网打尽图像超分的前世今生 (附核心代码)(图像超分综述怎么做)

    图像超分综述:超长文一网打尽图像超分的前世今生 (附核心代码)(图像超分综述怎么做)

  • mysql右外连接查询的介绍(mysql 内连接查询)

    mysql右外连接查询的介绍(mysql 内连接查询)

  • 个体工商户能开多少钱的普票
  • 跨省异地购买房产对外销售
  • 设计合同服务期限怎么写
  • 金融资产的构成
  • 营业收入比销售商品收到的现金少
  • 如何根据销售额降序排序
  • 建筑企业小规模纳税人升为一般纳税人条件
  • 材料成本差异借贷方向
  • 深圳重工业企业有哪些
  • 企业所得税纳税人包括哪些类型
  • 列支会议费要求
  • 出售多余材料会计科目
  • 厂家给经销商的搭赠政策
  • 用现金支付销售产品的运费
  • 欠税已经缴纳会影响征信吗
  • 增值税普通发票申报
  • 2019年煤炭
  • 小规模纳税人还是一般纳税人
  • 体现公司财务状况的报表
  • 出口货物免抵退申报明细录入怎么填
  • 工资一年发一次合法吗
  • 抄报税失败不许逾期报税吗
  • 金税盘减免税款可以抵扣销项税吗
  • 公司购车要交哪些税
  • 收到发票怎么写说明
  • 哪些凭证可以抵扣
  • mac清理垃圾怎么清理
  • 无偿受赠房产出售税费
  • 新手刚接触财务
  • echarts饼图背景图片
  • 公共基础设施的英语
  • 圆顶亭效果图
  • PHP:imagecopyresampled()的用法_GD库图像处理函数
  • jar启动指定启动类
  • uniapp打开h5页面
  • 怎么开通公众号微信公众平台
  • php获取表单数据的方法和区别
  • 买过来的土地可以确权吗
  • 销售机构人员工作总结
  • 令人感到惊艳
  • 公司帐户转到法人私卡备用金行吗
  • 离职补偿金可以拖欠么
  • 小规模纳税人当月应交增值税怎么算
  • 应付账款会计分录大全
  • php网站访问量大怎么优化
  • 服务费的发票税率是多少
  • 银行开户有几种账户
  • 合并报表抵消分录
  • 什么是销项税额转出
  • 未分配利润是不是净利润的意思
  • 怎样分辨假钱
  • 利润分配审计案例
  • 原材料入库单应根据采购订单还是到货数量
  • 汇兑损益金额是怎么算出来的
  • 会计及库管岗位职责(要求)
  • 工业企业建立账套
  • sqlserver中时间类型
  • win10系统设置快捷键
  • 去掉快捷功能
  • windows共享文件夹端口号
  • squid详细
  • windows安装软件需要管理员权限
  • linux系统怎么安装
  • pniopcac.exe是什么
  • Win7如何关闭Smartscreen筛选器?Win7关闭Smartscreen筛选器的方法
  • linux vim编辑命令显示行号
  • 什么叫真游戏
  • h1标签的使用完全正确的是
  • unity获取父节点
  • awk入门
  • java项目的命名规则
  • JavaScript中的方法名不区分大小写
  • javaScript parseInt字符转化为数字函数使用小结
  • 前端开发的工作流程
  • 职称申报密码找回
  • 个人所得税子女教育到多大结束
  • 酒店行业区分小巨头企业
  • 建筑企业异地预缴增值税计算
  • 开票盘注销后能否撤回
  • 深圳监狱在哪个位置
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

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

    友情链接: 武汉网站建设