1.使用EasyExcel将数据写入本地文件
File fileName = new File(System.getProperty("java.io.tmpdir")+"投诉记录"+System.currentTimeMillis()+ ".xlsx");
ExcelWriter excelWriter = EasyExcel.write(fileName, TaskComplaintRecord.class).build();
WriteSheet writeSheet = EasyExcel.writerSheet("投诉记录").build();
//将TaskComplaintRecord类型集合complaintRecordList写入fileName文件writeSheet
excelWriter.write(complaintRecordList, writeSheet);
//关流
excelWriter.finish();
2.使用EasyExcel将数据响应给前端浏览器下载
//response输出文件流
response.setContentType("application/vnd.ms-excel");
response.setCharacterEncoding("UTF-8");
response.setHeader("Content-Disposition", "attachment; filename=" + URLEncoder.encode("投诉记录.xlsx", "UTF-8"));
//写入表头,模板,表数据
EasyExcel.write(response.getOutputStream(),TaskComplaintRecord.class).sheet("投诉记录").doWrite(complaintRecordList);
3.使用EasyExcel读取excel数据
配置读取文件监听
public final class ExcelListener<T> extends AnalysisEventListener<T> {
/**
* 自定义用于暂时存储data
* 可以通过实例获取该值
*/
private List<T> datas = new ArrayList<>();
/**
* 每解析一行都会回调invoke()方法
*
* @param object 读取后的数据对象
* @param context 内容
*/
@Override
@SuppressWarnings("unchecked")
public void invoke(Object object, AnalysisContext context) {
T map = (T) object;
//数据存储到list,供批量处理,或后续自己业务逻辑处理。
datas.add(map);
}
@Override
public void doAfterAllAnalysed(AnalysisContext context) {
//解析结束销毁不用的资源
//注意不要调用datas.clear(),否则getDatas为null
}
/**
* 返回数据
*
* @return 返回读取的数据集合
**/
public List<T> getDatas() {
return datas;
}
/**
* 设置读取的数据集合
*
* @param datas 设置读取的数据集合
**/
public void setDatas(List<T> datas) {
this.datas = datas;
}
}
业务层读取方法
InputStream fis = new FileInputStream("D:\\工作文档\\录音记录_20210727.xlsx");
ExcelListener<Map<String,Object>> listener = new ExcelListener<Map<String,Object>>();
ExcelReader excelReader = EasyExcelFactory.read(fis, null, listener).headRowNumber(0).build();
excelReader.readAll();
List<Map<String,Object>> listMap = listener.getDatas();
//一定要记得关闭流
excelReader.finish();