- 12/02 Information!!
- 07/07 【グラブル】バハムートを最終上限解放
- 07/06 【グラブル】光有利の古戦場
- 06/14 【動物園】愛媛県立とべ動物園
- 05/31 【グラブル】開放したシスとエッセルの使用感
This is new entry
jscriptでのエクセルの多重起動の制御について。
(特定のファイルが開いていることを知る方法)
◇まずは必要性について
エクセルをデータロガーのように、開いた状態にしておいて、Limechatから自動で必要な発言だけを収集する。などといった動作をさせたいとします。
エクセルの操作をjscriptで行いたいとき、開くときにはWorkbooks.Open等を使うと思います。また、既に開いているエクセルにアクセスする際にはGetobject等を使うと思われます。
結構これらは曲者で、トリガのたびにWorkbooks.Openなんてしてたらウィンドウがガンガン増えていきますし、Getobjectはちゃんと指定したエクセルが既に開いている状態でないといろいろ予期しない動作をします。
特に二回目以降は読み取り専用で開いていくので厄介です。
なので特定のファイルがいま開いています。と言う状態を知りたいわけです。
そして確かに開いてます。と分かればGetobjectで安全にアクセスできると言うわけです。
多重起動と書いてますが、私のメインの使用目的は上記のようなものです。
◇考え方
jscriptでの多重起動は結構厄介です。
VB.NETをやったあとだと特にそう感じます。
多重起動のチェックは通常はファイル名等を見る
・MainWIndowTitleプロパティ
・Mutexクラス
等の方法があるのですが、今回はLimechatでのVerについて限定します。
このVer5.8.22886ではこれらが使えません。
なので代案として、
プロセス監視
を用います。
基本的な考え方としては
・既にそのプロセスが存在していたら多重起動をさせないように制御する
具体的にいえばプロセスにEXCEL.EXEが既にあったら制御を掛けるといったふうになります。
しかし、エクセルは開くたびにプロセスが個数分増えていきます。
3つのエクセルファイルを開けば3つのEXCEL.EXEプロセスが生まれます。
なのでこのエクセルファイルの多重起動を制御したい。と言う場合にはプロセスの監視だけでは不十分です。
つまり以下の問題が発生します。
①プロセスではファイル名が分からない。
②ファイル名を取得する手法がjscript5.8.22886では使えない
③エクセルは複数プロセスを発生させる(すべてEXCEL.EXE)
以上の理由によって複数のエクセルが開いている場合には、特定のエクセルファイルの判別が困難になっています。
じゃぁ固有の属性は何か無いかと考えたときに、プロセスIDがあります。
・プロセスIDは同時には重複しない
・開くたびに割り振られるIDが変わる
・開いている間はずっと固定
こういう特徴があります。
多重起動を制御するということは、一度は既に開いた状態なのですから、その初回のときにEXCEL.EXEのプロセスIDを記憶させておいて、以後プロセスIDを指定してアクセスするようにすれば、他のエクセルが混じっていても特定のエクセルファイルを操作できますし、多重起動のチェックも出来ます。
しかしこの手法には、「初回起動時に他のエクセルが起動していないこと」が必須条件になります。
というのもプロセスIDを取得するにはやはりプロセスからEXCEL.EXEを探して、それに付随するプロセスIDを記憶させるからです。他のEXCEL.EXEが混ざっていると正しく取得が出来なくなります。
◇必要な機能
まとめるとだいたい以下のような機能を持ったスクリプトを組まないといけません。
①特定ファイルの初回起動時に他のEXCELが開いてないかチェックする機能
②起動させるときにプロセスIDを記憶させる機能
③エクセルにアクセスするトリガが発生したときに、PIDを使って特定のファイルにアクセスする機能
ソースと解説はまた後日追記します。
(特定のファイルが開いていることを知る方法)
◇まずは必要性について
エクセルをデータロガーのように、開いた状態にしておいて、Limechatから自動で必要な発言だけを収集する。などといった動作をさせたいとします。
エクセルの操作をjscriptで行いたいとき、開くときにはWorkbooks.Open等を使うと思います。また、既に開いているエクセルにアクセスする際にはGetobject等を使うと思われます。
結構これらは曲者で、トリガのたびにWorkbooks.Openなんてしてたらウィンドウがガンガン増えていきますし、Getobjectはちゃんと指定したエクセルが既に開いている状態でないといろいろ予期しない動作をします。
特に二回目以降は読み取り専用で開いていくので厄介です。
なので特定のファイルがいま開いています。と言う状態を知りたいわけです。
そして確かに開いてます。と分かればGetobjectで安全にアクセスできると言うわけです。
多重起動と書いてますが、私のメインの使用目的は上記のようなものです。
◇考え方
jscriptでの多重起動は結構厄介です。
VB.NETをやったあとだと特にそう感じます。
多重起動のチェックは通常はファイル名等を見る
・MainWIndowTitleプロパティ
・Mutexクラス
等の方法があるのですが、今回はLimechatでのVerについて限定します。
このVer5.8.22886ではこれらが使えません。
なので代案として、
プロセス監視
を用います。
基本的な考え方としては
・既にそのプロセスが存在していたら多重起動をさせないように制御する
具体的にいえばプロセスにEXCEL.EXEが既にあったら制御を掛けるといったふうになります。
しかし、エクセルは開くたびにプロセスが個数分増えていきます。
3つのエクセルファイルを開けば3つのEXCEL.EXEプロセスが生まれます。
なのでこのエクセルファイルの多重起動を制御したい。と言う場合にはプロセスの監視だけでは不十分です。
つまり以下の問題が発生します。
①プロセスではファイル名が分からない。
②ファイル名を取得する手法がjscript5.8.22886では使えない
③エクセルは複数プロセスを発生させる(すべてEXCEL.EXE)
以上の理由によって複数のエクセルが開いている場合には、特定のエクセルファイルの判別が困難になっています。
じゃぁ固有の属性は何か無いかと考えたときに、プロセスIDがあります。
・プロセスIDは同時には重複しない
・開くたびに割り振られるIDが変わる
・開いている間はずっと固定
こういう特徴があります。
多重起動を制御するということは、一度は既に開いた状態なのですから、その初回のときにEXCEL.EXEのプロセスIDを記憶させておいて、以後プロセスIDを指定してアクセスするようにすれば、他のエクセルが混じっていても特定のエクセルファイルを操作できますし、多重起動のチェックも出来ます。
しかしこの手法には、「初回起動時に他のエクセルが起動していないこと」が必須条件になります。
というのもプロセスIDを取得するにはやはりプロセスからEXCEL.EXEを探して、それに付随するプロセスIDを記憶させるからです。他のEXCEL.EXEが混ざっていると正しく取得が出来なくなります。
◇必要な機能
まとめるとだいたい以下のような機能を持ったスクリプトを組まないといけません。
①特定ファイルの初回起動時に他のEXCELが開いてないかチェックする機能
②起動させるときにプロセスIDを記憶させる機能
③エクセルにアクセスするトリガが発生したときに、PIDを使って特定のファイルにアクセスする機能
ソースと解説はまた後日追記します。
PR
COMMENT
プロフィール
HN:
komyu/シュクレール/修造
性別:
非公開
自己紹介:
こうぶつはけものみみとのーびす(♀)とエリーン
主にROとTERAとラノベと雑多なkomyuの日記帳です。
主にROとTERAとラノベと雑多なkomyuの日記帳です。
TERAキャラ紹介
シュクレール(バサ)
syuzo(エレ)
サケマス(アチャ)
その他サブ
ウリエルキゥィス(スレLv54)
Vermillion(サラLv56)
パズドラ
157,318,362
フレンド募集中
枠なきゃ増やす
最終プレイ3日以上になったら消す
カレンダー
03 | 2025/04 | 05 |
S | M | T | W | T | F | S |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 |
最新記事
(12/02)
(07/07)
(07/06)
(06/14)
(05/31)
ブログ内検索
最新コメント