2010-09-27 134 views
0

我使用C#中的OpenXML庫來讀取Excel文件。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」

+0

您是否允許假設已安裝Excel?我想這可能會更容易,如果你可以使用COM互操作來簡單地加載電子表格然後訪問該單元格。 – 2010-09-27 23:32:59

+0

唉,Excel本身不可用。 – 2010-09-27 23:36:36

回答

3

不容易,但它可以完成。我會做的是使用Linq。

首先我會找到任何單元格,其中<v:f>.Value <> ""<v:f>[email protected] = "shared"。然後我會做一個.TakeWhile.ElementsAfterSelf其中<v:f>.Value = ""<v:f>[email protected] = "shared"

一旦我有IEnumerable的(中的XElement),我會然後在第一個使用解析器對式,然後做一個For Each以創建每個的XElement新公式,遞增該單元的相對值( S)。

最近埃裏克懷特在Writing a Recursive Descent Parser using C# and LINQ系列可能是我見過的最好的。

+0

我很害怕這種情況!感謝這個想法。 – 2010-09-28 09:23:37

+1

@FreddySmith幾年之後,仍然存在使用Open XML擴展共享單元格公式的問題。你能分享你的解決方案嗎?問候。 – 2015-11-16 09:05:12