我在java中使用JexcelAPI來操作excel文件。我需要創建一個Workbook對象的兩個副本,一個是用於進一步操作的WritableWorkbook,一個是從原始Workbook複製並保存它,以便萬一原始對象發生任何變化並且它是可寫副本,我將擁有備份。直到最近我開始收到一個ArrayIndexOutOfBOunds異常,這已經工作了很長時間。堆棧跟蹤看起來是這樣的:在JexcelAPI中的方法Workbook.createWorkbook方法拋出indexoutofbounds異常
異常線程 「main」 java.lang.IndexOutOfBoundsException:指數:62,大小:54 在java.util.ArrayList.rangeCheck(ArrayList.java:604) 是java。 util.ArrayList.get(ArrayList.java:382) at jxl.biff.FormattingRecords.getXFRecord(FormattingRecords.java:338) at jxl.read.biff.CellValue.getCellFormat(CellValue.java:144) at jxl。 write.biff.CellValue。(CellValue.java:129) at jxl.write.biff.LabelRecord。(LabelRecord.java:116) at jxl.write.Label。(Label.java:79) at jxl.write .biff.SheetCopier.shallowCopyCell(SheetCopier.java:808) at jxl.write.biff.SheetCopi er.shallowCopyCells(SheetCopier.java:934) at jxl.write.biff.SheetCopier.copySheet(SheetCopier.java:219) at jxl.write.biff.WritableSheetImpl.copy(WritableSheetImpl.java:1584) at jxl。 write.biff.WritableWorkbookImpl.copyWorkbook(WritableWorkbookImpl.java:971) at jxl.write.biff.WritableWorkbookImpl。(WritableWorkbookImpl.java:343) at jxl.Workbook.createWorkbook(Workbook.java:339) at jxl.Workbook .createWorkbook(Workbook.java:320) 在musicpred.musicpreddebugtest.main(musicpreddebugtest.java:17) Java結果:1
我都歸結問題,以下面的代碼片段:
package musicpred;
import java.io.File;
import jxl.Workbook;
import jxl.write.WritableWorkbook;
import java.io.*;
import jxl.read.biff.BiffException;
import jxl.write.*;
public class musicpreddebugtest{
public static void main(String[] args) throws IOException, BiffException,
WriteException{
Workbook workbook = Workbook.getWorkbook(new File ("NBSCOMBINED.xls"));
WritableWorkbook backup = Workbook.createWorkbook(new File("BACKUP.xls"),workbook);
backup.write();
backup.close();
WritableWorkbook writableWorkbook = Workbook.createWorkbook(new
File("NBSCOMBINEDW.xls"), workbook);
}
}
我注意到我可以同時創建兩個WritableWorkbooks,甚至可以寫()第二個(稱爲「writableWorkbook」),但由於某種原因,當我嘗試寫入()第二個(「備份」),它會拋出錯誤。我還應該注意到,我沒有看到任何特別重要的outofbound indeces:我沒有任何與維度54在我的工作簿(行,列或表),也不是我想用任何數組替換長度62.
有沒有任何想法爲什麼這可能突然開始發生?我有一種感覺,它有一個令人尷尬的簡單答案,但我無法弄清楚,所以任何幫助將不勝感激!
什麼版本的JXL?當它傳遞給createWorkbook()以創建備份時,它是否爲非空? NBSCOMBINED.xls是否在Excel中打開而沒有任何消息? –
Darius X,是的,我的文件NBSCOMBINED.xls打開時沒有任何警告消息。我實際上遇到了一些麻煩,找到確切的版本(我在哪裏看?)...但是我在5個月前下載了它。在問題開始之前,我沒有更新版本。我還發現了一些我確定以前工作過的舊代碼,並在另一臺計算機上嘗試過,但它會引發同樣的警告。所以我不認爲這是我的代碼。這可能是JExcelAPI中的一個錯誤嗎?我不明白它是如何突然開始在具有不同JExcel副本的不同計算機上執行此操作。想法? – Paul
你的代碼適合我,所以它必須是關於你的電子表格的東西。我假設如果您使用Excel製作簡單的單一電子表格,並將其命名爲NBSCOMBINED.xls,那麼您的代碼將運行良好。如果是這樣,也許你可以開始刪除你的電子表格的一部分,也許在某個時候,錯誤會消失。這會給你一個線索。 –