org.apache.poi.POIXMLException Strict OOXML은 현재 지원되지 않습니다. 버그 #57699를 참조하십시오.
java로 엑셀 파일을 파싱하고 싶어서 apache poi 라이브러리를 사용하고 있습니다. 여기 maven dependency:
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi-ooxml</artifactId>
<version>3.14</version>
</dependency>
여기에는 일련의 종속성이 포함됩니다.
poi-ooxml-3.14.jar
poi-3.14.jar
commons-codec-1.10.jar
poi-ooxml-schemas-3.14.jar
xmlbeans-2.6.0.jar
stax-api-1.0.1.jar
curvesapi-1.03.jar
다음 코드로 Office 365 Excel 파일(.xslx)을 읽으려고 할 때:
import org.apache.poi.ss.usermodel.Cell;
import org.apache.poi.ss.usermodel.Row;
import org.apache.poi.ss.usermodel.Sheet;
import org.apache.poi.ss.usermodel.Workbook;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
public class ExcelConverter {
public static void main(String[] args) throws Exception{
String excelFilePath = "C:/temp/Book1.xlsx";
File myFile = new File(excelFilePath);
System.out.println("File exists: " + myFile.exists());
FileInputStream inputStream = new FileInputStream(myFile);
Workbook workbook = new XSSFWorkbook(inputStream);
}
}
다음 콘솔 메시지를 받았습니다.
File exists: true
Exception in thread "main" org.apache.poi.POIXMLException: Strict OOXML isn't currently supported, please see bug #57699
at org.apache.poi.POIXMLDocumentPart.getPartFromOPCPackage(POIXMLDocumentPart.java:679)
at org.apache.poi.POIXMLDocumentPart.<init>(POIXMLDocumentPart.java:122)
at org.apache.poi.POIXMLDocumentPart.<init>(POIXMLDocumentPart.java:115)
at org.apache.poi.POIXMLDocument.<init>(POIXMLDocument.java:61)
at org.apache.poi.xssf.usermodel.XSSFWorkbook.<init>(XSSFWorkbook.java:273)
at org.myCompany.excel.ExcelConverter.main(ExcelConverter.java:25)
제가 그 문제를 해결하기 위해 무엇을 해야 하는지 알고 있습니까?미리 감사드립니다.
현재 "스프레드시트를 "엄격한 OOXML" 형식으로 저장하지 않음" 이외의 간단한 해결책은 없는 것으로 보입니다.
예를 들어 Excel에서 사용하는 경우
Save As --> "Excel Workbook (.xlsx)"
대신에
Save As --> "Strict Open XML Spreadsheet (.xlsx)"
엑셀 워크시트와 이 형식의 파일 확장자가 같은 이유를 알고 계십니까?
그것은 오직 마이크로소프트만이 대답할 수 있는 것입니다.하지만 엔지니어(또는 그들의 경영진)들은 애플리케이션 소프트웨어가 이를 구별하는 데 필요할 것이라고 예상하지 못했던 것 같습니다.
저는 파일을 입력으로 수락한 후 확장자를 기준으로 처리하고 있습니다.어떻게 하면 시도하지 않고 알 수 있을까요?
현재 세대 POI로 문서를 처리할 수 있는 방법은 없습니다.
파일을 POI에 전달하기 전에 파일을 읽을 내용을 코드화하고 "엄격한 OOXML" 형식의1 서명을 찾을 수도 있겠지만 별 의미가 없습니다.시도 캐치를 다른 논리로 대체할 수 있도록 추가 코드 스택을 작성하게 됩니다.
1 - https://www.loc.gov/preservation/digital/formats/fdd/fdd000395.shtml#sign 참조
저는 @PJFanning의 ooxml converter https://github.com/pjfanning/ooxml-strict-converter 의 약간 수정된 버전을 사용하여 엄격한 Excel 파일을 확인하고 변환한 다음 POI로 읽습니다.제한적인 테스트에서는 작동하는 것처럼 보이지만, 제가 가지고 있는 파일은 꽤 간단합니다.
파일을 엑셀 워크북(.xlsx)으로 저장하는 것이 효과적이었습니다.
그excel-streaming-reader
라이브러리에 플래그를 설정하여 Strict OOXML에서 변환할 수 있는 베타 기능이 있습니다.convertFromOoXmlStrict
에서StreamingReader
작성기:
언급URL : https://stackoverflow.com/questions/37749841/org-apache-poi-poixmlexception-strict-ooxml-isnt-currently-supported-please-se
'programing' 카테고리의 다른 글
DataSet/DataTable을 반환하는 PowerShell 함수의 이상한 동작 (0) | 2023.10.12 |
---|---|
data.frame에서 결측값을 보고하는 우아한 방법 (0) | 2023.10.12 |
Laravel 5 변경 public_path() (0) | 2023.10.12 |
Android Studio에서 ar 파일 만들기 (0) | 2023.10.07 |
301 표준 WordPress .htaccess 파일로 IP 주소 리디렉션 (0) | 2023.10.07 |