1

我正在使用 C# 中的 OpenXML 库来读取 Excel 文件。

我的要求之一是能够为每个有一个的单元格显示确切的公式。OpenXML 编码文件使用“共享公式”来减小文件大小。

像这样:

D3 : <x:f t="shared" ref="D3:D6" si="1" >D2+C3</x:f><x:v >130</x:v>
D4 : <x:f t="shared" si="1"  /><x:v >136</x:v>
D5 : <x:f t="shared" si="1"  /><x:v >141</x:v>
D6 : <x:f t="shared" si="1"  /><x:v >147</x:v>

在上面的例子中它是一个相当简单的根公式(D2+C3),显然这些可以任意复杂。

我想知道的是是否有可用的库或示例代码可以使用任何较低的单元格(例如 D4、D5、D6)并返回“未共享”公式?

例如对于 D6,这将返回 "D5+C6"

4

1 回答 1

4

不容易,但可以做到。我要做的是使用Linq。

<v:f>.Value <> ""首先,我会在和找到任何单元格<v:f>.@t = "shared"。然后我会做.TakeWhile一个.ElementsAfterSelfwhere<v:f>.Value = ""<v:f>.@t = "shared".

一旦我有了那个 IEnumerable(Of XElement),我就会对第一个1的公式使用解析器,然后执行 aFor Each为每个 XElement 创建一个新公式,增加单元格的相对值。

1 Eric White 最近关于使用 C# 和 LINQ 编写递归下降解析器的系列可能是我见过的最好的。

于 2010-09-28T04:19:16.503 回答