文章目录
- 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);
//省略代码......
重新导入数据: