使用Apache POI在Java中读写xls和xlsx格式的Excel文件

11

我正在编写一个需要从Excel文件中读取和写入数据的程序,无论文件格式是xls还是xlsx。

我知道Apache POI可以实现这个功能,但它似乎有不同的类来处理xls文件(HSSF)和xlsx文件(XSSF)。

是否有人知道如何实现我的需求? 也欢迎提供使用POI以外的API的想法。


你尝试过跟随Apache网站上的教程吗?它并不难!先自己写一些代码,然后再提问! - Harry.Chen
我确实尝试过……但正如我在问题中提到的,该API使用不同的类来处理不同的类型。请参见下面我的评论。 - willowherb
那么,我认为你需要构建自己的接口来隐藏底层实现细节,例如抽象工厂模式。 - Harry.Chen
@Harry.Chan 看起来我可能最终只能这样做... - willowherb
2个回答

22

很容易,只需使用常见的SpreadSheet接口

你的代码会看起来像这样:

 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类进行处理?我怀疑在您的情况下没有绝对通用的开箱即用解决方案。

快速查看Apache POI文档,可以发现HSSF和XSSF似乎都实现了相同的接口 - 例如,HSSFWorkbook和XSSFWorkbook都有一个Workbook接口可供使用。您只需要检测类型,实例化正确的类型,其余的代码应该可以通过通用接口完成。 - Tarmo R
1
POI提供了一个用于检测类型并为您构建正确对象的类 - WorkbookFactory - 有关详细信息,请参见我的答案。 - Gagravarr

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接