org.apache.poi.POIXMLException:org.apache.poi.openxml4j.exceptions.InvalidFormatException:
我正在使用以下jar文件:
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
码:
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 rowIterator = sheet.iterator(); while (rowIterator.hasNext()) { Row row = rowIterator.next(); //For each row, iterate through all the columns Iterator 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(); } } }
编译时,我收到以下错误:
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.(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
我已经通过链接但无法解决问题。 使用Apache POI读取xlsx文件时获取exception(org.apache.poi.openxml4j.exception – 无内容类型[M1.13])?
谁能帮帮我吗?
您正在尝试使用xlsx
显式实现poi类来读取xls
。
G:\ Selenium Jar Files \ TestData \ Data。 XLS
使用HSSFWorkbook
和HSSFSheet
类,或者通过使用共享接口使您的实现更通用;
更改:
XSSFWorkbook workbook = new XSSFWorkbook(file);
至:
org.apache.poi.ss.usermodel.Workbook workbook = WorkbookFactory.create(file);
并改变:
XSSFSheet sheet = workbook.getSheetAt(0);
至:
org.apache.poi.ss.usermodel.Sheet sheet = workbook.getSheetAt(0);
您正在尝试访问XLS文件。 但是,您正在使用XSSFWorkbook和XSSFSheet类对象。 这些类主要用于XLSX文件。
对于XLS文件: HSSFWorkbook
和HSSFSheet
对于XLSX文件: XSSFSheet
和XSSFSheet
因此,代替XSSFWorkbook
使用HSSFWorkbook
而不是XSSFSheet
使用HSSFSheet
。
因此,在进行更改后,您的代码应如下所示:
HSSFWorkbook workbook = new HSSFWorkbook(file); HSSFSheet sheet = workbook.getSheetAt(0);
尝试这个:
package my_default; import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; import java.util.Iterator; import org.apache.poi.ss.usermodel.Cell; import org.apache.poi.ss.usermodel.Row; import org.apache.poi.xssf.usermodel.XSSFCell; import org.apache.poi.xssf.usermodel.XSSFRow; import org.apache.poi.xssf.usermodel.XSSFSheet; import org.apache.poi.xssf.usermodel.XSSFWorkbook; public class Test { public static void main(String[] args) { try { // Create Workbook instance holding reference to .xlsx file XSSFWorkbook workbook = new XSSFWorkbook(); // Get first/desired sheet from the workbook XSSFSheet sheet = createSheet(workbook, "Sheet 1", false); // XSSFSheet sheet = workbook.getSheetAt(1);//Don't use this line // because you get Sheet index (1) is out of range (no sheets) //Write some information in the cells or do what you want XSSFRow row1 = sheet.createRow(0); XSSFCell r1c2 = row1.createCell(0); r1c2.setCellValue("NAME"); XSSFCell r1c3 = row1.createCell(1); r1c3.setCellValue("AGE"); //Save excel to HDD Drive File pathToFile = new File("D:\\test.xlsx"); if (!pathToFile.exists()) { pathToFile.createNewFile(); } FileOutputStream fos = new FileOutputStream(pathToFile); workbook.write(fos); fos.close(); System.out.println("Done"); } catch (Exception e) { e.printStackTrace(); } } private static XSSFSheet createSheet(XSSFWorkbook wb, String prefix, boolean isHidden) { XSSFSheet sheet = null; int count = 0; for (int i = 0; i < wb.getNumberOfSheets(); i++) { String sName = wb.getSheetName(i); if (sName.startsWith(prefix)) count++; } if (count > 0) { sheet = wb.createSheet(prefix + count); } else sheet = wb.createSheet(prefix); if (isHidden) wb.setSheetHidden(wb.getNumberOfSheets() - 1, XSSFWorkbook.SHEET_STATE_VERY_HIDDEN); return sheet; } }
- 为什么Thread.isInterrupted()总是返回false?
- Selenium:将Internet Explorer中的文件下载到没有直接链接的指定文件夹,没有Windows窗体,没有AutoIt或Robot
- 使用POI api向ms字添加页脚
- 从自定义类导入时,无法对XMLBeans jar进行签名
- 使用Apache POI HSSF,如何一次刷新所有公式单元格?
- java.lang.NoClassDefFoundError:org / openxmlformats / schemas / spreadsheetml / x2006 / main / CTWorkbook $ Factory
- Apache POI或docx4j用于处理docx文档
- 阅读xlsx文件时,Apche POI获取单元格颜色
- 如何使用apache poi检查xlsx文件是否受密码保护
- 如何使用合并单元格值大于单元格宽度的Apache-POI来增加excel行的高度?
- 我是否可以访问Lotus Notes嵌入式文件而无需实际提取它们?