一、背景
在项目开发中,经常会遇到导出数据到excel表和利用excel表批量导入数据的需求,最常用的是利用POI进行导出导入操作;
二、遇到的问题
这时候普遍会遇到一个问题:导出的excel表格,你不做任何操作,直接再把表格导进去,此时会获取不到表格里面的数据;
小知识:关于excel表的单元格,一般默认是常规,常规的意思就是:excel表会根据你输入的内容,来给单元格设置类型,以下是单元格的类型
当我们导出的时候,一般会调用 Cell.setCellType(CellType cellType),设置单元格的类型,比如我们这里设置String类型
同时,当我们导入的时候,我们也要调用Cell.setCellType(CellType cellType)方法,为什么要调用呢,因为无论你用java代码把单元格设置成哪种格式,只要你对导出的excel表进行过任何操作,哪怕只是打开重新保存,单元格格式都会被设置成常规,如果不调用Cell.setCellType(CellType cellType)方法,那你在后端就接收不到数据;
那么,如果我不对导出的excel表进行任何操作,而是直接再导入,那么此时,你就不能调用Cell.setCellType(CellType cellType)方法,不然也会读取不到数据,直接调用此方法就能获取值;
但这又会出现一个问题,如果你不知道导入的表是有没有做过修改,此时你可以在读取数据前做一个判断,如果获取到的CellType跟你导出设置的时候不一样,那么证明此excel表格被修改过,因此获取值的时候,要先调用Cell.setCellType(CellType cellType)方法;如果获取的值不一样,证明此excel未被修改,直接获取值就行;
PS:单元格类型如图