1
我正在閱讀具有多張工作表的大型XLSX工作簿。在其中一張表中,我只想要A1中的值。該表可能包含大量的其他數據。在獲得我想要的一個值之後,是否有可能中止處理表格的其餘部分(以便考慮時間)?您可以放棄POI中的處理表eventmodel
這裏就是我想打破處理:
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);
}
}
有誰知道這是否可能?
我做了一些與你所建議的不同的東西,儘管我會假設你作爲正確的方式來做到這一點,而我所做的只是一種破解。獲得該值後,我建立了一個SAXException對象,其中包含一個'Finished'的消息,其中一個堆棧跟蹤元素是所有空間並拋出該消息。我只是用try catch封裝瞭解析器調用並查找了該消息。如果該消息不是導致該異常的原因,我會照常處理它。如果這是我的「成品」例外,我會照常繼續。 –