"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");}