NotOLE2FileException при чтении файла xls в apache poi 4.0.1 - PullRequest
0 голосов
/ 07 марта 2019

Я пытаюсь прочитать xls файл в java, используя apache poi 4.0.1

Задача

Когда я пытаюсь прочитать файл, я получаю следующее исключение

org.apache.poi.poifs.filesystem.NotOLE2FileException: Invalid header signature;

Полная трассировка стека

org.apache.poi.poifs.filesystem.NotOLE2FileException: Invalid header signature; read 0x756F4E2C65707954, expected 0xE11AB1A1E011CFD0 - Your file appears not to be a valid OLE2 document
    at org.apache.poi.poifs.storage.HeaderBlock.<init>(HeaderBlock.java:151)
    at org.apache.poi.poifs.storage.HeaderBlock.<init>(HeaderBlock.java:117)
    at org.apache.poi.poifs.filesystem.POIFSFileSystem.<init>(POIFSFileSystem.java:294)
    at org.apache.poi.hssf.usermodel.HSSFWorkbook.<init>(HSSFWorkbook.java:401)
    at org.apache.poi.hssf.usermodel.HSSFWorkbook.<init>(HSSFWorkbook.java:382)
    at com.wild.animal.identifier.DataLoader.loadData(DataLoader.java:27)
    at com.wild.animal.identifier.WildAnimalSearch.main(WildAnimalSearch.java:6)
    at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
    at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.base/java.lang.reflect.Method.invoke(Method.java:566)
    at com.intellij.rt.execution.application.AppMainV2.main(AppMainV2.java:131)

Когда я пытаюсь открыть тот же файл вручную в Excel, я получаю следующее диалоговое окно

enter image description here

Вопрос

Что я делаю не так и как я могу это исправить?

Код

public static void loadData() {

    try {

        File dataFile = new File("Attachment_1551892122.xls");
        FileInputStream fins = new FileInputStream(dataFile);

        HSSFWorkbook workbook = new HSSFWorkbook(fins);
        HSSFSheet sheet = workbook.getSheetAt(0);

        Iterator<Row> rowIterator = sheet.iterator();

        Iterator<Cell> columnIterator;
        Row row;
        Cell column;

        while (rowIterator.hasNext()) {
            row = rowIterator.next();

            columnIterator = row.cellIterator();

            while (columnIterator.hasNext()) {
                column = columnIterator.next();

                switch (column.getCellType()) {
                    case STRING:
                        System.out.print(column.getStringCellValue());
                        break;
                    case BOOLEAN:
                        System.out.print(column.getBooleanCellValue());
                        break;
                    case NUMERIC:
                        System.out.print(column.getNumericCellValue());
                        break;
                }
                System.out.print(" - ");
            }
        }

    } catch (Exception ex) {
        ex.printStackTrace();
    }
}

1 Ответ

0 голосов
/ 07 марта 2019

Как указано в комментарии @AxcelRichter, файл не был файлом Excel, поэтому я создал новый файл Excel, скопировал все данные из старого файла в новый.

Попытался прочитатьновый файл и все заработало !!

...