제공된 데이터가 Office 2007+ XML에 있는 것으로 보이는 Java POI
다음 오류가 발생하였습니다.
org.displaces.poi.poifs.파일 시스템OfficeXmlFileException:제공된 데이터가 Office 2007+ XML에 있는 것 같습니다. OLE2 Office 문서를 처리하는 POI의 일부입니다.이 데이터를 처리하려면 POI의 다른 부분을 호출해야 합니다(예를 들어 HSSF가 아닌 XSSF).
srow google을 읽었는데, 엑셀 파일이 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(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 또는 .xlsx 중 어느 쪽이든 상관없는 코드를 원하는 경우:
// or "file.xlsx"
Workbook wb = WorkbookFactory.create(new File("MyExcel.xls"));
XSSF를 xlsx 파일과 함께 사용하고 있었는데 암호로 암호화/보호된 파일을 처리하려고 했을 때 이 오류가 발생했습니다.
비밀번호를 삭제하자 모든 것이 예상대로 작동했다.
사실 OPCPackage는 없습니다.저는 https://mvnrepository.com/artifact/org.apache.poi/poi-ooxml/3.5-beta5를 사용하고 있기 때문에, 다음의 조작을 실시할 필요가 있습니다.
import org.apache.poi.openxml4j.opc.Package;
....
Package fs = Package.open(new ByteArrayInputStream(container.getContent()));
XSSFWorkbook wb = new XSSFWorkbook(fs);
XSSFSheet sheet = wb.getSheetAt(0);
XSSFRow row;
XSSFCell cell;
언급URL : https://stackoverflow.com/questions/31844308/java-poi-the-supplied-data-appears-to-be-in-the-office-2007-xml
'source' 카테고리의 다른 글
Swift에서 pull을 사용하여 새로 고치는 방법 (0) | 2023.04.22 |
---|---|
프로젝트 커밋 기록에서 삭제된 파일을 찾으려면 어떻게 해야 합니까? (0) | 2023.04.22 |
excel의 regex를 찾아 대체하는 방법 (0) | 2023.04.22 |
프로그래밍 방식으로 번들 식별자 가져오기 (0) | 2023.04.22 |
이진 연산자 '|'을(를) 두 개의 UIViewAutoresize 피연산자에 적용할 수 없습니다. (0) | 2023.04.22 |