使用POI事件模型将工作表写入文本文件

时间:2013-11-11 14:45:35

标签: java excel apache-poi

我正在使用XLSX2CSV示例来解析工作簿中的大型工作表。由于我只需要输出特定工作表的数据,因此我在流程方法中添加了一个if语句来测试特定工作表。当条件满足时,我继续这个过程。

   public void process()
            throws IOException, OpenXML4JException, ParserConfigurationException, SAXException {

        ReadOnlySharedStringsTable strings = new ReadOnlySharedStringsTable(this.xlsxPackage);
        XSSFReader xssfReader = new XSSFReader(this.xlsxPackage);
        StylesTable styles = xssfReader.getStylesTable();
        XSSFReader.SheetIterator iter = (XSSFReader.SheetIterator) xssfReader.getSheetsData();

        while (iter.hasNext()) {
            InputStream stream = iter.next();
            String sheetName = iter.getSheetName();

            if (sheetName.equals("SHEET1")||sheetName.equals("SHEET2")||sheetName.equals("SHEET3")||sheetName.equals("SHEET4")||sheetName.equals("SHEET5")){           

            processSheet(styles, strings, stream);

            try {

                System.setOut(new PrintStream(
                        new FileOutputStream("C:\\Users\\edennis.AD\\Desktop\\test\\"+sheetName+".txt")));

            } catch (Exception e) {
                 e.printStackTrace();
            }


           stream.close();


            }
         }
    }

但我需要输出文本文件而不确定如何操作。我试图使用System.set()方法输出从system.out到文本的所有内容,但这不起作用我只是得到空白文件。

1 个答案:

答案 0 :(得分:2)

宣传回答评论:

XLSX2CSV中,在演示main方法内部附近有一个关键线:

XLSX2CSV xlsx2csv = new XLSX2CSV(p, System.out, minColumns);

创建新的XLSX2CSV对象时,我们传入一个PrintStream对象,该对象用于输出文本。正如构造函数中所解释的那样:

/**
 * Creates a new XLSX -> CSV converter
 *
 * @param pkg        The XLSX package to process
 * @param output     The PrintStream to output the CSV to
 * @param minColumns The minimum number of columns to output, or -1 for no minimum
 */
public XLSX2CSV(OPCPackage pkg, PrintStream output, int minColumns) {

因此,如果您传入基于文件的PrintStream而不是System.out,则会将CSV写入该文件