Hutool Java工具类库_ExcelUtil的使用

2022-01-24 0 630
目录

Hutool Java工具类库_ExcelUtil

依赖

<!--Hutool Java工具包-->
    <dependency>
       <groupId>cn.hutool</groupId>
       <artifactId>hutool-all</artifactId>
       <version>5.4.5</version>
 </dependency>

ExcelUtil

从文件中读取Excel为ExcelReader

ExcelReader reader = ExcelUtil.getReader(FileUtil.file(\"test.xlsx\"));

从流中读取Excel为ExcelReader

ExcelReader reader = ExcelUtil.getReader(ResourceUtil.getStream(\"aaa.xlsx\"));

读取指定的sheet

ExcelReader reader;
//通过sheet编号获取
reader = ExcelUtil.getReader(FileUtil.file(\"test.xlsx\"), 0);
//通过sheet名获取
reader = ExcelUtil.getReader(FileUtil.file(\"test.xlsx\"), \"sheet1\");

ExcelReader

读取Excel中所有行和列,都用列表表示

ExcelReader reader = ExcelUtil.getReader(\"d:/aaa.xlsx\");
List<List<Object>> readAll = reader.read();

读取为Map列表,默认第一行为标题行,Map中的key为标题,value为标题对应的单元格值

ExcelReader reader = ExcelUtil.getReader(\"d:/aaa.xlsx\");
List<Map<String,Object>> readAll = reader.readAll();

读取为Bean列表,Bean中的字段名为标题,字段值为标题对应的单元格值

ExcelReader reader = ExcelUtil.getReader(\"d:/aaa.xlsx\");
List<Person> all = reader.readAll(Person.class);

ExcelWriter

Hutool将Excel写出封装为ExcelWriter,原理为包装了Workbook对象,每次调用merge(合并单元格)或者write(写出数据)方法后只是将数据写入到Workbook,并不写出文件,只有调用flush或者close方法后才会真正写出文件。

由于机制原因,在写出结束后需要关闭ExcelWriter对象,调用close方法即可关闭,此时才会释放Workbook对象资源,否则带有数据的Workbook一直会常驻内存

(1) 将行列对象写出到Excel

List<String> row1 = CollUtil.newArrayList(\"aa\", \"bb\", \"cc\", \"dd\");
List<String> row2 = CollUtil.newArrayList(\"aa1\", \"bb1\", \"cc1\", \"dd1\");
List<String> row3 = CollUtil.newArrayList(\"aa2\", \"bb2\", \"cc2\", \"dd2\");
List<String> row4 = CollUtil.newArrayList(\"aa3\", \"bb3\", \"cc3\", \"dd3\");
List<String> row5 = CollUtil.newArrayList(\"aa4\", \"bb4\", \"cc4\", \"dd4\");
List<List<String>> rows = CollUtil.newArrayList(row1, row2, row3, row4, row5);
//通过工具类创建writer
ExcelWriter writer = ExcelUtil.getWriter(\"d:/writeTest.xlsx\");
//通过构造方法创建writer
//ExcelWriter writer = new ExcelWriter(\"d:/writeTest.xls\");
//跳过当前行,既第一行,非必须,在此演示用
writer.passCurrentRow();
//合并单元格后的标题行,使用默认标题样式
writer.merge(row1.size() - 1, \"测试标题\");
//一次性写出内容,强制输出标题
writer.write(rows, true);
//关闭writer,释放内存
writer.close();

(2)写出Map数据

Map<String, Object> row1 = new LinkedHashMap<>();
row1.put(\"姓名\", \"张三\");
row1.put(\"年龄\", 23);
row1.put(\"成绩\", 88.32);
row1.put(\"是否合格\", true);
row1.put(\"考试日期\", DateUtil.date());
Map<String, Object> row2 = new LinkedHashMap<>();
row2.put(\"姓名\", \"李四\");
row2.put(\"年龄\", 33);
row2.put(\"成绩\", 59.50);
row2.put(\"是否合格\", false);
row2.put(\"考试日期\", DateUtil.date());
ArrayList<Map<String, Object>> rows = CollUtil.newArrayList(row1, row2);
// 通过工具类创建writer
ExcelWriter writer = ExcelUtil.getWriter(\"d:/writeMapTest.xlsx\");
// 合并单元格后的标题行,使用默认标题样式
writer.merge(row1.size() - 1, \"一班成绩单\");
// 一次性写出内容,使用默认样式,强制输出标题
writer.write(rows, true);
// 关闭writer,释放内存
writer.close();

(3)写出Bean数据

public class TestBean {
    private String name;
    private int age;
    private double score;
    private boolean isPass;
    private Date examDate;
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public int getAge() {
        return age;
    }
    public void setAge(int age) {
        this.age = age;
    }
    public double getScore() {
        return score;
    }
    public void setScore(double score) {
        this.score = score;
    }
    public boolean isPass() {
        return isPass;
    }
    public void setPass(boolean isPass) {
        this.isPass = isPass;
    }
    public Date getExamDate() {
        return examDate;
    }
    public void setExamDate(Date examDate) {
        this.examDate = examDate;
    }
}
TestBean bean1 = new TestBean();
bean1.setName(\"张三\");
bean1.setAge(22);
bean1.setPass(true);
bean1.setScore(66.30);
bean1.setExamDate(DateUtil.date());
TestBean bean2 = new TestBean();
bean2.setName(\"李四\");
bean2.setAge(28);
bean2.setPass(false);
bean2.setScore(38.50);
bean2.setExamDate(DateUtil.date());
List<TestBean> rows = CollUtil.newArrayList(bean1, bean2);
// 通过工具类创建writer
ExcelWriter writer = ExcelUtil.getWriter(\"d:/writeBeanTest.xlsx\");
// 合并单元格后的标题行,使用默认标题样式
writer.merge(4, \"一班成绩单\");
// 一次性写出内容,使用默认样式,强制输出标题
writer.write(rows, true);
// 关闭writer,释放内存
writer.close();

(4)自定义Bean的key别名(排序标题)

在写出Bean的时候,我们可以调用ExcelWriter对象的addHeaderAlias方法自定义Bean中key的别名,这样就可以写出自定义标题了

// 通过工具类创建writer
ExcelWriter writer = ExcelUtil.getWriter(\"d:/writeBeanTest.xlsx\");
//自定义标题别名
writer.addHeaderAlias(\"name\", \"姓名\");
writer.addHeaderAlias(\"age\", \"年龄\");
writer.addHeaderAlias(\"score\", \"分数\");
writer.addHeaderAlias(\"isPass\", \"是否通过\");
writer.addHeaderAlias(\"examDate\", \"考试时间\");
// 合并单元格后的标题行,使用默认标题样式
writer.merge(4, \"一班成绩单\");
// 一次性写出内容,使用默认样式,强制输出标题
writer.write(rows, true);
// 关闭writer,释放内存
writer.close();

java解析Excel使用hutool工具类

hutool包,真是好用,方便,强烈推荐…

https://hutool.cn/docs/index.html

然后使用Excel的工具类,还需要引入poi-ooxml包版本的话,报错里面有

自己确认一下就好了

 <!--  -->
        <dependency>
            <groupId>org.apache.poi</groupId>
            <artifactId>poi-ooxml</artifactId>
            <version>3.17</version>
        </dependency>

一行代码搞定:常用的就是read方法了.

ExcelReader reader = ExcelUtil.getReader(FileUtil.file(\"C:\\\\Users\\\\stack\\\\Desktop\\\\hanke\\\\aaa.xlsx\"));

以上为个人经验,希望能给大家一个参考,也希望大家多多支持。

:本文采用 知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议 进行许可, 转载请附上原文出处链接。
1、本站提供的源码不保证资源的完整性以及安全性,不附带任何技术服务!
2、本站提供的模板、软件工具等其他资源,均不包含技术服务,请大家谅解!
3、本站提供的资源仅供下载者参考学习,请勿用于任何商业用途,请24小时内删除!
4、如需商用,请购买正版,由于未及时购买正版发生的侵权行为,与本站无关。
5、本站部分资源存放于百度网盘或其他网盘中,请提前注册好百度网盘账号,下载安装百度网盘客户端或其他网盘客户端进行下载;
6、本站部分资源文件是经压缩后的,请下载后安装解压软件,推荐使用WinRAR和7-Zip解压软件。
7、如果本站提供的资源侵犯到了您的权益,请邮件联系: 442469558@qq.com 进行处理!

猪小侠源码-最新源码下载平台 Java教程 Hutool Java工具类库_ExcelUtil的使用 https://www.20zxx.cn/297948/xuexijiaocheng/javajc.html

猪小侠源码,优质资源分享网

常见问题
  • 本站所有资源版权均属于原作者所有,均只能用于参考学习,请勿直接商用。若由于商用引起版权纠纷,一切责任均由使用者承担
查看详情
  • 最常见的情况是下载不完整: 可对比下载完压缩包的与网盘上的容量,建议提前注册好百度网盘账号,使用百度网盘客户端下载
查看详情

相关文章

官方客服团队

为您解决烦忧 - 24小时在线 专业服务