EasyExcel
1.依赖
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>easyexcel</artifactId>
<version>2.1.6</version>
</dependency>
2.写出
/**
* @author Administrator
*/
@Data
public class DemoData {
@ExcelProperty("字符串标题")
private String string;
@ExcelProperty("日期标题")
private Date date;
@ExcelProperty("数字标题")
private Double doubleData;
/**
* 忽略这个字段
*/
@ExcelIgnore
private String ingore;
}
=================================================
public class EasyExcelReadTest {
// 创建数据
private List<DemoData> data() {
List<DemoData> list = new ArrayList<DemoData>();
for (int i = 0; i < 10; i++) {
DemoData data = new DemoData();
data.setString("" + i);
data.setDate(new Date());
data.setDoubleData(0.99);
list.add(data);
}
return list;
}
@Test
public void test1() {
EasyExcel.write("h:\\6.xlsx", DemoData.class)
.sheet("你好")
.doWrite(data());
}
3.读取数据
监听器
/**
* @author Administrator
*/
public class DemoDataListener extends AnalysisEventListener<DemoData> {
/**
* 每隔5条存储数据库,实际使用中可以3000条,然后清理list ,方便内存回收
*/
List<DemoData> list = new ArrayList<>();
/**
* 这个每一条数据解析都会来调用
*/
@Override
public void invoke(DemoData data, AnalysisContext context) {
list.add(data);
// 需要去存储一次数据库,防止数据几万条数据在内存,容易OOM
if (list.size() >= 5) {
// 保存list数据
list.clear();
}
}
/**
* 所有数据解析完成了 都会来调用
*
* @param context
*/
@Override
public void doAfterAllAnalysed(AnalysisContext context) {
// 这里也要保存数据,确保最后遗留的数据也存储到数据库
// 保存list数据
System.out.println("所有数据解析完成");
}
}
@Test
public void test2() {
EasyExcel.read("h:\\6.xlsx", DemoData.class, new DemoDataListener())
.sheet()
.doRead();
}
https://www.yuque.com/easyexcel/doc/read