none
Microsoft.ACE.OLEDB で出力した際に再計算されない RRS feed

  • 質問

  • Microsoft.ACE.OLEDB.12.0を使用しExcel2010のファイルへ値を書き込む処理を行っています。

    書込み自体は上手くいくのですが、予め埋め込んでおいた書込み先を参照している計算式が動いてくれません。

    OLEDBで書込みを行うと計算式を処理してくれない物なのでしょうか。

    計算方法等教授頂けると幸いです。

    2013年11月27日 13:53

回答

  • 無理かな…。Excelは更新時に再計算を行いその結果をキャッシュしています。しかしOLE DBでは単純に該当セルを更新するだけでExcelが動作しているわけではないため再計算が行えません。

    Excel上では操作方法が見つけられませんでしたが、xlsxスキーマ的には

    <sheetCalcPr fullCalcOnLoad="true"/>

    が定義されていて、Office Open XML SDKを使ってこんな風に更新してやることで、xlsxファイルを開くときに再計算させることはできるようですが…試してません。

    なお、Office のサーバーサイド オートメーションについてによるとACEを含むOfficeオートメーションをASP.NETで使用することは非推奨でありサポート外とのことです。

    • 回答の候補に設定 星 睦美 2013年11月29日 2:51
    • 回答としてマーク 星 睦美 2013年12月4日 1:23
    2013年11月28日 0:39
  • 私のコメントが正しく理解されているかどうか怪しいので再度説明しておきます。

    先に挙げた <sheetCalcPr fullCalcOnLoad="true"/> はxlsxファイルに記述するものです。Excelがxlsxファイルを開く際にこれを発見すると強制的に再計算が実行されるため、見た目上は再計算されたようになるはずです。

    OLEDB更新時に毎回書き込む必要はなく、テンプレートに予め記述しておけばそれでいいはずです。書き込み方もおおよそのコードはリンク先に示されています。(オープンしてプロパティを1つ設定して保存するだけ。)私もOffice Open XMLの知識は全くありませんがこの程度なら手探りでも実現できるとは思いますが。

    # ただし、これが質問者さんの目的を達成するものかどうかは確認できていません。

    • 回答の候補に設定 佐祐理 2013年11月29日 3:53
    • 回答としてマーク 星 睦美 2013年12月4日 1:23
    2013年11月28日 7:51

すべての返信

  • 確認しておらず思い付きですが、Excel 2010で、ファイル -> オプション -> 数式 -> 計算方法の設定で、ブックの計算方法が手動になっていると、それが影響するのかもしれません。


    ★良い回答には回答済みマークを付けよう! わんくま同盟 MVP - Visual C# http://d.hatena.ne.jp/trapemiya/

    2013年11月28日 0:24
    モデレータ
  • 無理かな…。Excelは更新時に再計算を行いその結果をキャッシュしています。しかしOLE DBでは単純に該当セルを更新するだけでExcelが動作しているわけではないため再計算が行えません。

    Excel上では操作方法が見つけられませんでしたが、xlsxスキーマ的には

    <sheetCalcPr fullCalcOnLoad="true"/>

    が定義されていて、Office Open XML SDKを使ってこんな風に更新してやることで、xlsxファイルを開くときに再計算させることはできるようですが…試してません。

    なお、Office のサーバーサイド オートメーションについてによるとACEを含むOfficeオートメーションをASP.NETで使用することは非推奨でありサポート外とのことです。

    • 回答の候補に設定 星 睦美 2013年11月29日 2:51
    • 回答としてマーク 星 睦美 2013年12月4日 1:23
    2013年11月28日 0:39
  • trapemiya様

    ご返信ありがとうございます。

    計算方法の設定は自動になっております。

    また、対象のExcel表示時後に再計算ボタンを押下しても計算式が更新されません。

    参照元のセルを選択→Enter または 計算式のセルを選択→Enterを行った時のみ更新されるようです。

    2013年11月28日 1:18
  • 佐祐理様

    返信ありがとうございます。

    やはりOLEDBでは無理なのですか・・・

    記載頂いた方法で一度試してみようと思います。

    2013年11月28日 1:22
  • Office Open XML の知識はすでに十分お持ちなのでしょうか?

    どんな計算式なのか不明ですが、ASP.NET 側で計算してからその計算結果を一緒に Excel ファイルに書き込むことが可能であれば、これから Office Open XML 勉強して必要な機能を実装するより、その方がはるかにやりたいことの実現が早そうですが、いかがですか?


    • 編集済み SurferOnWww 2013年11月28日 2:07 一部追記
    2013年11月28日 2:06
  • SurferOnWww様

    返信ありがとうございます。

    恥ずかしながらOffice Open XMLの知識は全くありません。

    他に方法が無いならば調べるしかないかなと・・・

    計算結果の書込みですが、テンプレートが百枚以上あり計算式が全て異なる為システムで吸収するのは厳しいです。

    アドイン等でも良いので再計算が出来ればよいのですが・・・

    2013年11月28日 5:45
  • 私のコメントが正しく理解されているかどうか怪しいので再度説明しておきます。

    先に挙げた <sheetCalcPr fullCalcOnLoad="true"/> はxlsxファイルに記述するものです。Excelがxlsxファイルを開く際にこれを発見すると強制的に再計算が実行されるため、見た目上は再計算されたようになるはずです。

    OLEDB更新時に毎回書き込む必要はなく、テンプレートに予め記述しておけばそれでいいはずです。書き込み方もおおよそのコードはリンク先に示されています。(オープンしてプロパティを1つ設定して保存するだけ。)私もOffice Open XMLの知識は全くありませんがこの程度なら手探りでも実現できるとは思いますが。

    # ただし、これが質問者さんの目的を達成するものかどうかは確認できていません。

    • 回答の候補に設定 佐祐理 2013年11月29日 3:53
    • 回答としてマーク 星 睦美 2013年12月4日 1:23
    2013年11月28日 7:51
  • 佐祐理様

    度々の御返信ありがとうございます。

    ご教示頂いた内容で試してみたところ、希望通りの動作を致しました。

    ありがとうございます。

    今後ともよろしくお願い致します。

    2013年11月28日 10:04
  • まりも XXX さん、こんにちは
    フォーラム オペレーターの星 睦美です。

    参考になったとして投票されている佐祐理 さんの返信に私のほうで[回答の候補に設定] させていただきまた。
    コミュニティのユーザーから参考になる内容の回答がありましたら、投稿者から[回答としてマーク]をお願いします。(お忘れのような場合には私からマークさせていただきますね。)

    それでは、これからもMSDN フォーラムをお役立てください。


    フォーラム オペレーター 星 睦美 - MSDN Community Support

    2013年11月29日 2:57