Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

org.apache.poi.POIXMLException: org.apache.poi.openxml4j.exceptions.InvalidFormatException:

I'm using the following jar files:

dom4j-1.6.1.jar poi-3.9-20121203.jar poi-ooxml-3.9-20121203.jar poi-ooxml-schemas-3.9-20121203.jar xmlbeans-2.3.0.jar 

Code:

package ExcelTest;  import java.io.File; import java.io.FileInputStream; import java.util.Iterator;  import org.apache.poi.ss.usermodel.Cell; import org.apache.poi.ss.usermodel.Row; import org.apache.poi.xssf.usermodel.XSSFSheet; import org.apache.poi.xssf.usermodel.XSSFWorkbook;  public class Test {     public static void main(String[] args)     {         try         {             FileInputStream file = new FileInputStream(new File("G:\\Selenium Jar Files\\TestData\\Data.xls"));              //Create Workbook instance holding reference to .xlsx file             XSSFWorkbook workbook = new XSSFWorkbook(file);              //Get first/desired sheet from the workbook             XSSFSheet sheet = workbook.getSheetAt(0);              //Iterate through each rows one by one             Iterator<Row> rowIterator = sheet.iterator();             while (rowIterator.hasNext())             {                 Row row = rowIterator.next();                 //For each row, iterate through all the columns                 Iterator<Cell> cellIterator = row.cellIterator();                  while (cellIterator.hasNext())                 {                     Cell cell = cellIterator.next();                     //Check the cell type and format accordingly                     switch (cell.getCellType())                     {                         case Cell.CELL_TYPE_NUMERIC:                             System.out.print(cell.getNumericCellValue() + "t");                             break;                         case Cell.CELL_TYPE_STRING:                             System.out.print(cell.getStringCellValue() + "t");                             break;                     }                 }                 System.out.println("");             }             file.close();         }         catch (Exception e)         {             e.printStackTrace();         }     } } 

When I compile, I get the following error:

org.apache.poi.POIXMLException: org.apache.poi.openxml4j.exceptions.InvalidFormatException: Package should contain a content type part [M1.13]     at org.apache.poi.util.PackageHelper.open(PackageHelper.java:41)     at org.apache.poi.xssf.usermodel.XSSFWorkbook.<init>(XSSFWorkbook.java:218)     at ExcelTest.Test.main(Test.java:21) Caused by: org.apache.poi.openxml4j.exceptions.InvalidFormatException: Package should contain a content type part [M1.13]     at org.apache.poi.openxml4j.opc.ZipPackage.getPartsImpl(ZipPackage.java:199)     at org.apache.poi.openxml4j.opc.OPCPackage.getParts(OPCPackage.java:665)     at org.apache.poi.openxml4j.opc.OPCPackage.open(OPCPackage.java:274)     at org.apache.poi.util.PackageHelper.open(PackageHelper.java:39)     ... 2 more 

I have gone through the link but was unable to solve the issue. Getting Exception(org.apache.poi.openxml4j.exception - no content type [M1.13]) when reading xlsx file using Apache POI?

Can anyone please help me?

like image 496
Learner Avatar asked Feb 24 '14 15:02

Learner


2 Answers

You are trying to read xls with explicit implementation poi classes for xlsx.

G:\Selenium Jar Files\TestData\Data.xls

Either use HSSFWorkbook and HSSFSheet classes or make your implementation more generic by using shared interfaces, like;

Change:

XSSFWorkbook workbook = new XSSFWorkbook(file); 

To:

 org.apache.poi.ss.usermodel.Workbook workbook = WorkbookFactory.create(file); 

And Change:

XSSFSheet sheet = workbook.getSheetAt(0); 

To:

org.apache.poi.ss.usermodel.Sheet sheet = workbook.getSheetAt(0); 
like image 137
StoopidDonut Avatar answered Sep 20 '22 22:09

StoopidDonut


You are trying to access an XLS file. However, you are using XSSFWorkbook and XSSFSheet class objects. These classes are mainly used for XLSX files.

For XLS file: HSSFWorkbook & HSSFSheet
For XLSX file: XSSFSheet & XSSFSheet

So in place of XSSFWorkbook use HSSFWorkbook and in place of XSSFSheet use HSSFSheet.

So your code should look like this after the changes are made:

HSSFWorkbook workbook = new HSSFWorkbook(file);  HSSFSheet sheet = workbook.getSheetAt(0); 
like image 45
Abhishek Shah Avatar answered Sep 22 '22 22:09

Abhishek Shah