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

  • 电脑重启一直在转圈怎么解决(电脑重启)(电脑重启一直在转圈怎么解决)

    电脑重启一直在转圈怎么解决(电脑重启)(电脑重启一直在转圈怎么解决)

  • 苹果x可以装两个卡吗(苹果x可以装两个手机卡吗)

    苹果x可以装两个卡吗(苹果x可以装两个手机卡吗)

  • 拼多多的拼小圈如何不让别人看(拼多多的拼小圈在哪里找)

    拼多多的拼小圈如何不让别人看(拼多多的拼小圈在哪里找)

  • 3.7v电池用5v充电器(3.7v电池可以给5v设备供电吗)

    3.7v电池用5v充电器(3.7v电池可以给5v设备供电吗)

  • 设置呼叫转移后对方打电话提示吗(设置呼叫转移后打电话提示什么)

    设置呼叫转移后对方打电话提示吗(设置呼叫转移后打电话提示什么)

  • m712q一b是什么型号(m711q是什么型号)

    m712q一b是什么型号(m711q是什么型号)

  • 华为matebook充不进电(华为matebook充不进去电)

    华为matebook充不进电(华为matebook充不进去电)

  • 华为手机怎么样关机(华为手机怎么样截屏幕的图片)

    华为手机怎么样关机(华为手机怎么样截屏幕的图片)

  • 表格中计算公式怎么做(表格中计算公式如何自动计算出结果)

    表格中计算公式怎么做(表格中计算公式如何自动计算出结果)

  • 主机号码未显示是怎么回事(主机号码未显示是什么电活)

    主机号码未显示是怎么回事(主机号码未显示是什么电活)

  • 绑定微信的手机号注销了微信还能用吗(绑定微信的手机号没用了,密码也忘了怎么办)

    绑定微信的手机号注销了微信还能用吗(绑定微信的手机号没用了,密码也忘了怎么办)

  • 苹果7p支持nfc功能吗(苹果7p带nfc功能)

    苹果7p支持nfc功能吗(苹果7p带nfc功能)

  • 唯品会怎么用花呗支付(唯品会怎么花呗付款方式)

    唯品会怎么用花呗支付(唯品会怎么花呗付款方式)

  • mate30pro是否可转接U盾(华为mate30pro可以换成鸿蒙系统么)

    mate30pro是否可转接U盾(华为mate30pro可以换成鸿蒙系统么)

  • 电脑忘记密码了怎么开(电脑忘记密码了怎么办?不用u盘)

    电脑忘记密码了怎么开(电脑忘记密码了怎么办?不用u盘)

  • 华为mate30参数(华为mate30参数尺寸)

    华为mate30参数(华为mate30参数尺寸)

  • iphone11有没有指纹解锁(iphone11有没有指纹支付)

    iphone11有没有指纹解锁(iphone11有没有指纹支付)

  • vivoz3返回键怎么调(vivoz3手机返回键在哪里)

    vivoz3返回键怎么调(vivoz3手机返回键在哪里)

  • 苹果用快充会伤电池吗(苹果用快充会伤手机吗)

    苹果用快充会伤电池吗(苹果用快充会伤手机吗)

  • 如何删除退款售后的信息(怎么删除退款)

    如何删除退款售后的信息(怎么删除退款)

  • avgcc.exe是什么进程 avgcc进程信息查询(avc格式是什么)

    avgcc.exe是什么进程 avgcc进程信息查询(avc格式是什么)

  • Python-实战:基于白鲸BWO算法的VMD超参数优化(python基本功)

    Python-实战:基于白鲸BWO算法的VMD超参数优化(python基本功)

  • 【自动驾驶】车辆运动学模型(自动驾驶车祸)

    【自动驾驶】车辆运动学模型(自动驾驶车祸)

  • 多交的企业所得税怎么处理
  • 小微企业所得税税率2023年最新税率表
  • 消费型增值税的含义
  • 收据盖发票专用章后果
  • 暂估的应付账款无法开具发票在金蝶云星空怎么操作
  • 普票能抵扣多少
  • 员工事假扣工资怎么做账
  • 企业理财收入如何确定
  • 房地产企业还有未来吗
  • 增值税出口免退什么意思
  • 二手车交易怎么办理过户手续
  • 土地增值税清算全流程实战案例
  • 对外支付代扣代缴
  • 租赁房屋缴纳什么税
  • 外管证报验核销
  • 委托加工几个点
  • 查账征收所得税计税依据
  • 租房发票的税由谁承担
  • 7月财务报表行次三大变化
  • 小规模纳税人还是一般纳税人
  • 什么是差额费用
  • 个税免税收入填错了怎么办
  • 进项税额大于销项税额怎么办
  • 个人技术服务费增值税税率是多少啊
  • 季报的利润表是填本期金额还是本年
  • 公司加农户经营模式
  • 跨年得退货还用开负数发票吗?
  • 一次性购房发票什么时候给开
  • 营改增后建筑业怎么开票
  • 个人所得税租房和房贷只能二选一吗
  • linux用在哪些方面
  • 所得税费用怎么缴纳
  • 专利权出资会计科目
  • 清洁费用是属于什么科目
  • php lcg_value与mt_rand生成0~1随机小数的效果对比分析
  • 残保金所属期怎么写
  • des算法加密解密过程
  • websocket()
  • 怎样才能帮你
  • 税控维护费可以抵企业所得税吗
  • php5.6漏洞
  • dede织梦怎么转成zblog
  • 经营证在哪里办
  • 呆账冲销是什么意思
  • 进口增值税完税证明网哪里打印的
  • 计提固定资产折旧借方科目包括
  • 汇算清缴补交的所得税怎么记帐
  • 管理费用属于费用类吗
  • 怎么计算利润的百分比
  • 所得税预缴怎么申报
  • 分公司能不能作为行政处罚的主体
  • 期末余额就是本年累计吗
  • 办公室搬迁工作
  • 应缴财政专户款年末有余额吗
  • 航天信息的发票以什么形式导入开票信息
  • 股东借款可以直接转为实缴出资吗
  • 投资款计入哪个科目
  • 错误原始凭证怎么写
  • 汽车固定资产残值率
  • windows一键隐藏桌面图标
  • win7电脑开机自启动管理在哪里
  • linux挂载cd
  • centos8设置默认启动命令界面
  • Win10预览版拆弹
  • javascript概述及作用
  • nodejs model
  • javascript概述及作用
  • 基于unity3d
  • django优势在哪里
  • jquery入口
  • 江苏省税务局土地增值税清算公告
  • 湖南省税务局发票辨伪系统
  • 广东 电子税局 app
  • 医保月底结算规定是什么
  • 江苏税务ukey怎么申请
  • 临沂学生医疗保险多少钱
  • 慧付钱包app官网下载
  • 湖北职称网上申请流程
  • 湖北中税网控股股份有限公司
  • 武汉市江汉区财政局这个单位的公务员待遇怎么样?
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

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

    友情链接: 武汉网站建设