Springboot有关(假的)excel导入的问题
今天在导入excel时遇到了以下报错。
Invalid header signature; read 0xF1CECEC8B7C1B5D1, expected 0xE11AB1A1E011CFD0 - Your file appears not to be a valid OLE2 document
这个excel是由LabVIEW生成的,由于文件格式不符,导致字节流能够正常读入,但是在转换为workbook时报错。
workbook = new HSSFWorkbook(inputStream);
解决方法:将文件另存为,然后导入另存的文件。
但是由于我的文件是大量产生的,不可能让用户挨个另存为,这个方法只在文件少时适用。
将LabVIEW生成的excel另存为,就可以看到它原本的文件类型为文本文件,且用制表符分割的。
这里有个思路,将文本文件转换为真正的excel,然后再读取excel里的数据。然后我搜了一下.txt转.xls的方法,发现还是需要将文本文件的每一个数据读出来,然后写入excel中。直接读取文本文件的数据比转换成excel再读取容易很多,于是我就直接利用文本文件读取了。
放一下txt导入数据的数据库的代码,这里的Entity和Service都改成自己的Entity和Service
public R trainingindo(@RequestParam MultipartFile file) throws Exception{
// 创建List保存从文件中读取的文件
List<Entity> list = new ArrayList<>();
// 截断数据
BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(file.getInputStream()));
String line = "";
// 从第二行开始读起
while ((line = bufferedReader.readLine()) != null){
String[] arr = line.split("\t");
Entity entity = new Entity(Long.parseLong(arr[0]),Double.parseDouble(arr[1]),Double.parseDouble(arr[2]),Double.parseDouble(arr[3]));
list.add(entity);
}
// 保存到数据库对应的表中
Service.saveBatch(list,list.size());
return R.ok();
}
Service层里继承了IService,能够批量存数据到数据库当中。