F# と Excel Interop を使用してデータを Excel スプレッドシートに出力しています。私の最初のアプローチは、各セルを個別に設定することでした:
worksheet.Range(range1).Value2 <- "=sum(a1:a10)"
worksheet.Range(range2).Value2 <- "=min(a1:a10)"
worksheet.Range(range3).Value2 <- "=max(a1:a10)"
(* etc *)
ただし、数式が多数ある場合、これは遅すぎるため、配列に切り替えました。
worksheet.Range(range).Value2 <- [| "=sum(a1:a10)"
"=min(a1:a10)"
"=max(a1:a10)" |]
また
worksheet.Range(range).Formula <- [| "=sum(a1:a10)"
"=min(a1:a10)"
"=max(a1:a10)" |]
ただし、現在、Excel は数式の値を計算する代わりに、これらの文字列をセルに表示するだけです。私も試しました:
worksheet.Range(range).FormulaArray <- [| "=sum(a1:a10)"
"=min(a1:a10)"
"=max(a1:a10)" |]
しかし、それは各フォーミュラのターゲット範囲を台無しにしました. 何が起こっているのかわかりません。(そのままにしておく代わりに"a1:a10"
、Excel は数式がどこにあるかに基づいてターゲット範囲を変換しました。)
これを行うより良い方法はありますか?
更新:「=MIN($G$2:$G$5)」も使用してみましたが、Excel が文字列を表示するだけで数式を評価しないという同じ効果が得られました。
価値があるのは、セルを入力して数式の任意の文字を消去してから再度追加すると、「入力」を押すと、Excel がそれを評価することです。
更新 2 : 次のことも試しました。
worksheet.Range(range).FormulaR1C1 <- [| "=sum(R2C[0]:R4C[0])"
"=average(R2C[0]:R4C[0])"
"=min(R2C[0]:R4C[0])"
"=max(R2C[0]:R4C[0])" |]
しかし、同じ問題が発生します。Excel は数式を評価するのではなく、それらを文字列としてレンダリングします。