我正在阅读多张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);
}
}
有人知道这是否可行?
答案 0 :(得分:1)
你可以像在正常的SAX解析器中暂停解析一样 - 创建SAXException
的子类(即类似HaltProcessingException
的东西),然后在完成处理时抛出它 - 例如,在sCutOff = lastVal;
之后。
然后,调用该处理程序的代码(可能类似于parser.parse()
)应捕获该特定异常并记录您已完成处理并禁止异常。