2013-04-14 207 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