12
votes

I am writing a program which needs to read and write from excel files, irrespective of the format(xls or xlsx).

I am aware of the Apache POI, but it seems it has different classes to handle xls file(HSSF) and xlsx(XSSF) files.

Anyone aware of how I might achieve what I am trying to do here. (Ideas for using an API other than POI are also welcome).

2
Have you tried to follow the tutorial in the Apache website? It's not so hard!Write some code by yourself then ask!Harry.Chen
I did try..but as mentioned in my question the API uses different classes to handle different types. See my comment below.Shiva
Well,then I think you have to build your own interface to hide the underline implementation detail, the Abstract Factory Pattern for example.Harry.Chen
@Harry.Chan seems I might end up..doing just that ...Shiva

2 Answers

23
votes

It's very easy, just use the common SpreadSheet interfaces

Your code would look something like:

 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();

You can read, write, edit etc an existing file, both .xls and .xlsx, with exactly the same code as long as you use the common interfaces

2
votes

Why not detect the file type from extension and use the appropriate Apache POI class for processing? I doubt there's an absolutely universal out-of-the-box solution for your situation.