2017-01-16 60 views
3

我想用apache POI讀取一個excel文件。但是,在運行時我得到一個NotOLE2FileException。 I've found this question,這是相似的,但這裏的錯誤顯然是根本沒有文件。我實際上有一個文件,並有一個簽名,但我不知道是什麼樣的簽名,或者我如何讀取文件。 Google沒有結果。什麼樣的標題簽名是0x7473657571655220?

我的代碼:

File file = new File("mypath/myfile.xls"); 
if(!file.exists()){ 
    throw new IllegalArgumentException("File does not exist"); 
} 
try { 
    Workbook wb = WorkbookFactory.create(file); //<--- throws exception 

//etc... 

錯誤:

org.apache.poi.poifs.filesystem.NotOLE2FileException: Invalid header signature; read 0x7473657571655220, expected 0xE11AB1A1E011CFD0 - Your file appears not to be a valid OLE2 document 
    at org.apache.poi.poifs.storage.HeaderBlock.<init>(HeaderBlock.java:181) 
    at org.apache.poi.poifs.storage.HeaderBlock.<init>(HeaderBlock.java:140) 
    at org.apache.poi.poifs.filesystem.NPOIFSFileSystem.<init>(NPOIFSFileSystem.java:232) 
    at org.apache.poi.poifs.filesystem.NPOIFSFileSystem.<init>(NPOIFSFileSystem.java:168) 
    at org.apache.poi.ss.usermodel.WorkbookFactory.create(WorkbookFactory.java:250) 
    at org.apache.poi.ss.usermodel.WorkbookFactory.create(WorkbookFactory.java:222) 
    at org.apache.poi.ss.usermodel.WorkbookFactory.create(WorkbookFactory.java:201) 
    at providers.ExcelFileReader.getRequestsFromExcelFile(ExcelFileReader.java:25) 
    at Test.main(Test.java:13) 

我只需要明白,爲什麼我的XLS文件有一個奇怪的標題,那意味着什麼,才能夠解決這一。有人知道嗎?可能有任何解決辦法?

更新:據我所看到的,它是一個完全有效的Excel文件: enter image description here

+0

哇。該文件確實是我從中提取數據的系統的請求列表。我只是這麼做的。我對excel文件格式在記事本中的顯示方式沒有太多經驗,但相關文件顯示爲製表符分隔的純文本文件,其中每一行都是新行。 – KjetilNordin

+0

好像。你幾乎已經在這裏回答了我的問題。你會用簡短的​​答案寫下這些嗎?解密簽名非常酷:)。而現在我只需要弄清楚如何讀取一個製表符分隔的文件。迄今爲止解決的問題。 – KjetilNordin

回答

4

ASCII等效的0x74736575716552"tseuqeR""Request"反向拼寫)。看起來您有一個純文本文件,您要求POI以Excel文件的形式打開。

我檢查Wikipedia's List of file signatures第一,當我沒有發現任何使用的ASCII表(man ascii如果你是在Linux上,online here其他方式),以每2個十六進制數字轉換爲相應的字符。

+0

很好的答案。該文件似乎是一個製表符分隔純文本文件,而不是一個Excel文件。它是從名爲'Request'的數據庫表中提取的數據。謝謝你的幫助。 – KjetilNordin