2013-04-14 259 views
11

我正在寫一個程序,它需要讀取和寫入excel文件,而不考慮格式(xls或xlsx)。從xls和xlsx excel文件讀取和寫入文件

我知道Apache POI,但它似乎有不同的類來處理xls文件(HSSF)和xlsx(XSSF)文件。

任何人都知道我會如何實現我在這裏要做的。 (也歡迎使用除POI以外的API的想法)。

+0

您是否嘗試過遵循Apache網站中的教程?這並不難!自己寫一些代碼然後問! –

+0

我嘗試過..但正如我的問題所述,API使用不同的類來處理不同的類型。看到我下面的評論。 – Shiva

+0

那麼,我認爲你必須建立自己的界面來隱藏下劃線實現細節,例如抽象工廠模式。 –

回答

22

這很容易,只需要使用普通SpreadSheet interfaces

您的代碼看起來是這樣的:

Workbook wb = WorkbookFactory.create(new File("myFile.xls")); // Or .xlsx 
Sheet s = wb.getSheet(0); 
Row r1 = s.getRow(0); 
r1.createCell(4).setCellValue(4.5); 
r1.createCell(5).setCellValue("Hello"); 

FileOutputStream out = new FileOutputStream("newFile.xls"); // Or .xlsx 
wb.write(out); 
out.close(); 

你可以讀,寫,編輯等現有的文件,既.xls和.XLSX,只要您使用常用接口,就可以使用完全相同的代碼

2

爲什麼不從擴展中檢測文件類型並使用相應的Apache POI類進行處理?我懷疑你的情況有一個絕對普遍的開箱即用的解決方案。

+0

正是我希望避免的! – Shiva

+0

快速瀏覽Apache POI文檔顯示,HSSF和XSSF似乎都實現了相同的界面 - 例如HSSFWorkbook和XSSFWorkbook都有一個Workbook界面可供使用。 你只需要檢測類型,實例化正確的類型,其餘代碼應該可以通過通用接口來實現。 –

+1

POI提供了一個類來檢測類型併爲你構建正確的對象 - 'WorkbookFactory' - 請參閱我的答案以獲取詳細信息 – Gagravarr