1. 程式人生 > >解決POI讀取EXCEL檔案出錯的問題

解決POI讀取EXCEL檔案出錯的問題

有一個專案要在J2EE後臺讀取EXCEL中的內容,調研後決定採用Apache POI來處理這一問題。

一開始先自己用Excel 2003寫了一個測試檔案,匯入POI介面時是能夠正常讀取Excel檔案的。

但後來,使用客戶提供的Excel檔案時,出現瞭如下的錯誤:

    Invalid header signature; read 4503599627764745, expected -2226271756974174256

經過分析得知,客戶的Excel檔案是從第三方軟體匯出的,大約是Excel 4.0或者根本不合標準的檔案頭。簡單的解決辦法就是用Excel2003開啟客戶提供的檔案,然後另存為Excel 2003格式,檔案頭就可以得到修復,用POI開啟就沒有問題了。

但是,客戶是對電腦非常不熟悉的人,讓他們作此操作真是非常麻煩,而且還要安裝了Office 2003才行。後來找到一個解決辦法:

發現了一款叫Advanced Excel Repair的軟體,能夠對各個版本的、損壞的Excel都做出有效的修復,最後修復為Excel 2003格式。修復後的Excel檔案就可以讓POI正常讀取、解析了。

另外的問題是,AER軟體是共享軟體,需要下載破解版的,下載地址是:http://www.hanzify.org/index.php?Go=Show::List&ID=8805。還有就是,該軟體雖然有命令列模式的執行辦法,但修復結束後會彈出一個對話方塊讓使用者確認。在後臺自動執行的方式下,會生成該程式的多個例項,消耗系統資源。解決辦法就是,讓Java等待一段時間後,特別殺掉這個程序,讓其釋放資源。

發現了該解決方案的一個重要依賴,就是要安裝Excel 2003以上版本,估計這個AER軟體要呼叫相關的Excel Dll來修復檔案。這一論斷已經經過驗證。

另外,上述漢化破解版本的AER可能含有後門或者病毒,值得注意!

Java程式碼如下: 

 

相關推薦

解決POI讀取EXCEL檔案出錯的問題

有一個專案要在J2EE後臺讀取EXCEL中的內容,調研後決定採用Apache POI來處理這一問題。 一開始先自己用Excel 2003寫了一個測試檔案,匯入POI介面時是能夠正常讀取Excel檔案的。 但後來,使用客戶提供的Excel檔案時,出現瞭如下的錯誤:    

java利用poi讀取Excel檔案

java讀取Excel檔案,筆者認為:從結構上來看,Excel檔案是由一個一個的單元格組成的,有點像細胞cell,逐行的排列。那麼我們讀的時候也應該逐行逐行的讀,從左到右的尋找每一個cell。一、例項程式碼: 只是實現了一種方式,因為依照讀取內容的不同,讀取的後想要的操作不同,因此不能苟同全部,只是方法是相

友好解決POI匯入Excel檔案行是不是為空

   繼 解決POI讀取Excel如何判斷行是不是為空 後發現了一個問題。這個是一個銀行的需求,有20萬個客戶的資料要匯入系統,但有的資料是有問題的(不能正常匯入),但也有能正常匯入的。現在的問題是怎麼知道那些資料匯入了,那些沒有匯入呢?    全部能正常匯入: 全部失敗: 下面來看一下

解決POI讀取Excel如何判斷行是不是為空

