Apache POI, using both XSSF and HSSF

34,930

Solution 1

Instead of doing that, try using the new release of Apache POI 3.7, it has SS package which handles both HSSF and XSSF without worrying about type

Details here: http://poi.apache.org/spreadsheet/index.html

Solution 2

Aside from the "standard" SS package solution, you can also simply use an if statement to correctly load the right workbook format into an Workbook interface object, like so:

Workbook workbook; //<-Interface, accepts both HSSF and XSSF.
File file = new File("YourExcelFile.xlsx");
if (FileUtils.getFileExt(file).equalsIgnoreCase("xls")) {
  workbook = new HSSFWorkbook(new FileInputStream(file));
} else if (FileUtils.getFileExt(file).equalsIgnoreCase("xlsx")) {
  workbook = new XSSFWorkbook(new FileInputStream(file));
} else {
  throw new IllegalArgumentException("Received file does not have a standard excel extension.");
}

Solution 3

Use the factory instead which handles both xssf and hssf

import org.apache.poi.ss.usermodel.Workbook;
import org.apache.poi.ss.usermodel.WorkbookFactory;

Workbook wb = WorkbookFactory.create(new File("file"))
Share:
34,930
Tim Tuckle
Author by

Tim Tuckle

Updated on July 16, 2022

Comments

  • Tim Tuckle
    Tim Tuckle almost 2 years

    I have a problem with Apache POI project.

    I failed to use XSSF and HSSF in the "Same Java Class". Which jar should I download or which artifact should I get add into maven?

    I want to handle both xls and xlsx files at the same time. When I get excel version error, I will change the XSSF to HSSF or HSSF to XSSF.

    How can I do this?

  • Tim Tuckle
    Tim Tuckle over 13 years
    First of all thanks for your help. I checked the page you've mentioned. Ok. I've added the code below in my pom.xml : <dependency> <groupId>org.apache.poi</groupId> <artifactId>poi-contrib</artifactId> <version>3.7-beta3</version> </dependency> However, in spite of that my Java class still cannot resolve XSSFWorkbook? There is no problem on HSSFWorkbook(); Workbook[] wbs = new Workbook[] { new HSSFWorkbook(), new XSSFWorkbook() };
  • rlovtang
    rlovtang over 13 years
    XSSFWorkbook is in groupId: org.apache.poi, artifactId: poi-ooxml
  • Mariusz Ignatowicz
    Mariusz Ignatowicz almost 9 years
    And IWorkbook if using NPOI