【easyexcel】阿里easyexcel 2.0.5版本简单读写示例
easyexcel
快速、简洁、解决大文件内存溢出的java处理Excel工具
项目地址:https://gitcode.com/gh_mirrors/ea/easyexcel
免费下载资源
·
阿里easyexcel是基于poi封装的一个读写excel的工具包,主要解决读大文件poi占内存大的问题,同时也提供了一些简单的excel操作API。但是网上找了下,官方说明比较少,示例都是1.*版本,2.0版本的改动还是有一些的,因此写个简单的读写示例。
引入maven依赖
<!-- https://mvnrepository.com/artifact/com.alibaba/easyexcel -->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>easyexcel</artifactId>
<version>2.0.5</version>
</dependency>
编写测试代码
测试思路:先定义一个List,写入本地Excel文件,再读取出来打印,如下:
@Test
public void testExcel() throws FileNotFoundException {
//定义列表
List<Book> books = Arrays.asList(new Book("isbn-1", "SpringMVC"), new Book("isbn-2", "Mybatis"));
//写入excel
ExcelUtil.writeListTo(new FileOutputStream("E:/testExcels/books_write.xlsx"),books,Book.class,Arrays.asList("isbn号","书名"));
//读取excel
List<Book> readBooks = ExcelUtil.readListFrom(new FileInputStream("E:/testExcels/books_write.xlsx"), Book.class);
System.out.println(readBooks);
}
Book对象
excelProperty是easyexcel提供的注解,用来对应excel的列
@Data
@NoArgsConstructor
@AllArgsConstructor
public class Book implements Serializable {
@ExcelProperty
private String isbn;
@ExcelProperty
private String title;
}
写入Excel
简单的写一个Sheet,使用单行的表头
public static <T> void writeListTo(OutputStream os, List<T> data, Class<T> clz, List<String> simpleHead) {
WriteSheet writeSheet = new WriteSheet();
writeSheet.setClazz(clz);
writeSheet.setNeedHead(true);
List<List<String>> head = simpleHead.stream().map(a -> Arrays.asList(a)).collect(Collectors.toList());
writeSheet.setHead(head);
ExcelWriter write = EasyExcel.write(os).build();
write.write(data, writeSheet);
write.finish();
}
读取Excel
easyexcel提供了一个SyncReadListener,可以读取每行的数据放到一个List中,最后一起获取。
public static <T> List<T> readListFrom(InputStream is, Class<T> clz) {
SyncReadListener tmpListener = new SyncReadListener();
ReadSheet readSheet = new ReadSheet();
readSheet.setClazz(clz);
EasyExcel.read(is).registerReadListener(tmpListener).build().read(readSheet);
return (List<T>) tmpListener.getList();
}
扩展
上面根据Pojo对象简单的读写Excel就完成了。如果需要复杂的功能,读取的话可以定义自己的ReadListener,写入也可以定义更复杂的表头。
----------------------------------------------------------增加一个LocalDateTime转换器-------------------------------------------------------------
public class LocalDateTimeConverter implements Converter<LocalDateTime> {
@Override
public Class supportJavaTypeKey() {
return LocalDateTime.class;
}
@Override
public CellDataTypeEnum supportExcelTypeKey() {
return CellDataTypeEnum.STRING;
}
@Override
public LocalDateTime convertToJavaData(CellData cellData, ExcelContentProperty contentProperty,
GlobalConfiguration globalConfiguration) {
DateTimeFormatter dateTimeFormatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
return LocalDateTime.parse(cellData.getStringValue(),dateTimeFormatter);
}
@Override
public CellData convertToExcelData(LocalDateTime value, ExcelContentProperty contentProperty,
GlobalConfiguration globalConfiguration) {
DateTimeFormatter dateTimeFormatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
return new CellData(dateTimeFormatter.format(value));
}
}
继承easyExcel的Convert类,并实现其中的方法,然后修改ExcelUtil调用的地方,把这个转换器注册进去,如下图:
GitHub 加速计划 / ea / easyexcel
31.64 K
7.47 K
下载
快速、简洁、解决大文件内存溢出的java处理Excel工具
最近提交(Master分支:3 个月前 )
c42183df
Bugfix 3 个月前
efa7dff6 * 重新加回 `commons-io`
3 个月前
更多推荐
已为社区贡献1条内容
所有评论(0)