

どなたかご存知の方お教えいただきたいです。  
現在開発中の機能で、「起動中のExcelにDBから取得した値を転記する」  
という機能があります。  
問題なく書き込みできる場合もあるのですが、どうも動作が不安定で、  
転記できる場合とできない場合があります。

この機能を使用する業務は緊急を要する場合が多いので、  
不安定さは解消する必要があり、困っています。  
環境はWindows7Professioal、Excel2010 C# Visualstudio2012です。

起動時のメソッドは以下を使用しています。  
Marshal.GetActiveObject( "Excel.Application" )


CC BY-SA 3.0
2016-11-16T08:48:04.893
30448
2016-11-18T02:42:48.640
2016-11-18T02:42:48.640
19585
19585
question
c# excel
C#　起動中のExcelに書き込みする際の動作が不安定（Interop,Excel2010)


ご質問の内容だけではわからないのですが、リリース漏れ問題の可能性も考えられると思いました。

COMオブジェクトはリファレンスカウンター方式のためリリース漏れがあるとそれ以降の動作が不安定になります。

リリース漏れ後は目に見えないExcelアプリケーションインスタンス(以下EAIと略)が残ってしまうので、見かけ上起動中のEAIが一つに見えても実際は複数存在している状態になります。この状態ではGetActiveObjectがどのEAIを返すかは保証されませんのでEAIへの操作結果が画面を持つExcel上に反映されたりされなかったりといったことが起こると思います。


CC BY-SA 3.0
2016-11-16T14:11:12.097
30453
2016-11-17T05:05:19.613
2016-11-17T05:05:19.613
4417
4417
30448
answer


原因発覚し、解決しました。  
複数のexcelを起動していた時の動作が問題でした。  
GetActiveObjectでは起動しているExcelが1つのみの場合のみ有効ということでした。

<http://qa.atmarkit.co.jp/q/4634>  
上記URLを参考に、ROTから検索することで、解決できました。  
お忙しい中ご回答いただきました皆様、ありがとうございました。


CC BY-SA 3.0
2016-11-18T02:40:03.890
30492
2016-11-18T02:40:03.890
19585
30448
answer