有没有办法获得Apache的POI工作簿的InputStream
?
我需要它来管道到另一个OutputStream
,但是我无法找到这样的方法(如果它存在)。
如果没有,有关其他方法的提示吗?
答案 0 :(得分:7)
有几种方法可以解决这个问题:
PipetInputStream
和PipedOutputStream
。但是您必须创建不同的线程才能使用PipedInputStream
(如http://docs.oracle.com/javase/7/docs/api/java/io/PipedInputStream.html)ByteArrayOutputStream
,然后您可以通过ByteArrayInputStream
使用生成的字节数组。这可以在一个线程中顺序完成。答案 1 :(得分:4)
以下是如何实现Alexander Tokarev答案的#2(即从工作簿中获取Inputstream):
try {
ByteArrayOutputStream bos = new ByteArrayOutputStream();
workbook.write(bos);
byte[] barray = bos.toByteArray();
InputStream is = new ByteArrayInputStream(barray);
} catch (IOException e) {
e.printStackTrace();
}
答案 2 :(得分:0)
这里他们使用从XLSX文件中获取的输入流将整个工作表转换为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;
}
答案 3 :(得分:0)
您可以扩展XSSFWorkbook,从构造函数中保存File或InputStream对象,然后使用getInputStream()等方法将其恢复。