7
建议先去看文档 快速开始 、常见问题 触发场景描述 使用easyexcel生成一个xlsx文件,再用easyexcel读取这个excel文件,会出现ApproximateTotalRowNumber为1的情况,实际总数>1 触发Bug的代码
ReadTest ===================
public class ReadTest {
private static final Logger LOGGER = LoggerFactory.getLogger(ReadTest.class);
/**
* 不创建对象的读
*/
@Test
public void noModelRead() {
String fileName = "C:\\Users\\Thinkpad\\Desktop\\20210107.xlsx";
// 这里 只要,然后读取第一个sheet 同步读取会自动finish
EasyExcel.read(fileName, new NoModelDataListener()).sheet().doRead();
}
@Test
public void export() {
String fileName = "C:\\Users\\Thinkpad\\Desktop\\20210107.xlsx";
// EasyExcel.write(fileName, DemoData.class).sheet("模板").doWrite(data());
// 这里 需要指定写用哪个class去写
ExcelWriter excelWriter = null;
try {
excelWriter = EasyExcel.write(fileName, DemoData.class).build();
WriteSheet writeSheet = EasyExcel.writerSheet("模板").build();
excelWriter.write(data(), writeSheet);
} finally {
// 千万别忘记finish 会帮忙关闭流
if (excelWriter != null) {
excelWriter.finish();
}
}
}
private static List<DemoData> data() {
List<DemoData> list = new ArrayList<DemoData>();
for (int i = 0; i < 10; i++) {
DemoData data = new DemoData();
data.setName("字符串" + i);
data.setDate(new Date());
data.setDoubleData(0.56);
list.add(data);
}
return list;
}
}
class DemoData{
private String name;
private Date date;
private double doubleData;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Date getDate() {
return date;
}
public void setDate(Date date) {
this.date = date;
}
public double getDoubleData() {
return doubleData;
}
public void setDoubleData(double doubleData) {
this.doubleData = doubleData;
}
}
NoModelDataListener ==========
public class NoModelDataListener extends AnalysisEventListener<Map<Integer, String>> {
private static final Logger LOGGER = LoggerFactory.getLogger(NoModelDataListener.class);
/**
* 每隔5条存储数据库,实际使用中可以3000条,然后清理list ,方便内存回收
*/
private static final int BATCH_COUNT = 5;
List<Map<Integer, String>> list = new ArrayList<Map<Integer, String>>();
@Override
public void invoke(Map<Integer, String> data, AnalysisContext context) {
LOGGER.info("总数为{},解析到一条数据:{}",context.readSheetHolder().getApproximateTotalRowNumber(), JSON.toJSONString(data));
list.add(data);
if (list.size() >= BATCH_COUNT) {
saveData();
list.clear();
}
}
@Override
public void doAfterAllAnalysed(AnalysisContext context) {
saveData();
LOGGER.info("所有数据解析完成!");
}
/**
* 加上存储数据库
*/
private void saveData() {
LOGGER.info("{}条数据,开始存储数据库!", list.size());
LOGGER.info("存储数据库成功!");
}
}
提示的异常或者没有达到的效果