引入依赖,虽然hutool也有表格处理的工具类,但是不支持老版本的xls文件,而阿里开发的easyexcel则支持老版本文件,并且easyexcel是轻量级省内存的表格文档操作工具。
<!-- Hutool工具 -->
<dependency>
<groupId>cn.hutool</groupId>
<artifactId>hutool-all</artifactId>
<version>5.3.10</version>
</dependency>
<!-- Hutool文档操作 -->
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi-ooxml</artifactId>
<version>5.2.3</version>
</dependency>
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>easyexcel</artifactId>
<version>3.0.5</version>
</dependency>
1.假设表格内容有三列:数量、规格、代号,则写一个VO实体类,用字段对应表格的每一列
import com.alibaba.excel.annotation.ExcelProperty;
public class BearAlgoExcelVO {
@ExcelProperty("数量")//对应表格中的数量那一列
private double num1;
@ExcelProperty(index = 0)//如果列没有标题,可以直接用下标来指定该列,下标从0开始
private double num2;
@ExcelProperty(index = 1)
private double num3;
//省略get set方法
}
2.写一个监听器,用来执行读写后的操作
import com.alibaba.excel.context.AnalysisContext;
import com.alibaba.excel.event.AnalysisEventListener;
import java.util.List;
public class BearAlgoExcelListener extends AnalysisEventListener<BearAlgoExcelVO> {
private List data;
public BearAlgoExcelListener(List data){
this.data=data;
}
/**
* 每一行读取完成后回调此方法,并将读取的数据封装为参数传入
* 只需要将每次读取的内容保存下来即可
* @param code
* @param analysisContext
*/
@Override
public void invoke(BearAlgoExcelVO bearAlgoExcelVO, AnalysisContext analysisContext) {
//System.out.println(bearAlgoExcelVO);
data.add(bearAlgoExcelVO);
}
/**
* 执行完毕调用
* @param analysisContext
*/
@Override
public void doAfterAllAnalysed(AnalysisContext analysisContext) {
}
}
3.读取测试
import com.alibaba.excel.EasyExcel;
import com.alibaba.fastjson.JSON;
import java.io.File;
import java.util.ArrayList;
import java.util.List;
public class EsaylExcelMain {
public static void main(String[] args) {
File file=new File("C:\\Users\\test\\Desktop\\BearingData\\train_all\\故障\\擦伤\\内圈擦伤\\内圈擦伤_轻度\\2019年09月25日17时45分24秒data节点D318B134地址10.csv");
List data=new ArrayList();
EasyExcel.read(file, BearAlgoExcelVO.class, new BearAlgoExcelListener(data)).sheet().doRead();
System.out.println(JSON.toJSONString(data));
}
}
//打印:[{"num1":0.502208,"num2":0.501843,"num3":0.494563},{"num1":0.502208,"num2":0.501843,"num3":0.494563}...]
写出到表格
public class EsaylExcelMain {
public static void main(String[] args) {
List<BearAlgoExcelVO> list = new ArrayList<>();
for (int i = 0; i < 10; i++) {
BearAlgoExcelVO code = new BearAlgoExcelVO();
code.setName("臭垃圾:"+i);
code.setType("厨余垃圾");
code.setNum(i+3568);
list.add(code);
}
EasyExcel.write("D:/testexcel.xlsx",BearAlgoExcelVO.class).sheet("test01").doWrite(list)
}
}