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

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

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到文本的所有内容,但这是行不通的,我只是得到空白文件。

对一个答案提出评论:

在XLSX2CSV的末尾有一条关键线,里面是演示main方法:

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

当创build新的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) { 

所以,如果你传入一个基于File的PrintStream而不是System.out,你会得到写入该文件的CSV文件