Java解析或者生成Excel比较常用的框架有Apache poi、jxl。后来接触了easyExcel感觉使用起来更加方便。因此以下为一个简单的使用案例。
引入easyExcel依赖
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>easyexcel</artifactId>
<version>2.1.6</version>
</dependency>
定义导出数据内容
创建导出的数据类,同时这也是导出到Excel的数据模板。
@ContentRowHeight(20)
@HeadRowHeight(25)
@ColumnWidth(25)
public class MessageData{
@ExcelProperty(value ="电话号码", index = 0)
private String mobileNo;
@ExcelProperty(value = "短信内容", index = 1)
private String content;
public String getMobileNo(){return mobileNo;}
public void setMobileNo(String mobiLeNo){this.mobileNo = mobiLeNo;}
public String getContent(){return content;}
public void setContent(String content){ this.content = content;}
@0verride
public String toString(){
return "MessageData{" +
"mobileNo='" + mobileNo +'\''+
",content='" + content +'\''+
'}';
}
}
-
@ExcelProperty:value是显示在Excel表格中的表头,index是显示在Excel表格中的列的位置。
-
@ContentRowHeight(20) @HeadRowHeight(25) @ColumnWidth(25) 设置表头和单元格的一些属性。
导出数据到excel:
public static void exportFile(String filePath, int dataNum) {
long start = System.currentTimeMiLLis();
File file = new File(fiLePath);
List assetExcelVos = new ArrayList<>();
for(int i = 0; i < dataNum; i++){
MessageData messageData = new MessageData();
messageData.setMobileNo(MobileNoUtil.getMobiLeNoRandom());
messageData.setContent("恭喜您已获我行授信768100元,当天可出结果,随借随还,先息后本。办理回复Y,详询186xxxx退订回复T 【我家银行】");
assetExcelVos.add(messageData);
}
//生成本地文件
EasyExcel.write(file.getAbsolutePath(),MessageData.class).sheet( sheetName: "手工短信").doWrite(assetExcelVos);
long end = System.currentTimeMiLLis();
System.out.println("执行时长:" +(end - start)+"毫秒。");
}
-
filePath:输出的文件路径。
-
dataNum:数据条数。
导入excel数据:
public static void readFile(String filePath) {
List<MessageData> assetExcelList = new ArrayList<>();
EasyExcel.read(fiLePath, MessageData.class, new AnalysisEventListener<MessageData>() {
@Override
public void invoke(MessageData messageData, AnaLysisContext argl) {
//读取每条数据
assetExcelList.add(messageData);
}
@Override
public void invokeHeadMap(Map<Integer, String> headMap, AnaLysisContext context) {
//读取到列头
System.out.println(headMap); }
@Override
public void doAfterAllAnalysed^natysisContext argd) {
//读取完毕
System.out.printIn("END");
}
}).sheet().doRead();
}
-
filePath:待读取文件路径 。
数据输出到文件的效果
经过测试,一般情况下生成的100W如图所示内容文件时间约为20秒左右,解析100W数据需要时间在15秒左右。解析生成文件和解析速度还是很快的,比之前用过的一些的其他的工具要简单方便。