2014-01-16 2 views
1

Apache POI 통합 문서 InputStream을 얻을 수있는 방법이 있습니까?Apache의 POI 통합 문서 InputStream 가져 오기

다른 OutputStream으로 배관하는 데 필요하지만, 그러한 방법을 찾을 수 없습니다 (있는 경우).

그렇지 않은 경우 얻을 수있는 다른 방법에 대한 정보가 있습니까?

+1

왜'write' 메소드를 사용하지 않을까요? (http://poi.apache.org/apidocs/org/apache/poi/ss/usermodel/Workbook.html#write(java.io.OutputStream)) –

+0

그 방법을 알고 있지만 몇 가지 요구 사항이 있습니다. 나는 입력 스트림이 필요하다. – Lopina

+1

'ByteArrayOutputStream'에 쓰기를하고, 쓰기가 완료되면 바이트 배열을 가져 와서 'ByteArrayInputStream'에 넘겨 줍니까? – Gagravarr

답변

7

이 문제를 해결하기 위해 여러 가지 방법이있다 :

  1. 당신은 표준 자바 PipetInputStreamPipedOutputStream를 사용할 수 있습니다. 그러나 PipedInputStream (http://docs.oracle.com/javase/7/docs/api/java/io/PipedInputStream.html에 설명 된대로)을 사용하는 다른 스레드를 만들어야합니다.
  2. 내용을 ByteArrayOutputStream에 쓸 수 있으며 ByteArrayInputStream을 통해 결과 바이트 배열을 사용할 수 있습니다. 이 작업은 하나의 스레드에서 순차적으로 수행 할 수 있습니다.
+0

그래, 나는 # 2를 대안으로 생각하지만 그것이 될거야. – Lopina

0

현재 https://svn.apache.org/repos/asf/poi/trunk/src/examples/src/org/apache/poi/xssf/eventusermodel/XLSX2CSV.java

를 확인하실 수 있습니다 그들은 XLSX 파일에서 가져온의 InputStream을 사용하여 csv 파일로 전체 시트를 변환한다.

ReadOnlySharedStringsTable strings = new ReadOnlySharedStringsTable(this.xlsxPackage); 
     XSSFReader xssfReader = new XSSFReader(this.xlsxPackage); 
     StylesTable styles = xssfReader.getStylesTable(); 
     XSSFReader.SheetIterator iter = (XSSFReader.SheetIterator) xssfReader.getSheetsData(); 
     int index = 0; 
     while (iter.hasNext()) { 
      InputStream stream = iter.next(); 
      String sheetName = iter.getSheetName(); 
      this.output.println(); 
      this.output.println(sheetName + " [index=" + index + "]:"); 
      processSheet(styles, strings, new SheetToCSV(), stream); 
      stream.close(); 
      ++index; 
     } 
0

여기에 알렉산더 토카레프의 대답 중 # 2를 구현하는 방법 (즉, 통합 문서의 InputStream을 얻을) :

try { 
     ByteArrayOutputStream bos = new ByteArrayOutputStream(); 
     workbook.write(bos); 
     byte[] barray = bos.toByteArray(); 
     InputStream is = new ByteArrayInputStream(barray); 
    } catch (IOException e) { 
     e.printStackTrace(); 
    } 
0

당신은 XSSFWorkbook을 확장 생성자에서 파일 또는 InputStream 객체를 저장하고 그것을 얻을 수 있습니다 getInputStream()과 같은 몇 가지 메소드를 사용하여 복귀하십시오.

관련 문제