トップ回答者
Microsoft.ACE.OLEDB で出力した際に再計算されない

質問
回答
-
無理かな…。Excelは更新時に再計算を行いその結果をキャッシュしています。しかしOLE DBでは単純に該当セルを更新するだけでExcelが動作しているわけではないため再計算が行えません。
Excel上では操作方法が見つけられませんでしたが、xlsxスキーマ的には
<sheetCalcPr fullCalcOnLoad="true"/>
が定義されていて、Office Open XML SDKを使ってこんな風に更新してやることで、xlsxファイルを開くときに再計算させることはできるようですが…試してません。
なお、Office のサーバーサイド オートメーションについてによるとACEを含むOfficeオートメーションをASP.NETで使用することは非推奨でありサポート外とのことです。
-
私のコメントが正しく理解されているかどうか怪しいので再度説明しておきます。
先に挙げた <sheetCalcPr fullCalcOnLoad="true"/> はxlsxファイルに記述するものです。Excelがxlsxファイルを開く際にこれを発見すると強制的に再計算が実行されるため、見た目上は再計算されたようになるはずです。
OLEDB更新時に毎回書き込む必要はなく、テンプレートに予め記述しておけばそれでいいはずです。書き込み方もおおよそのコードはリンク先に示されています。(オープンしてプロパティを1つ設定して保存するだけ。)私もOffice Open XMLの知識は全くありませんがこの程度なら手探りでも実現できるとは思いますが。
# ただし、これが質問者さんの目的を達成するものかどうかは確認できていません。
すべての返信
-
無理かな…。Excelは更新時に再計算を行いその結果をキャッシュしています。しかしOLE DBでは単純に該当セルを更新するだけでExcelが動作しているわけではないため再計算が行えません。
Excel上では操作方法が見つけられませんでしたが、xlsxスキーマ的には
<sheetCalcPr fullCalcOnLoad="true"/>
が定義されていて、Office Open XML SDKを使ってこんな風に更新してやることで、xlsxファイルを開くときに再計算させることはできるようですが…試してません。
なお、Office のサーバーサイド オートメーションについてによるとACEを含むOfficeオートメーションをASP.NETで使用することは非推奨でありサポート外とのことです。
-
Office Open XML の知識はすでに十分お持ちなのでしょうか?
どんな計算式なのか不明ですが、ASP.NET 側で計算してからその計算結果を一緒に Excel ファイルに書き込むことが可能であれば、これから Office Open XML 勉強して必要な機能を実装するより、その方がはるかにやりたいことの実現が早そうですが、いかがですか?
- 編集済み SurferOnWww 2013年11月28日 2:07 一部追記
-
私のコメントが正しく理解されているかどうか怪しいので再度説明しておきます。
先に挙げた <sheetCalcPr fullCalcOnLoad="true"/> はxlsxファイルに記述するものです。Excelがxlsxファイルを開く際にこれを発見すると強制的に再計算が実行されるため、見た目上は再計算されたようになるはずです。
OLEDB更新時に毎回書き込む必要はなく、テンプレートに予め記述しておけばそれでいいはずです。書き込み方もおおよそのコードはリンク先に示されています。(オープンしてプロパティを1つ設定して保存するだけ。)私もOffice Open XMLの知識は全くありませんがこの程度なら手探りでも実現できるとは思いますが。
# ただし、これが質問者さんの目的を達成するものかどうかは確認できていません。