我正在使用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到文本的所有内容,但这不起作用我只是得到空白文件。
答案 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写入该文件