【问题标题】:Cannot import XSSF in Apache POI无法在 Apache POI 中导入 XSSF
【发布时间】:2021-11-06 23:34:28
【问题描述】:

我引用的是 3.7 版的 Apache POI,但当我这样做时出现“无法解决”错误:

import org.apache.poi.xssf.usermodel.XSSFWorkbook;

引用 POI 的其他导入语句不要给我错误,例如:

import org.apache.poi.ss.usermodel.*;

有什么想法吗??

【问题讨论】:

  • 我遇到了同样的问题,它似乎源于 poi-3.whatever.jar 文件由于某种原因没有打包 xssf

标签: java apache-poi


【解决方案1】:

要使 OOXML 工作,您需要 POI-OOXML jar,它与 POI jar 分开打包。

从以下位置下载 POI-OOXML jar -

http://repo1.maven.org/maven2/org/apache/poi/poi-ooxml/3.11/poi-ooxml-3.11.jar

对于 Maven2 添加以下依赖项 -

<dependency>
    <groupId>org.apache.poi</groupId>
    <artifactId>poi-ooxml</artifactId>
    <version>3.11</version>
</dependency>

【讨论】:

  • 这是我需要的。对我来说(3.11 版)我只需要添加一个额外的 jar:poit-ooxml-3.11-20141221.jar。我没有意识到他们之间没有联系。感谢 Pushkar +1 的回答。
【解决方案2】:

OOXML 文件格式的类(例如 .xlsx 的 XSSF)位于不同的 Jar 文件中。您需要在项目中包含 poi-ooxml jar,以及它的依赖项

您可以在 POI 网站here 上获取所有组件及其依赖项的列表。

您可能想要做的是下载3.11 binary package,从中获取poi-ooxml jar,以及ooxml-lib 目录中的依赖项。将这些导入到您的项目中,您将被分类。

或者,如果您使用 Maven,您可以 see here 获取您想要依赖的工件列表,但它希望类似于:

<dependency>
   <groupId>org.apache.poi</groupId>
   <artifactId>poi-ooxml</artifactId>
   <version>3.11</version>
</dependency>

poi-ooxml maven 依赖项将自动为您拉入主 POI jar 和依赖项。如果您想使用非电子表格格式,您还需要依赖 poi-scratchpad 工件,详见 POI components page

