簡體   English   中英

無法在 Apache POI 中導入 XSSF

[英]Cannot import XSSF in Apache POI

我引用的是 Apache POI 的 3.7 版,並且在執行此操作時出現“無法解決”錯誤:

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

其他引用 POI 的導入語句不會給我錯誤,例如:

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

有任何想法嗎??

要使 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.Z68995FCBF432492D15484D240A

對於 Maven2 添加以下依賴項 -

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

OOXML 文件格式(例如 XSSF for.xlsx)的類位於不同的 Jar 文件中。 您需要在項目中包含 poi-ooxml jar 及其依賴項

您可以在此處獲取 POI 網站上所有組件及其依賴項的列表。

您可能想要做的是下載3.11 二進制 package ,從中獲取poi-ooxml jar 以及ooxml-lib目錄中的依賴項。 將這些導入到您的項目中,您將被分類。

或者,如果您使用 Maven,您可以在此處查看您想要依賴的人工制品列表,但它希望類似於:

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

poi-ooxml maven 依賴項將自動為您引入主 POI jar 和依賴項。 如果您想使用非電子表格格式,您還需要依賴poi-scratchpad工件,如POI 組件頁面中所述

我在應用程序“build.gradle”中添加了以下內容

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

如果您使用 Maven:

poi => artifactId 中的 poi-ooxml

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

問題:導入“org.apache.poi.xssf.usermodel.XSSFWorkbook”類時,在 eclipse 中顯示錯誤。

解決方案:使用這個 maven 依賴來解決這個問題:

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

——哈里·克里希納·尼拉

我得到了解決方案伙計們

你需要記住一些要點。

  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 中導入了該東西.

示例代碼以更好地理解!

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

我盡力為您提供解決方案,如果您在這里遇到任何問題評論,我會嘗試
解決它。

繼續學習伙計們!!

1) 從 POI 文件夾中導入所有 JARS 2) 從 POI 文件夾的子目錄 ooxml 文件夾中導入所有 JARS 3) 從 libF8 文件夾中導入所有 Z9327422E5DF141D06047C 文件夾的子目錄

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();
}​

我遇到了同樣的問題,所以我翻遍了 poi-3.17.jar 文件,里面沒有 xssf package。

然后我瀏覽了其他文件,發現 xssf int poi-ooxml-3.17.jar

所以似乎解決方案是添加

poi-ooxml-3.17.jar

到你的項目,因為這似乎使它工作(至少對我來說)

在嘗試了多件事之后,真正奏效的是:1.手動下載“poi”和“poi-ooxml” 2.將這些d/w jars添加到“Maven Dependencies”中

你沒有描述環境,反正你應該下載apache poi庫。 如果您使用的是 eclipse,請右鍵單擊您的根項目,然后在屬性和 java 構建路徑中添加外部 jar 並在您的項目中導入這些庫:

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

我的實現需要以下文件:

  • poi-ooxml-schemas-3.14.20160307.jar
  • commons-codec-1.10.jar(這是在您從 apache 獲得的 zip 文件的“lib”文件夾中)
  • curveapi-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 和類似的東西。

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>

如果您使用 Maven:

添加 poi 和 poi-ooxml 依賴項以使其工作:)

<dependency>
  <groupId>org.apache.poi</groupId>
  <artifactId>poi</artifactId>
  <version>${poi.version}</version>
</dependency>
<dependency>
  <groupId>org.apache.poi</groupId>
  <artifactId>poi-ooxml</artifactId>
  <version>${poi-ooxml.version}</version>
</dependency>

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM