文章目录
- 1. 复现错误
- 2. 分析错误
- 2.1 导入的代码
- 2.2 DictExcel实体类
- 2.2 表头和标题
- 3. 解决问题
1. 复现错误
使用EasyPoi导入数据时,Excel表格如下图:

但在导入时,出现如下错误:

name为英文名称,在第一列,Excel表格有值,但导入的代码中为null,就很奇怪?
2. 分析错误
2.1 导入的代码
因涉及公司代码,暂时就不贴出全部代码,只贴出部分问题的代码:
@Override
public void importExcel(WorkspaceUser user, MultipartFile file, Boolean coverFlag) {
try {
//【1】首先判断是不是空的文件
if (file.isEmpty()) {
throw new RuntimeException(IMPORT_EMPTY);
}
//【2】检查文件格式
...
//【3】设置EasyPoi参数
ImportParams params = new ImportParams();
//【3.1】设置标题
params.setTitleRows(0);
//【3.2】设置表头
params.setHeadRows(2);
//【3.3】导入数据
List<DictExcel> dictExcels = ExcelImportUtil.importExcel(file.getInputStream(), DictExcel.class, params);
//【4】检查是否存在导入数据
......
//【5】检查是否存在数据问题
......
} catch (Exception e) {
log.error("error on import test excel", e);
throw new RuntimeException(e);
}
}
2.2 DictExcel实体类
@Data
@ExcelTarget("dictExcel")
public class DictExcel {
@Excel(name = "*英文缩写")
private String abbreviation;
@Excel(name = "英文名称")
private String name;
@Excel(name = "*中文名称")
private String cnName;
@Excel(name = "描述")
private String description;
}
2.2 表头和标题
以上代码咋一看没有问题,进而分析Excel的表头和标题:

在有标题时,titleRows设置1,如果没有,设置 0 或者不设置(默认是0)。
因而,上述代码:
-
params.setTitleRows(0);不对,应该是params.setTitleRows(1);,标题设置一行 -
params.setHeadRows(2);不对,应该是params.setHeadRows(1);,表头设置一行
3. 解决问题
-
将
params.setTitleRows(0);修改为是params.setTitleRows(1);,即标题设置一行 -
将
params.setHeadRows(2);修改为params.setHeadRows(1);,即表头设置一行
//省略代码......
ImportParams params = new ImportParams();
//标题设置一行
params.setTitleRows(1);
//表头设置一行
params.setHeadRows(1);
//省略代码......
重新导入数据:















![[leetcode] max-area-of-island](https://img-blog.csdnimg.cn/img_convert/4e8aee3f9a46c1628aa287f62da2e03c.jpeg)



