このエラーが発生しています:
org.Apache.poi.poifs.filesystem.OfficeXmlFileException:提供されたデータはOffice 2007+ XMLにあるようです。 OLE2 Officeドキュメントを扱うPOIの一部を呼び出しています。このデータを処理するには、POIの別の部分を呼び出す必要があります(HSSFではなくXSSFなど)
私はスローグーグルを読んで、ExcelファイルはxlsxであるためHSSFの代わりにXSSFを使用する必要があることがわかりましたが、私のMavenで見るように、私はすでにxlsxを使用しています。私はどこを間違えましたか?
<dependency>
<groupId>org.Apache.poi</groupId>
<artifactId>poi-ooxml</artifactId>
<version>3.13-beta1</version>
</dependency>
例外を作成するコードは次のとおりです。
POIFSFileSystem fs;
fs = new POIFSFileSystem(new FileInputStream(getFilePath()));
public void getBColum() {
try {
OPCPackage fs;
fs = new OPCPackage.open(new File(getFilePath()));
XSSFWorkbook wb = new XSSFWorkbook(fs);
XSSFSheet sheet = wb.getSheet("Master column name - Used Car");
XSSFRow row;
CellReference cr = new CellReference("A1");
row = sheet.getRow(cr.getCol());
System.out.println(row.getCell(3));
} catch (FileNotFoundException e) {
if (logger.isDebugEnabled()) {
logger.debug("How can this error be possible? we should have already thrown an exception in the construction");
}
} catch (IOException e) {
logger.error(String.format("Exception in reading the file: %s",
e.getMessage()));
}
}
new oPCPackage.open
にコンパイルエラーがあります。
OPCPackage.openを型に解決できません
Apache POI Quick Guide によると、POIFSFileSystem
(または同様に、NPOIFSFileSystem
)は.xls(2003年までのExcelバージョン)ドキュメントでのみ使用されます。
.xlsxドキュメント(Excel 2007+)に相当するのはOPCPackage
です。
OPCPackage pkg = OPCPackage.open(new File("file.xlsx"));
XSSFWorkbook
からOPCPackage
を作成できます。
XSSFWorkbook wb = new XSSFWorkbook(pkg);
または、直接作成することもできます。
XSSFWorkbook wb = new XSSFWorkbook(new File("file.xlsx"));
一般に、メモリを節約するために、File
の代わりにInputStream
を使用してワークブックを作成することをお勧めします。
また、.xlsか.xlsxかを気にしないコードが必要な場合:
// or "file.xlsx"
Workbook wb = WorkbookFactory.create(new File("MyExcel.xls"));
XSSFをxlsxファイルで使用していましたが、パスワードで暗号化/保護されたファイルを処理しようとするとこのエラーが発生しました。
パスワードを削除すると、すべてが期待どおりに機能しました。