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

2022-09-01 13:30:34

我正在使用以下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<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();
        }
    }
}

编译时,我收到以下错误:

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

我已经浏览了链接,但无法解决问题。使用 Apache POI 读取 xlsx 文件时获取 Exception(org.apache.poi.openxml4j.exception - no content type [M1.13]) ?

任何人都可以帮我吗?


答案 1

您正在尝试使用 的显式实现 poi 类进行读取。xlsxlsx

G:\Selenium Jar Files\TestData\Data.断续器

要么使用HSSFWorkbookHSSFSheet类,要么通过使用共享接口使您的实现更加通用,例如;

改变:

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

答案 2

您正在尝试访问 XLS 文件。但是,您使用的是 XSSFWorkbook 和 XSSFSheet 类对象。这些类主要用于XLSX文件。

对于 XLS 文件:和
对于 XLSX 文件:HSSFWorkbookHSSFSheetXSSFSheet & XSSFSheet

所以在使用的地方和使用的地方。XSSFWorkbookHSSFWorkbookXSSFSheetHSSFSheet

因此,在进行更改后,您的代码应如下所示:

HSSFWorkbook workbook = new HSSFWorkbook(file);

HSSFSheet sheet = workbook.getSheetAt(0);

推荐