JAVA POI предоставленные данные отображаются в Office 2007 + XML
Я получаю эту ошибку:
org.апаш.ПОИ.poifs.файловая система.OfficeXmlFileException: предоставленные данные отображаются в Office 2007 + XML. Вы вызываете часть POI, которая имеет дело с документами Ole2 Office. Вам нужно вызвать другую часть POI для обработки этих данных (например, XSSF вместо HSSF)
Я прочитал throw Google, и я узнал, что мне нужно использовать XSSF вместо HSSF, потому что мой файл Excel-xlsx, но, как вы видите в моем 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 не может быть разрешен для типа
1 ответов
по словам Apache POI краткое руководство, the POIFSFileSystem
(или аналогично, NPOIFSFileSystem
) используется только при .документы xls (версии Excel до 2003).
эквивалент для .документы 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 или an .XLSX-файл:
// or "file.xlsx"
Workbook wb = WorkbookFactory.create(new File("MyExcel.xls"));