您可以在POI事件模型中中止处理表吗?

时间:2014-01-25 01:53:18

标签: java excel apache-poi saxparser

我正在阅读多张XLSX工作簿。在其中一张纸上,我只想要A1中的值。该表可能包含大量其他数据。在我获得了我想要的一个值之后,是否可以中止剩余工作表的处理(时间考虑)?

这是我想要打破处理的地方:

    private static class shValidationsHandler extends DefaultHandler {  
        //The first cell (A1) holds the only value I want
        private static String lastVal = "";
        public void startElement(String uri, String localName, String name,
            Attributes attributes) throws SAXException {
            lastVal = "";
        }
        public void endElement(String uri, String localName, String name)
            throws SAXException {
            if ( name.equals("v") && sCutOff.length() < 1 ) {
                sCutOff = lastVal;  //<<==Can stop processing now==>>
                //<<=========This is what I added
                SAXException oFin = new SAXException("Finished");
                StackTraceElement[] oStack = new StackTraceElement[1];
                oStack[0] = new StackTraceElement("","","",0);
                oFin.setStackTrace(oStack);
                throw oFin;
                //<<==========End of what I added

            }
        }
        public void characters(char[] ch, int start, int length)
            throws SAXException {
            lastVal += new String(ch, start, length);
        }
    }

有人知道这是否可行?

1 个答案:

答案 0 :(得分:1)

你可以像在正常的SAX解析器中暂停解析一样 - 创建SAXException的子类(即类似HaltProcessingException的东西),然后在完成处理时抛出它 - 例如,在sCutOff = lastVal;之后。

然后,调用该处理程序的代码(可能类似于parser.parse())应捕获该特定异常并记录您已完成处理并禁止异常。