Файл поврежден при использовании outputtream для загрузки - PullRequest
0 голосов
/ 30 мая 2018

Каждый раз, когда я загружаю Excel с частичными данными, загруженный файл поврежден, и я не могу использовать этот загруженный файл в рабочей книге (в некоторых случаях это тоже работает, я не знаю почему).И даже тогда я открываю это время, в Excel отображается сообщение о поврежденном файле.Вот фрагмент

InputStream stream = file.getInputStream();


OutputStream os = new FileOutputStream("path_to_xlsFile.xls");
BufferedOutputStream bos = new BufferedOutputStream(os);
int bytesRead;
byte[] buffer = new byte[8192];

while ((bytesRead = stream.read(buffer, 0, 8192)) != -1) {
       bos.write(buffer, 0, bytesRead);
 }
bos.flush();
bos.close();
os.close();
stream.close();

Ошибка, которую я получаю при открытии книги через библиотеку aspose, для того же загруженного файла:

java.lang.IllegalStateException: The FAT in the structured storage document seems to be corrupted.
at com.aspose.cells.py.b(Unknown Source)
at com.aspose.cells.py.b(Unknown Source)
at com.aspose.cells.py.<init>(Unknown Source)
at com.aspose.cells.Workbook.a(Unknown Source)
at com.aspose.cells.Workbook.open(Unknown Source)

или

java.lang.IllegalStateException: The structured storage seems to be corrupt.
at com.aspose.cells.mm.<init>(Unknown Source)
at com.aspose.cells.py.c(Unknown Source)
at com.aspose.cells.py.b(Unknown Source)
at com.aspose.cells.py.<init>(Unknown Source)
at com.aspose.cells.Workbook.a(Unknown Source)
at com.aspose.cells.Workbook.open(Unknown Source)

или

java.lang.IllegalArgumentException: length
at com.aspose.cells.b.a.d.h.b(Unknown Source)
at com.aspose.cells.py.c(Unknown Source)
at com.aspose.cells.py.b(Unknown Source)
at com.aspose.cells.py.<init>(Unknown Source)
at com.aspose.cells.Workbook.a(Unknown Source)
at com.aspose.cells.Workbook.open(Unknown Source)

Редактировать

Если я использую file.transferTo (outputFile), то и для нескольких файлов я получаю это исключение

java.lang.IllegalStateException: The FAT in the structured storage document seems to be corrupted.
at com.aspose.cells.py.b(Unknown Source)
at com.aspose.cells.py.b(Unknown Source)
at com.aspose.cells.py.<init>(Unknown Source)
at com.aspose.cells.Workbook.a(Unknown Source)
at com.aspose.cells.Workbook.open(Unknown Source)

1 Ответ

0 голосов
/ 30 мая 2018

Что ж, похоже, вы получаете некоторую часть данных из файла шаблона XLS, что может свести на нет / ухудшить общие спецификации или стандарты формата файлов Excel.Таким образом, извлеченный файл в байтовом массиве (или потоке) не будет соответствовать структуре или правилам формата файлов MS Excel.Короче говоря, файл будет поврежден, и MS Excel также отображает сообщения об ошибках при открытии файла в него, как вы упомянули.Это может не быть проблемой с API Aspose.Cells.Не могли бы вы просто попробовать следующие примеры сегментов кода (любой из двух), если он работает нормально: например, пример кода:

1)
Path path = Paths.get("path_to_xlsFile.xls"); 
ByteArrayInputStream stream = new ByteArrayInputStream(Files.readAllBytes(path)); 

Workbook workbook = new Workbook(stream); 
.........

2)
String testFileTemplate = "path_to_xlsFile.xls"; 
FileInputStream fis = new FileInputStream(new File(testFileTemplate)); 
Workbook workbook = new Workbook(fis); 

Я работаю разработчиком / евангелистом поддержки в Aspose.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...