如何在读完第一行后中断POI流阅读器?

时间:2015-08-11 10:46:13

标签: java excel xssf

我需要找到一种方法来在第一行之后中断流阅读器(读取XML并使用SAX解析它)。读完列名后的含义。

知道怎么做吗?

CODE:

    XSSFSheetXMLHandler.SheetContentsHandler mySheetContentsHandler = new MySheetContentsHandler(true, xlsxHeaders);
    File myFile = new File(filePath);
    OPCPackage pkg = OPCPackage.open(myFile.getPath());
    XSSFReader reader = new XSSFReader(pkg);
    StylesTable styles = reader.getStylesTable();
    ReadOnlySharedStringsTable sharedStrings = new ReadOnlySharedStringsTable(pkg);
    ContentHandler handler = new XSSFSheetXMLHandler(styles, sharedStrings, mySheetContentsHandler, true);

    XMLReader parser = XMLReaderFactory.createXMLReader();
    parser.setContentHandler(handler);
    parser.parse(new InputSource(reader.getSheetsData().next())); 

正如您所看到的hereXSSFSheetXMLHandler.SheetContentsHandler是一个包含4种方法的界面。但是我怎么能打断文件的读取呢?

我试图在接口handler.endDocument();的已实现方法中执行endRow();,它没有帮助,程序没有任何中断地转到另一行。

1 个答案:

答案 0 :(得分:1)

一个模糊的想法:

如何扩展XSSFSheetXMLHandler,有一个方法“iterrupt”将一些标志设置为true。并覆盖start / endElement,start / endDocument。你所能做的只是下面的事情,例如

@Override
public void startElement(java.lang.String uri, java.lang.String localName, java.lang.String name, org.xml.sax.Attributes attributes) 
{
 if(interrupted)
 {
   //throw your custom exception;
 }
 super.startElement(uri,localName,name,attributes);

}

或在您的class MySheetContentsHandler中,您可以介绍该方法,然后在cell(...)endRow中,您可以在处理之前检查中断状态? 同样,您可以覆盖其他方法。值得一试?