项目场景:
书接上回,后续解决方案如下:
解决方案:
上篇文章已经确认了是自研的安卓APP导出的.xlsx文档不符合OOXML规范,导致在Web平台不能成功导入数据。
1、前端第一次生成的.xlsx文档如下,用txt打开可以看到是html,根本不是一个符合OOXML规范的.xlsx。
2、真正符合OOXML规范的.xlsx如下,对比之下很明显的的异常
3、前端的开发好兄弟说他是用的跨平台的工具进行的安卓开发,不能使用JS库生成真正符合OOXML规范的.xlsx。于是我想到一个办法,让好兄弟直接生成.txt,然后存储的时候转成.xlsx,虽然这样也不是真正的符合OOXML的.xlsx,但是我就可以使用FileReader直接读取文件信息了。同样使用.txt打开如下:
4、现在就可以轻松读取信息了,贴一下简易代码:
public static List<LabelInit> readFile(MultipartFile file) {
BufferedReader bufferedReader = null;
File file1 = null;
List<LabelInit> dataList = new ArrayList<>();
try {
file1 = convertMultipartFileToFile(file);
FileReader fileReader = new FileReader(file1);
bufferedReader = new BufferedReader(fileReader);
String line;
int s = 0;
while ((line = bufferedReader.readLine()) != null) {
s++;
if (s > 1) {
LabelInit labelInit = new LabelInit();
String[] a = line.split("\t");
labelInit.setXXX(a[0]);
labelInit.setXXXX(a[1]);
labelInit.setXXXXX(Integer.valueOf(a[2]));
dataList.add(labelInit);
}
}
} catch (Exception e) {
log.error("读取标签导入文件错误!");
// e.printStackTrace();
} finally {
if (bufferedReader != null) {
try {
bufferedReader.close();
// 删除中间文件
if (file1.exists()) {
file1.delete();
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
return dataList;
}
// 将MultipartFile对象的输入流转换为File对象
private static File convertMultipartFileToFile(MultipartFile multipartFile) throws IOException {
File file = new File(multipartFile.getOriginalFilename());
try (OutputStream outputStream = new FileOutputStream(file)) {
outputStream.write(multipartFile.getBytes());
}
return file;
}
总结:
问题成功解决。