【讨论】:

    【解决方案3】:

    我在应用“build.gradle”中添加了以下内容

    implementation 'org.apache.poi:poi:4.0.0'
    implementation 'org.apache.poi:poi-ooxml:4.0.0'
    

    【讨论】:

    • 真的很有帮助
    【解决方案4】:

    如果你使用 Maven:

    poi => artifactId 中的 poi-ooxml

        <dependency>
            <groupId>org.apache.poi</groupId>
            <artifactId>poi-ooxml</artifactId>
            <version>3.12</version>
        </dependency>
    

    【讨论】:

    • 我建议使用 POI 3.12 final (3.12) 而不是 beta
    【解决方案5】:

    问题:在导入“org.apache.poi.xssf.usermodel.XSSFWorkbook”类时,Eclipse 中显示错误。

    解决方案:使用这个maven依赖来解决这个问题:

    <dependency>
       <groupId>org.apache.poi</groupId>
       <artifactId>poi-ooxml</artifactId>
       <version>3.15</version>
    </dependency>
    

    -哈里·克里希纳·尼拉

    【讨论】:

      【解决方案6】:

      我有解决方案的人

      你需要记住一些要点。

      1. 有两种不同的依赖,一种是(poi),另一种是(poi- ooxml),但请确保您必须在代码中使用 poi-ooxml 依赖项。

      2. 只需在 pom.xml 中添加以下依赖项并保存即可。

      <dependency>
        <groupId>org.apache.poi</groupId>
        <artifactId>poi-ooxml</artifactId>
        <version>3.9</version>
        </dependency>
      

      3 . 保存 pom.xml 后,你需要尝试一个小东西,使用 (.) 操作员将尝试导入/获取它,最后不会看到任何类型的错误 因为现在它已经在你的包中导入了那个东西。

      示例代码更好地理解!!

      package ReadFile;// package   
      import org.apache.poi.xssf.usermodel.XSSFWorkbook;  // automatically added to your code after importing
      public class Test          
      {  
      public static void Hello() // Method  
      {  
      XSSFWorkbook workbook = new XSSFWorkbook();   
      }  
      }
      

      我已尽力为您提供解决方案,如果您在这里遇到任何问题评论我会尝试
      解决它。

      继续学习!

      【讨论】:

        【解决方案7】:

        1) 从 POI 文件夹导入所有 JARS 2) 从 ooxml 文件夹中导入所有 JARS,该文件夹是 POI 文件夹的子目录 3) 从 POI 文件夹的子目录 lib 文件夹中导入所有 JARS

        String fileName = "C:/File raw.xlsx";
        File file = new File(fileName);
        FileInputStream fileInputStream;
        Workbook workbook = null;
        Sheet sheet;
        Iterator<Row> rowIterator;
        try {
                fileInputStream = new FileInputStream(file);
                String fileExtension = fileName.substring(fileName.indexOf("."));
                System.out.println(fileExtension);
                if(fileExtension.equals(".xls")){
                workbook  = new HSSFWorkbook(new POIFSFileSystem(fileInputStream));
                }
                else if(fileExtension.equals(".xlsx")){
                workbook  = new XSSFWorkbook(fileInputStream);
                }
                else {
                System.out.println("Wrong File Type");
                } 
                FormulaEvaluator evaluator workbook.getCreationHelper().createFormulaEvaluator();
                sheet = workbook.getSheetAt(0);
                rowIterator = sheet.iterator();
                while(rowIterator.hasNext()){
                Row row = rowIterator.next();
                Iterator<Cell> cellIterator = row.cellIterator();
                while (cellIterator.hasNext()){
                Cell cell = cellIterator.next();
                //Check the cell type after evaluating formulae
               //If it is formula cell, it will be evaluated otherwise no change will happen
                switch (evaluator.evaluateInCell(cell).getCellType()){
                case Cell.CELL_TYPE_NUMERIC:
                System.out.print(cell.getNumericCellValue() + " ");
                break;
                case Cell.CELL_TYPE_STRING:
                System.out.print(cell.getStringCellValue() + " ");
                break;
                case Cell.CELL_TYPE_FORMULA:
                Not again
                break;
                case Cell.CELL_TYPE_BLANK:
                break;
                }
        }
         System.out.println("\n");
        }
        //System.out.println(sheet);
        } catch (FileNotFoundException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
        } catch (IOException e){
        e.printStackTrace();
        }​
        

        【讨论】:

        • 行未导入...能否分享一下jar文件链接
        【解决方案8】:

        我也遇到了同样的问题,所以我翻了一下poi-3.17.jar文件,里面没有xssf包。

        然后我浏览了其他文件,发现 xssf int poi-ooxml-3.17.jar

        看来解决方案是添加

        poi-ooxml-3.17.jar
        

        到你的项目,因为这似乎使它工作(至少对我来说)

        【讨论】:

          【解决方案9】:

          在尝试了多种方法之后,真正奏效的是: 1.手动下载“poi”和“poi-ooxml” 2.将这些d/w jars添加到“Maven Dependencies”中

          【讨论】:

            【解决方案10】:

            2021 年 11 月 6 日的实际情况:

            <dependency>
                <groupId>org.apache.poi</groupId>
                <artifactId>poi</artifactId>
                <version>5.1.0</version>
            </dependency>
            
            <dependency>
                <groupId>org.apache.poi</groupId>
                <artifactId>poi-ooxml</artifactId>
                <version>5.1.0</version>
            </dependency>
            

            【讨论】:

              【解决方案11】:

              你没有描述环境,反正你应该下载apache poi库。如果您使用的是 Eclipse,请右键单击您的根项目,以便在属性和 java 构建路径中添加外部 jar 并在您的项目中导入这些库:

              xmlbeans-2.6.0 ; poi-ooxml-schemas- ... ; poi-ooxml- ... ; poi- .... ;

              【讨论】:

                【解决方案12】:

                我的实现需要以下文件:

                • poi-ooxml-schemas-3.14.20160307.jar
                • commons-codec-1.10.jar(这是在你的 zip 文件的“lib”文件夹中 从 apache 获取)
                • curvesapi-1.03.jar(在“ooxml-lib”文件夹中)
                • poi-3.14-20160307.jar
                • poi-ooxml-3.14-20160307.jar
                • xmlbeans-2.6.0.jar(在“ooxml-lib”文件夹中)

                (老实说,我不完全确定它们都是必需的......)这有点令人困惑,因为它们是这样包装的。我需要将它们手动放置在我自己的“lib”文件夹中,然后添加引用...

                Maven 似乎总是下载比我需要的更多的东西,所以我总是手动放置库/dll 和类似的东西。

                【讨论】:

                • Apache POI provides a handy page explaining what jars are needed for what,你需要的一切都在二进制下载中,所以它不必令人困惑或神秘!
                • 如果您要使用 Maven,该页面很方便,但我更喜欢手动添加依赖项。该页面没有单独列出所有内容。其中一些在构建时并不明显,但您可以通过在运行时检查异常来找到它们。我的实现将 XLS 和 XLSX 文件导入到 jtable 中。以上似乎是所有需要的。
                • 这里列出的所有内容都包含在二进制下载中!组件需要什么 jar,以及 jar 需要什么依赖
                猜你喜欢
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 2017-10-26
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                相关资源
                最近更新 更多