在作Excel表匯入資料庫的時候要統計成功匯入了多少條,失敗了多少條。 問題一:Excel表裡有225行,只有3行是有資料的,但是我在讀Excel表的時候它連沒有資料的行也讀進來了。 問題二:如果你是選擇這個行,然後按del鍵del的,那麼這樣判斷就是不為空(雖然用del來刪除資料,但是實際上物件都還在,

java使用POI讀取excel檔案,相容xls和xlsx

public List<Double> readExcels(InputStream is)throws Exception{List<Double> xlsxList = new ArrayList<Double>();    try {             if(i

struts:poi讀取excel檔案(相容2003、2007)

1、jsp程式碼: <div style="margin-bottom:10px;"> <input type="file" name="filedata" id="file" multiple/> <input type="button" val

解決java讀取excel檔案有小數點的問題

package com.hmy.ssh.myMethod; import java.io.FileInputStream; import java.io.IOException; import java.io.InputStream; import java.util.ArrayList; import

數學建模系列- 解決Matlab讀取Excel檔案報錯:Could not start Excel server for import問題

今天在進行Matlab程式設計的時,用之前寫的程式碼在自己機子上執行失敗,報錯為Could not start Excel server for import, 十分鬱悶。於是在網上找了些資料,總算解決了問題,現在將幾種解決方法寫下來,希望能夠幫助遇到同樣

poi 讀取Excel檔案模板生成報表檔案

採用poi實現報表功能。 支援excel中多sheet,支援單個sheet頁中多表格 1.將excel模板檔案中的頭、底部的內容讀入記憶體  2.提取模板列資料、格式  3.建立新的XSSFWorkbook物件 4.新增資料(報表內容,程式碼未體現) 5.將新檔案寫入到本地

poi讀取Excel檔案執行到row.getCell(0).getStringCellValue()異常

環境說明 POI:poi.3.1.1.jar Excel檔案: 具體問題 測試匯入Excel檔案,並將檔案資料批量匯入資料庫功能時,一直無法成功匯入,不打斷點沒有拋任

poi讀取excel檔案模板並填入資料(合併sheet)並且下載

今天做一個到處excel的功能,涉及到多表查詢,然後讀取excel模板檔案並寫入查詢到的資料,並且要合併sheet,合併單元格,下載等功能,附上程式碼: Conreoller類: /**      * 匯出excel      */     public ModelAnd

讀取Excel檔案時出現null的解決方法

在讀取Excel檔案時常常出現讀取某些欄位為null的情況,其實是有值,原因是讀取檔案時,Excel會以第一行的資料型別為參考,如果後邊的與其不一致,則會出現些問題。 以下一個朋友的解決方案,他的Excel檔案的連線串寫作如下。據說可以強制資料為字串,具體我已測試過。僅供參考

Java模組 -- 讀取Excel檔案寫入資料庫 Mybatis , POI , JXL

廢話不多說,直接上程式碼結構圖 所用到的lib包 Students 實體類 package com.test.model; public class Students { private int id; private String username; pr

java 操作 poi 解析、讀取 Excel 檔案

讀取Excel 我這裡是用的POI 的jar包 dom4j-1.6.1.jar         poi-3.10.1-20140818.jar        poi-excelant-3.10.1-20140818.jar    xmlbeans-2.6.0.jar po

poi讀取Excel時日期為數字 的解決方法

在使用poi解析Excel檔案時,會發現,表格中的日期解析出來是一個數字,如下: 這是Excel表格的截圖: 這是poi解析出來的這個日期的結果: 我們期望這個日期解析出來是:2015/8/21,

應用poi外掛讀取excel檔案(通用)

有時需要將excel檔案的資料匯入到資料庫中,如何能快速而簡單的將excel檔案匯入對不會的攻城獅們尤為重要,下面就在java專案中實現了該功能 `package com.liuyegongzhi; import org.apache.poi.openxml

使用poi 匯出Excel檔案解決中文名亂碼

使用poi 匯出Excel檔案  並解決中文名亂碼 第一種方法: @Action("subAreaAction_exportXLs") public String exportXLs() throws IOException{ List<SubArea>l

java使用POI實現excel檔案讀取,相容字尾名xls和xlsx

首先,引入所需的jar包: 如果是maven管理專案的jar包,只需在pom.xml中加上: <!-- https://mvnrepository.com/artifact/org.apache.poi/poi --> <dependency>

基於.NET的程式讀取Excel檔案解決方案

[TOC] shanzm-2020年12月8日 23:48:11 ### 0. 前言 以前基於 .NET 開發的程式,我一般都是使用NPOI操作Excel檔案, 因為我的程式讀取的是另外一個成品WMS匯出的Excel檔案(至於為什麼不直接從資料庫獲取該WMS匯出到Excel的資料,此中原因,一言難盡

POI讀取Excel——(四)

getc string args pan mx2 edr ccm div cfm package POI; import java.io.File; import java.io.IOException; import org.apache.commons.io.Fi