Исключение в экземпляре книги Excel из InputStream, отсутствуют данные? - PullRequest
0 голосов
/ 21 января 2012

Эволюция с: предыдущая тема , поскольку проблема просто переросла в нечто большее:

Я применил совет Андрея и при записи в файл я получаю две проблемы одновременно:

Во-первых, он пишет, но только в трех столбцах вместо четырех, когда я делаю это:

         dataSheet =  wb.getSheetAt(0);
        HSSFRow dataRow1 = dataSheet.createRow(row);
        dataRow1.createCell(0).setCellValue(requestQ);
        dataRow1.createCell(1).setCellValue(replyQ);
        dataRow1.createCell(2).setCellValue(messagetobesent);
        dataRow1.createCell(3).setCellValue(messageToBeRecvd);
        fileOutputStream = new FileOutputStream(fileName);
        wb.write(fileOutputStream);

Во-вторых, в некоторых местах это дает мне исключение (см. Последнее), когда я делаю это:

FileInputStream is= new FileInputStream(filename);
            wbook = new HSSFWorkbook(is);

Исключение:

R org.apache.poi.hssf.record.RecordInputStream $ Lef toverDataException: при инициализации записи 0x3C осталось 5414 байт, оставшихся для чтения.[21.01.12 12: 17: 26: 983 AST] 00000021 SystemErr R в org.apache.poi.hssf.record.RecordInputStream .hasNextRecord (RecordInputStream.java:155) [21.01.12 12:17:26: 983 AST] 00000021 SystemErr R в org.apache.poi.hssf.record.RecordFactoryInpu tStream.nextRecord (RecordFactoryInputStream.java:216) [21.01.12 12: 17: 26: 983 AST] 00000021 SystemErr R в орг.apache.poi.hssf.record.RecordFactory.cre ateRecords (RecordFactory.java:392) [21.01.12 12: 17: 26: 983 AST] 00000021 SystemErr R в org.apache.poi.hssf.usermodel.HSSFWorkbook. (HSSFWorkbook.java:276)

Любые намеки будут оценены: благодаря моему поиску в Google была эта проблема, но она была исправлена, поэтому это моя собственная ошибка, в которой, я думаю, яЯ использую POI-3.6-2009-12-14.jar

Заранее спасибо.

Ответ:

ОК!вот и все, я понятия не имею, почему четвертая ячейка не была добавлена ​​(это была моя логика, возможно, не имеющая ничего общего с плохим Fileoutputstream.flush).

Мне показалось, что после определенной вставки / записиошибка приближалась.Так что сделал небольшую корректировку и записал каждую запись в отдельный файл.Теперь я получаю все свои ответы.и тот, который имел проблему хорошо, это был файл на 325 КБ, который был слишком слишком большим по сравнению с остальными файлами Excel для других записей.

Так что я думаю, что могу заключить (поскольку я не былв состоянии увидеть данные, поступающие в этой конкретной записи, подробно), что был большой объект, как-то, и данные для ячейки были ЕДИНСТВЕННЫМ под 37000 символов, но с большим количеством элементов.Почему я говорю это, потому что были другие посты, которые даже не были написаны, потому что данные были простыми символами, но были меньше, чем выделенный размер ячейки в excel.Таким образом, эта конкретная запись НЕ была тем же самым случаем символов, являющихся больше чем 37 000, но некоторым другим случаем.После этого файл не закрывался, и поток, пытающийся записать в него, все еще записывал или умирал, пытаясь, и данные все еще были там для записи в неполном состоянии.

Так что в случае, если кто-то получит это исключение вих POI LIFE, возможно, что данные, которые вы пишете, на самом деле слишком велики по размеру, а не просто символы.

...