"Package should contain a content type part [M1.13]" "Package should contain a content type part [M1.13]" apache apache

"Package should contain a content type part [M1.13]"


Use file extension to handle WorkSheet Type

  String inputFilename = new File(path).getName();                    switch (inputFilename.substring(inputFilename.lastIndexOf(".") + 1,                            inputFilename.length())) {                        case "xls":                            return readXLS(path);                        case "xlsx":                            return readXLSX(path);                        default:                            Log.e(TAG, "No XLS file chosen");                            return "Please select valid \"Excel\" File\"";                    }

For XLSX file: use XSSFWorkbook & XSSFSheet

    XSSFWorkbook workbook = new XSSFWorkbook(new FileInputStream(new File(path)));    XSSFSheet sheet = workbook.getSheetAt(0);

For XLS file: use HSSFWorkbook & HSSFSheet

    HSSFWorkbook workbook = new HSSFWorkbook(new FileInputStream(new File(path)));    HSSFSheet sheet = workbook.getSheetAt(0);


This may happen when your create your XLS/XLSX file through LibreOffice. Apparently something is lost in the conversion and the file is not the same as a spreadsheet made in Microsoft Office. I had the same error and the solution for me was copying all the work I have done in LibreOffice Calc to a MS Excel spreadsheet and then save a new file.


What you have is version mismatch between your Excel file and workbook you are trying to create. The best way to avoid is: choose Interface implementation.

I built on top of Hitesh Sahu's solution:

import org.apache.poi.ss.usermodel.Workbook;import org.apache.poi.ss.usermodel.WorkbookFactory;Workbook workbook = null;// parse files from requestMultipartHttpServletRequest multipartRequest = (MultipartHttpServletRequest) request;MultipartFile multipartDataPointsFile = multipartRequest.getFile("yourFileHere");try {    if(multipartDataPointsFile!=null) {        String originalFileName= multipartDataPointsFile.getOriginalFilename();        if(originalFileName!=null && originalFileName.length()>0) {            switch (originalFileName.substring(originalFileName.lastIndexOf(".") + 1,                    originalFileName.length())) {                case "xls":                    try {                        workbook = WorkbookFactory.create(multipartDataPointsFile.getInputStream());                    }catch(org.apache.poi.openxml4j.exceptions.InvalidFormatException ie){                        logger.error("Malformed Excel");                        throw new IOException();                    }                    if(workbook!=null) {                        // Do something in here                    }else{                        logger.error("Could not pass along the workbook");                        throw new IOException();                    }                case "xlsx":                    try {                        workbook = WorkbookFactory.create(multipartDataPointsFile.getInputStream());                    }catch(org.apache.poi.openxml4j.exceptions.InvalidFormatException ie){                        logger.error("Malformed Excel");                        throw new IOException();                    }                    if(workbook!=null) {                          // Do something in here                    }else{                        logger.error("Could not pass along the workbook");                        throw new IOException();                    }                default:                    logger.error("File type is not  recognized  Excell type");                    throw new IOException();            }        }else{            logger.error("Can Not Read File Name");            throw new IOException();          }    }else{        logger.error("Did not select a file");        throw new IOException();    }} catch (IOException e) {    throw new ApplicationErrorException("Can't parse  Excel file");}