Java가 Apache POI 라이브러리를 사용하여 Excel 테이블 문서를 읽는 예

3394 단어 JavaExcel
Apache POI는 Java로 작성된 무료 소스 오픈 플랫폼의 Java API이며, Apache POI는 Java 프로그램이 Microsoft Office 형식의 파일을 읽고 쓰는 기능을 제공한다.
프로젝트 다운로드 페이지:http://poi.apache.org/download.html
Apache POI는 Office Open XML(OOXML) 표준과 마이크로소프트의 OLE2 복합 문서 형식(OLE2)에 맞는 다양한 작업을 만들고 유지하는 Java API입니다.Java를 사용하여 MS Excel 파일을 읽고 작성할 수 있습니다.또한 Java를 사용하여 MS Word 및 MSPowerPoint 파일을 읽고 작성할 수도 있습니다.Apache POI는 Java Operation Excel 솔루션을 제공합니다.
  • HSSF - Microsoft Excel XLS 형식의 파일을 읽고 쓰는 기능을 제공합니다
  • XSSF - Microsoft Excel OOXML XLSX 형식 파일을 읽고 쓰는 기능을 제공합니다
  • HWPF - Microsoft Word DOC 형식의 파일을 읽고 쓸 수 있는 기능..
  • HSLF - Microsoft PowerPoint 형식의 파일을 읽고 쓸 수 있는 기능..
  • HDGF - Microsoft Visio 형식 파일 읽기 기능..
  • HPBF - Microsoft Publisher 형식의 파일을 읽는 기능을 제공합니다
  • HSMF - Microsoft Outlook 형식의 파일을 읽는 기능을 제공합니다
  • Excel 문서 읽기 예
    POI의 HSSFWorkbook을 사용하여 Excel 데이터를 읽습니다.
    
    public void test(File file) throws IOException { 
        InputStream inp = new FileInputStream(file); 
        HSSFWorkbook workbook = new HSSFWorkbook(inp); 
         
        // workbook...  
      } 
    
    
    위 코드, Excel 2003(xls)의 파일을 읽는 것은 문제없지만, Excel 2007(xlsx)의 파일을 읽으면 "The supplied data appears to be in the Office 2007 + XML. You are calling the part of POI that deals with OLE2 Office Documents. You need to call different part of POI to processthis data(eg XSSF instead of HSSF)"
    Excel 2007 버전의 Excel 파일은 다음과 같이 XSSFWorkbook을 사용하여 읽어야 합니다.
    
    public void test(File file) throws IOException { 
        InputStream inp = new FileInputStream(file); 
        XSSFWorkbook workbook = new XSSFWorkbook(inp); 
         
        // workbook...  
      } 
    
    참고: XSSFWorkbook은 poi-ooxml-3.9 소스를 추가로 가져와야 합니다.jar와poi-ooxml-schemas-3.9.jar.
    이렇게 하면 Excel 2007을 가져오는 데 문제가 없지만 Excel 2003을 가져오면 이상이 발생합니다.
    따라서 Excel을 가져올 때 Excel을 가져올 버전을 판단하고 다른 방법을 사용할 수 있습니다.
    나는 파일 접두사 이름을 사용하여 유형을 판단할 생각을 했지만, 만약 누군가가 xlsx의 접두사를 xls로 바꿀 때, xlsx의 함수를 사용하여 읽으면 결과는 오류입니다.접두사 이름이 맞지만 파일 내용 인코딩 등이 맞지 않습니다.
    마지막으로 poi-ooxml의 WorkbookFactory를 사용하는 것을 추천합니다.HSSFWorkbook과 XSSFWorkbook이 모두 Workbook 인터페이스를 실현하기 때문에 create(inputStream)를 사용하여 Workbook을 만듭니다.코드는 다음과 같습니다.
    
    Workbook wb = WorkbookFactory.create(is); 
    
    
    WorkbookFactory에서create () 함수에서 파일 형식에 대한 판단이 있었을 것입니다. 원본 코드가 어떻게 판단되었는지 함께 보십시오.
    
    /** 
       * Creates the appropriate HSSFWorkbook / XSSFWorkbook from 
       * the given InputStream. 
       * Your input stream MUST either support mark/reset, or 
       * be wrapped as a {@link PushbackInputStream}! 
       */ 
      public static Workbook create(InputStream inp) throws IOException, InvalidFormatException { 
        // If clearly doesn't do mark/reset, wrap up 
        if(! 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)); 
        } 
        throw new IllegalArgumentException("Your InputStream was neither an OLE2 stream, nor an OOXML stream"); 
      } 
    
    
    파일 유형에 따라 적절한 Workbook 객체를 작성할 수 있습니다.파일의 머리 정보에 따라 비교하여 판단하는 것인데, 이때 접두사 이름을 바꾸어도 여전히 통할 수 없다.

    좋은 웹페이지 즐겨찾기