Apache Poi는 Java로 작성된 무료 및 오픈 소스 크로스 플랫폼 Java API입니다. Apache Poi는 Microsoft Office Format Archives를 읽고 작성하는 Java 프로그램의 기능을 제공합니다.
프로젝트 다운로드 페이지 : http://poi.apache.org/download.html
Apache Poi는 OOXML (Oxtml) 표준 및 Microsoft의 OLE 2 복합 문서 형식 (OLE2)을 준수하는 다양한 Java API를 생성하고 유지하는 Java API입니다. Java를 사용하여 MS Excel 파일을 읽고 생성하고 수정하는 데 사용할 수 있습니다. 또한 Java를 사용하여 MS Word 및 MspowerPoint 파일을 읽고 만들 수도 있습니다. Apache Poi는 Java Operation Excel 솔루션을 제공합니다.
Excel 문서를 읽는 예
POI에서 HSSFWorkbook을 사용하여 Excel 데이터를 읽습니다.
public void test (파일 파일) IoException {inputStream inp = new FileInputStream (파일); hssfworkbook 통합 문서 = 새로운 hssfworkbook (INP); // 통합 문서 ... Traversal Operation} 위의 코드는 Excel2003 (xls)의 파일을 읽는 것이 좋지만, Excel2007 (XLSX)의 파일이 읽히면 예외 가보고 될 것임을 보여줍니다. "제공된 데이터는 Office 2007+ XML에있는 것으로 보입니다. POI의 일부를 OLE2 문서를 다루는 POI의 일부를 호출해야합니다. POI의 다른 부분을 호출해야합니다 (EG XS).
정보를 검토 한 후 Excel 2007 버전의 Excel 파일 버전은 다음과 같이 xssfworkbook을 사용하여 읽어야합니다.
public void test (파일 파일) IoException {inputStream inp = new FileInputStream (파일); xssfworkbook 통합 문서 = 새로운 xssfworkbook (INP); // 통합 문서 ... Traversal Operation} 참고 : xssfworkbook은 poi-ooxml-3.9-sources.jar 및 poi-ooxml-schemas-3.9.jar의 추가 가져 오기가 필요합니다.
이런 식으로, Excel2007 가져 오기에는 문제가 없지만 Excel2003을 가져 오는 것으로보고된다.
따라서 Excel을 가져올 때 Excel 버전을 판단하고 다른 방법을 호출하십시오.
파일 접미사 이름을 사용하여 유형을 결정할 생각을했지만 누군가 XLSX의 접미사를 XLS로 변경하면 XLSX 함수를 사용하여 읽는 경우 결과는 오류입니다. 접미사 이름이 올바르지 만 파일 콘텐츠 인코딩 등이 정확하지 않습니다.
마지막으로 HSSFWorkbook과 XSSFWorkbook이 모두 통합 문서 인터페이스를 구현하기 때문에 POI-OOXML에서 WorkBookFactory.Create.Create (InputStream)를 사용하는 것이 좋습니다. 코드는 다음과 같습니다.
통합 문서 WB = WorkBookFactory.Create (IS);
상상할 수 있듯이 WorkBookFactory.create () 함수에서는 파일 유형에 대한 판단이 있어야합니다. 소스 코드가 어떻게 판단되는지 살펴 보겠습니다.
/ ** * 주어진 inputStream에서 적절한 hssfworkbook / xssfworkbook을 만듭니다. * 입력 스트림은 Mark/Reset을 지원하거나 * {@link pushbackinputstream}으로 랩핑해야합니다! */ public static 통합 문서 작성 (inputStream inp)는 ioexception, invalidformatexception {// 명확하게 마크/ 재설정을 수행하지 않으면 (! inp.marksUpported ()) {inp = new PushbackInputStream (inp, 8); } if (poifsfilesystem.haspoifsheader (inp)) {return new hssfworkbook (INP); } if (poixmldocument.hasooxmlheader (inp)) {return new xssfworkbook (opcpackage.open (inp)); } 새로운 불법 행정 exception을 던지십시오 ( "입력 스트림은 Oole2 스트림이나 OOXML 스트림이 아닙니다"); }적절한 통합 문서 개체는 파일 유형에 따라 별도로 생성된다는 것을 알 수 있습니다. 파일의 헤더 정보를 기반으로 판단됩니다. 현재 접미사 이름이 변경 되더라도 여전히 전달할 수 없습니다.