我阅读了一份excel表格,其中包含ApachePOI的EventUserModel,它使用SAX解析器进行操作。
问题是我有一些普通的单元格,内容像“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总是返回这个值而不是数据值。否则将返回正常的“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> `
请注意,字符(…)
方法将存储公式的值,然后在两个不同的标记之间存储得出的值。
因此,在计算指定的值时,必须了解公式标记对值的影响。
由于内存问题,我们使用ApachePOI的Sax解析器方法来读取大量数据。xlsx excel文件。然而,这种方法在公式单元格中似乎有局限性。它似乎从“缓存的公式值”中读取值。我找不到触发重新计算以更新值的最佳解决方案。有人面临同样的问题吗?谢谢
问题内容: 我正在使用Android从Web解析XML。下面的代码显示了XML的示例。我遇到的问题是我无法获得item标签的字符串值。当我使用它时,它输出的是名称,而不是属性的值。 问题答案: 用 代替 因为正如文档所说: getQName : 返回属性的限定名称(前缀)。 getValue : 通过限定(前缀)名称查找属性的值。 请参阅此示例以获取属性名称和值
null 如您所料,A3将导致。现在将A2的格式更改为会计,使用小数点后2位。A2现在读,但是基础值仍然是,所以A3仍然是。 VBA 制作一个新模块并添加以下函数: null 和具有相同的基础值,但和没有,尽管它们都是使用和的方法计算的。 ()中的表达式正在访问和的实际基础值。如何在VBA中访问这些值?
在Java中,我应该得到的输出是
SAX(Simple API for XML)是一种基于事件的XML文档解析器。 与DOM解析器不同,SAX解析器不会创建解析树。 SAX是XML的流式接口,这意味着使用SAX的应用程序接收有关正在处理的XML文档的事件通知元素和属性,从文档顶部开始按顺序排列,然后关闭ROOT元素。 从上到下读取XML文档,识别构成格式良好的XML文档的标记。 令牌的处理顺序与它们在文档中出现的顺序相同。 向应用
SAX(Simple API for XML)是一个基于事件的xml文档解析器。 与DOM解析器不同,SAX解析器不会创建解析树。 SAX是XML的流式接口,这意味着使用SAX的应用程序接收有关正在处理的XML文档的事件通知 - 元素和属性,从文档顶部开始按顺序排列,并以关闭为止ROOT元素。 从上到下读取XML文档,识别构成格式良好的XML文档的标记。 令牌的处理顺序与文档中出现的顺序相同。 报