1

Javaを使用して.csvで終わるExcelファイルを解析しようとしています。いくつかの調査を行った後、ApachePOI ライブラリをダウンロードしてインストールしました。ただし、解析する Excel ファイルを開こうとするたびに、次のエラーが発生します。

    Exception in thread "main" java.io.IOException: Invalid header signature; read 0x4E2C53454C494D53, expected 0xE11AB1A1E011CFD0
at org.apache.poi.poifs.storage.HeaderBlock.<init>(HeaderBlock.java:140)
at org.apache.poi.poifs.storage.HeaderBlock.<init>(HeaderBlock.java:104)
at org.apache.poi.poifs.filesystem.POIFSFileSystem.<init>(POIFSFileSystem.java:138)
at org.apache.poi.hssf.usermodel.HSSFWorkbook.<init>(HSSFWorkbook.java:322)
at org.apache.poi.hssf.usermodel.HSSFWorkbook.<init>(HSSFWorkbook.java:303)
at excellibrarycreation.ExcelFileProcesser.processFile(ExcelFileProcesser.java:40)
at excellibrarycreation.ExcelLibraryCreation.main(ExcelLibraryCreation.java:24)
    Java Result: 1 

Stack Overflow や他のサイトでこの問題についてさらに調査しましたが、OLE2 ファイルやヘッダー署名などについて聞いたことがなかったため、答えは非常にわかりにくいものでした。誰かが問題を簡単に説明できれば、本当に感謝しています。これが私のコードです:

    public void processFile(File excelWorkbook) throws FileNotFoundException, IOException{
         System.out.println("Processing file...");
         FileInputStream fileInputStream = new FileInputStream(excelWorkbook);
         HSSFWorkbook workbook = new HSSFWorkbook(fileInputStream);
         HSSFSheet firstSheet = workbook.getSheetAt(0);
         Iterator<Row> rowIterator = firstSheet.iterator();
          while (rowIterator.hasNext()){
               Row row = rowIterator.next();

               Iterator<org.apache.poi.ss.usermodel.Cell> cellIterator = row.cellIterator();

             while(cellIterator.hasNext()){
               org.apache.poi.ss.usermodel.Cell cell = cellIterator.next();
               switch(cell.getCellType()){
                  case Cell.CELL_TYPE_BOOLEAN:
                      System.out.println("Cell type is boolean: "+cell.getBooleanCellValue());
                      break;
                  case Cell.CELL_TYPE_NUMERIC:
                      System.out.println("Cell type is numeric: "+cell.getNumericCellValue());
                      break;
                  case Cell.CELL_TYPE_STRING:
                      System.out.println("Cell type is String: "+cell.getStringCellValue());
                      break;
            }
            System.out.println("");
        }
        fileInputStream.close();
    }
}
4

2 に答える 2

1

実際の .xls Excel ファイルを開こうとしていない場合、POI の HSSF はまったく役に立ちません。HSSF は、97 Excel 形式の .xls ファイルを開くために使用されます。他の何のためにも機能しません。コンマ区切りの .csv ファイルを使用する場合は、Paul Vargas のアドバイスを受けてください。

于 2013-07-11T20:38:03.490 に答える