简介
工作中要实现导出excel的功能, 可以使用阿里巴巴的EasyExcel这个工具,操作简单,容易上手
1、导入Maven依赖
<!--easyExcel测试导出功能开始-->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>easyexcel</artifactId>
<version>2.2.6</version>
</dependency>
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi</artifactId>
<version>3.17</version>
</dependency>
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi-ooxml</artifactId>
<version>3.17</version>
</dependency>
<!--结束-->
没错,就这三个就行了
然后开始写测试代码测试功能,自己建立Bean对象,就不查数据库了,模拟查出数据的流程
2.建立bean实体类类,干脆简单一点,就两个属性
/**
* @author zengFanLiang
* @version 1.1
*/
@SuppressWarnings("all")
@Data
@NoArgsConstructor
@AllArgsConstructor
public class AdminTest {
@ExcelProperty(value = "名字" ,index= 0)
private String name;
@ExcelProperty(value = "年龄" ,index= 1)
private int age;
}
3.开始测试功能,没有写test类,于是直接psvm了
public static void main(String[] args) {
//创建对象模拟查出数据并赋值
ArrayList<AdminTest> adminlist = new ArrayList<>();
for (int i = 0; i < 100; i++) {
AdminTest admin = new AdminTest("亮哥yyds" + i, 20);
adminlist.add(admin);
}
//构建写Excel对象
Consumer<ExcelWriter> consumer = writer -> {
writer.write(adminlist, EasyExcel.writerSheet("管理员信息")
.head(AdminTest.class)
.build());
};
//调用方法去导出数据
export("D:/报表.xlsx", consumer);
}
//被调用的导出方法
public static void export(String fileName, Consumer<ExcelWriter> writerConsumer) {
ExcelWriter writer = EasyExcel.write(fileName)
.registerWriteHandler(new LongestMatchColumnWidthStyleStrategy())
.build();
writerConsumer.accept(writer);
writer.finish();
}
效果演示
那么怎么去读取数据呢,看这
//读数据
// 创建一个输入流,将 Excel 文件读取出来
try {
InputStream inputStream = new FileInputStream("D:/报表.xlsx");
//一行一行读是真的慢
List<AdminTest> tmpList = EasyExcel.read(inputStream)
// 设置与Excel表映射的类
.head(AdminTest.class)
// 设置sheet,默认读取第一个
.sheet()
// 设置标题所在行数
.headRowNumber(1)
//异步 读取
.doReadSync();
for (AdminTest adminTest : tmpList) {
System.out.println(adminTest);
}
} catch (FileNotFoundException e) {
e.printStackTrace();
}
执行结果如下
但是这种一行一行读取太慢了,可以创建监听器,然后读取一批,再执行,这个可以看官方API
希望对大家有所帮助