为了让项目更加完善,提升用户感知,需要提供批量导入数据的功能,让用户将大量数据直接写入文件,然后上传文件到系统,由系统完成批量数据导入的操作,考虑到实际情况,选择使用CSV文件作为文件上传格式,实际使用中遇到了一些CSV文件的问题,记录如下:
1.为什么选CSV文件
逗号分隔值(Comma-Separated Values,CSV,有时也称为字符分隔值,因为分隔字符也可以不是逗号),其文件以纯文本形式存储表格数据(数字和文本)。纯文本更加方便操作,notpad可以直接打开写入,因为某些时候,计算机上可能没有安装Office或者WPS;另外,CSV可以用Office或者WPS打开,可以以表格的形式操作,和Excel一样,非常方便用户批量添加数据,快速复制等功能与Excel文档没有区别;最重要的是,可以简化开发,直接以文本格式读取,然后通过“逗号”分割数据,切割提前数据非常方便。
2.遇到的问题:
有时候,系统读取CSV文件报错,导入不了数据,而有时候又正常。经过分析对比,发现是CSV文件有问题,这个问题非常隐蔽,不容易发现,详细分析如下。
2-1.下面这个是正常的CSV文件,用Excel或者notpad都可以打开,notpad中数据是以“逗号”分开的。
2-2.下面是有问题的CSV文件,先用notpad打开,仔细看,最后一行,没有数据,只有4个“逗号”,如果用Excel打开,就看不见最后那条数据(就是全部是“逗号”那条),表面一共4条数据,实际却有5条数据,所以系统读取CSV文件批量导入数据会出错。
3.问题实质
其实这是Excel的问题,Excel为了提供了丰富强大的功能,实际上在文件中保存了一些额外的信息,这个和Word一样的,我们用WPS打开doc文档,有些功能样式WPS不支持,文档就会乱,因为那些额外的信息WPS处理不了,又不能删除,因为那也是文件的一部分。同样的,看下面这张图,我们在第5行,什么数据也不输入,但是标一个黄色,这样用notpad打开后,黄色标记notpad不支持,但是确实有数据,所以是一共是5条数据(多了全部是“逗号”那条,见上面那张图),同时,虽然notpad虽然不支持,但是它也尽力去读取这条数据,造成只有黄色标记的这行数据乱了,我们再用Excel打开,会发现只有4条数据(见最后那张图),黄色标记的那条不见了(被notpad修改了数据)。这样,当用户用Excel操作时,就可能不小心加入了额外的样式和特效,表面上没有问题,但是,实际上却存在非法格式数据,造成系统读取数据失败,批量导入失败。所以要提醒用户,上传文件前,需要通过notpad检查数据,及时去掉额外的数据。