忍者ブログ
×

[PR]上記の広告は3ヶ月以上新規記事投稿のないブログに表示されています。新しい記事を書く事で広告が消えます。

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を使って特定のファイルにアクセスする機能

ソースと解説はまた後日追記します。
PR
COMMENT
name
title
text
color   Vodafone絵文字 i-mode絵文字 Ezweb絵文字
mail
URL
pass
secret
TRACKBACK
TrackbackURL:
PREV ←  HOME  → NEXT
プロフィール
HN:
komyu/シュクレール/修造
性別:
非公開
自己紹介:
こうぶつはけものみみとのーびす(♀)とエリーン
主にROとTERAとラノベと雑多なkomyuの日記帳です。
新生FF14
TERA紋章しみゅ
ROサポートツール
タイムライン
RSSボットが記事更新をつぶやくのがほとんどっス…
ROキャラクター紹介


TERAキャラ紹介

シュクレール(バサ)



syuzo(エレ)



サケマス(アチャ)


その他サブ

ウリエルキゥィス(スレLv54)

Vermillion(サラLv56)

パズドラ

157,318,362
フレンド募集中
枠なきゃ増やす
最終プレイ3日以上になったら消す
カレンダー
03 2024/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
ツリーカテゴリ
ブログ内検索
最新コメント
[04/30 のな]
[03/22 NEIN]
[03/22 NEIN]
[10/31 イロイ]
[05/02 NONAME]
Copyright (C) 2024 のーびす監察日記 All Rights Reserved.
Photo by 戦場に猫 Template Design by kaie
忍者ブログ [PR]