我使用SAX解析器运行的Apache POI的EventUserModel读取Excel表格。用Apache POI的SAX解析器获取Excel的计算单元值
的问题是,我有一些正常细胞与像 内容“你好” 和细胞像这样的内容: =IF(SUM(P254;R254;N254)=0;V254;VLOOKUP(Z254;Cirteria!$Y$2:$Z$4;2;TRUE))
我不希望这些公式,但其评估值如“你好”。我知道它保存在XML中,但我不知道如何访问它。
<Cell ss:StyleID="s168"
ss:Formula="=IF(SUM(RC[-11],RC[-9],RC[-13])=0,RC[-5],VLOOKUP(RC[-1],Kriterien!R2C25:R4C26,2,TRUE))">
<Data ss:Type="String">hello</Data>
</Cell>
<Cell ss:StyleID="s167"><Data ss:Type="String">hello</Data></Cell>
看起来好像有一个“公式”标签SAX始终返回此值而不是数据值。否则,返回正常的“hello”。
我的代码看起来是这样的:
public void startElement(String uri, String localName, String name,
Attributes attributes) throws SAXException {
if (name.equals("c")) {
String cellType = attributes.getValue("t");
if (cellType != null && cellType.equals("s")) {
nextIsString = true;
} else {
nextIsString = false;
}
}
lastContents = "";
}
public void characters(char[] ch, int start, int length)
throws SAXException {
lastContents = new String(ch, start, length);
}
public void endElement(String uri, String localName, String name)
throws SAXException {
if (nextIsString) {
int idx = Integer.parseInt(lastContents);
lastContents = new XSSFRichTextString(sst.getEntryAt(idx))
.toString();
System.out.println(lastContents);
nextIsString = false;
}
}
我得到我所需要的只是通过公式产生的数据的数据。
使用SAX解析,您可以获取所有XML数据。你是否做了一些简单的事情,比如忘记捕获它们过去的数据元素? – Gagravarr
你的解析代码是什么样的? –
我添加了我的代码,应该立即完成。我可以捕获公式,如果我接受cellType“str”但我不想要这些,我只想要评估值。这不是关于遗忘,而是关于如何访问这些数据,如果它的访问方式不同于没有公式的数据。 – Don