[英]Get evaluated cell value of Excel with SAX-Parser of Apache POI
我读了带有Apache POI的EventUserModel的Excel工作表,该表与SAX-Parser一起运行。
问题是我有一些正常的单元格,其内容类似于“ hello”,而单元格的内容如下: =IF(SUM(P254;R254;N254)=0;V254;VLOOKUP(Z254;Cirteria!$Y$2:$Z$4;2;TRUE))
我不需要这些公式,但需要它们的评估值,例如“ hello”。 我知道它已保存在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总是返回此值而不是Data值。 否则,返回正常的“ 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;
}
}
我得到了我需要的所有数据,除了公式生成的数据。
这是一个旧线程,但是我试图找出类似的问题,并认为我会发布此消息,以希望将来对某人有所帮助。 单元格中公式的标记结构与典型的单元格/值结构不同。
因此,您必须知道公式标记何时在单元格中打开和关闭,以及值何时在单元格中打开和关闭。 标签结构类似于(当然,没有属性,为简单起见,该行中只有一个单元格)...
`<row> <c> <f> IF(SUM(RC[-11],RC[-9],RC[-13])=0,RC[-5],VLOOKUP(RC[-1],Kriterien!R2C25:R4C26,2,TRUE))</f> <v> hello </v> </c> </row> `
请注意, characters(...)
方法将存储公式的值,然后将结论值存储在两个不同的标签之间。
因此,在评估分配的值时,您必须认识到公式标签对您的值的影响。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.