有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java从Apache的POI工作簿获取InputStream

有没有办法获取InputStream的Apache POI工作簿

我需要它来连接另一个OutputStream,但是我找不到这样的方法(如果存在的话)

如果没有,有没有其他获取方法的建议


共 (3) 个答案

  1. # 1 楼答案

    你可以查看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;
            }
    
  2. # 2 楼答案

    您可以扩展XSSFWorkbook,从构造函数中保存文件或InputStream对象,然后使用getInputStream()等方法将其取回

  3. # 3 楼答案

    下面是如何实现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();
        }