Sunday, July 26, 2009

岡三RSS、敷居高し、その3

 しばらくいじってみたけど、結局、CreateObject('Excel.Sheet' って感じでエクセルのインスタンスを立ち上げないと、岡三のアドインが有効にならない。'Excel.Application'ではダメなんだな。何が違う?アドイン自体は、何度もインストールし直して、エクセルを普通に立ち上げて使う分には問題ない状態になっているのに。

 で、起動したエクセルのプロセスの解放の仕方が、これまた謎だ。

 まー、正直な所、エクセルを経由せず、直接、通信できるようになればプログラムも面白くなるかもしれないが、現状では・・・。岡三デスクトップ自体に通信の機能ついているんだろうから、ガジェット作成用にでも、ぜひ仕様を公開してもらいたい。

 使い所にもよるが、OLE経由の手動更新アクセスは実用的とは言いがたい。外からエクセル制御なんてのは、やはり、本末転倒、素直にエクセル単体で完結するべき機能、能力かと。というか、この場合、リクエストしてからの反応の悪さが問題なので、エクセルを経由しようが、直だろうが遅いままなのかもしれないが。

 自動更新の関数は、試すまでもない。仕組み上、楽天RSS並みの動きは無理に思える。古臭いDDEなどと文句をつけていた楽天RSSは、神仕様であったといわざるをえない。マケスピ最強伝説は続く・・・。
 08/01, 02 追記
 CreateObject('Excel.Sheet'~が、どうのこうではなく、岡三RSSのアドインが有効になっているだけで、終了時にエクセルのプロセスを解放できないようだ。何も操作をせずに、そのまま閉じるだけでも起こる。アドインのチェックを外せば問題なく、プロセスは解放される。Delphi側の問題なのだろうか?

 とりあえずの対処としては、普通にエクセルを立ち上げ(手動なり、shellexecuteとかで)て、それに対して、GetActiveOleObjectして操作する。ただし、GetActiveOleObjectでは、エクセルのインスタンスが複数ある場合、目的のエクセルを選べない。プロセスやハンドルから直接、このエクセルを使いたいというような方法はないのか?
 08/05 追記
 OleContainer 使ってないVer

2 Comments:

  • こんにちは。複数の Excel のインスタンスを区別して取得する方法ですが、以前に掲示板で質問して教えてもらったことがあります。(C# ですが。)
    http://ap.atmarkit.co.jp/bbs/core/fdotnet/12662

    By Anonymous unibon, at 8/21/2009 04:29:00 PM  

  • Delphiで、それっぽく真似してみました。RunningObjectTableとやらで、確かに別々のエクセルのブックが拾えますね。この辺は、ほんと難しい。BindToObjectの使い方が理解できないままです。

    By Anonymous npz, at 8/21/2009 10:15:00 PM  

Post a Comment

<< Home