1

C# の OpenXML ライブラリを使用して Excel ファイルを読み込んでいます。

私の要件の 1 つは、数式を含む各セルの正確な数式を表示できるようにすることです。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 = ""との a を実行し<v:f>.@t = "shared"ます。

その IEnumerable(Of XElement) を取得したら、最初の式 1 の式にパーサーを使用しからFor Each、XElement ごとに新しい式を作成し、セルの相対値をインクリメントします。

1 C# と LINQ を使用した再帰降下パーサーの作成に関する Eric White による最近のシリーズは、おそらく私が見た中で最高のものです。

于 2010-09-28T04:19:16.503 に答える