有时候,我们需要读取excel文件的某个单元格,比如标题,日期等,这要怎么实现呢?
代码
public void importExcelReadRow(String path) {
//读取第一行第一列
EasyExcelCellListener easyExcelCellListener = new EasyExcelCellListener(1, 1);
EasyExcel.read(path, easyExcelCellListener)
//headRowNumber(0)表头所在行要写0,不写的话默认第一行是表头
.headRowNumber(0)
.sheet()
.doReadSync();
String cellValue = easyExcelCellListener.getCellValue();
System.out.println(cellValue);
}
监听器
public class EasyExcelCellListener extends AnalysisEventListener<Map<Integer,String>> {
private String cellValue;
private int targetRow;
private int targetColumn;
private boolean isCellRead = false;
public EasyExcelCellListener(int targetRow, int targetColumn) {
this.targetRow = targetRow;
this.targetColumn = targetColumn;
}
@Override
//invoke方法的参数类型跟随实现的ReadListener的类型
public void invoke(Map<Integer,String> map, AnalysisContext analysisContext) {
if(isCellRead){
return;
}
int currentRow = analysisContext.readRowHolder().getRowIndex()+1;
if(currentRow == targetRow ){
cellValue = map.get(targetColumn-1);
isCellRead = true;
}
}
@Override
public void doAfterAllAnalysed(AnalysisContext analysisContext) {
}
public String getCellValue() {
return cellValue;
}
}
headRowNumber(0)是指定表头所在行,不写的话默认第一行是表头.
实际应用中,如果excel文件的表头是多级表头,第一行是标题,第二行是日期,第三行是表头,需要指定headRowNumber(3),因为表头所在行是第三行.但是第二行和第一行就会直接略过.所以需要重新再读一遍,并指定headRowNumber(0).
如果第一行是表头,想要读取第一行或第一行之后的单元格,就可以在这个监听器中加入存储数据的实现,这样就只需要读一遍文件即可.可以参考我的读取excel的博客.
git仓库:导入导出: 导入导出的实例
更多导出场景:多场景easyExcel导出excel文件(一)-CSDN博客
读取excel场景:多场景easyExcel读取excel文件(二)-CSDN博客
根据模板填充excel:多场景easyExcel根据模板填充excel文件(三)-CSDN博客