Namazu-win32-users-ja(旧)


[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

RE: New OLE Excel filter v3.03 での試験



竹迫です。

Subject: [namazu-win32-users-ja] New OLE Excel filter v3.03 での試験
From: S.Takata <s.takata@xxxxxxxxxxxxxxxx> said:
>New OLE Excel filter v3.03を使用したところ、途中で
>***********************************
>Microsoft Excel
>この場所に'C:\index\NMZ.xls1.tmp'という名前のファイルが既にあります。置き換
>えますか?
>はい いいえ キャンセル
>***********************************
>というメッセージが表示され、一時停止してしまいます。
>はいを数回クリックすると再び動き出します。

S.Takataさん、早速のご報告ありがとうございます。
このようなダイアログが表示されないように、スクリプト中で DisplayAlerts
プロパティを False に設定しているのですが、何故か動作環境によっては
このような現象が起こるようですね。(^^;

Subject: [namazu-win32-users-ja] 返信:[namazu−win32−use
From: <sikeura_BGY@xxxxxxxxxxxxxxxxxxxxxxxxxx> said:
> それと、New oleexcel.plについてですが、
>1.excelブックの開き方
> 汎用性を持たせるためには、
>    Updatelinks=0(外部参照、リモート参照を更新しない)と、
>    IgnoreReadOnlyRecommended=true(読みとり推奨メッセージの非表示)
>をOpenメソッドのパラメータに追加した方が、確認ダイアログボックスの入力
>待ちで止まることがなくなってベターかと思います。現に当方では外部参照や
>読みとり推奨bookがあるので、これをしないとmknmzが止まってしまいます。

池浦さん、情報どうもありがとうございました。
早速、Open時に IgnoreReadOnlyRecommended と Updatelinks のパラメータを
指定するように変更しました。あと、、、

>2.Openイベントを記述しているexcelファイルでは、New oleexcel.pl中の
>SaveAsメソッドでNMZ.XLS1.tmpを書き出す際にNMZ.XLS1.tmpが削除されず、
>2つ目以降のシートから、excelからNMZ.XLS1.tmpの上書き確認ダイアログ
>ボックスが表示されるようです。
> oleexcel.plを見る限り、NMZ.XLS1.tmpは削除されるはずなのですが、
>なぜか削除されていないようです(?)。
> New oleexcelで作成したexcelのインスタンスに対して、EnabeEventsプロ
>パティをfalseに設定してイベントを無効化してからbookを開くとうまくいき
>そうなのですが、実際にはうまく行きませんでした(自分がへたくそなだけ?)。

これはExcelが直前に保存したファイルに対してロックをかけて、他のアプリ
ケーションがファイルを変更できないようにしているのが原因のようでした。
複数のシートのあるExcelファイルでは、各シートを2つの別々のファイルに
交互に保存・削除することによって、上書き保存のダイアログを表示させな
いように New OLE Excel filter を変更してみました。

これでS.Takataさんのご報告されたような現象は起こらなくなると思います。

> またインデックスの作成時にOpenイベントの処理がいちいち実行されては
>困るので、あらかじめOpenイベントに
>  Application.EnableEvents=false

これについてですが、例えばファイルを開くと自動的にデータベースに接続す
るようなVBAを組み込んだExcelファイルがあるという事でしょうか?

今まで私はVBAを使った経験がなく、今回がOLEオートメーションを利用した
初めてのスクリプトでしたので、このようなノウハウをいただけると、とても
助かります。(^^) とりあえず、EnableEventsプロパティを False に設定する
ようにスクリプトを変更してみましたので、ご確認いただけると助かります。

Sbject: Re: OLE アプリケーションを毎回起動・終了させないようにする方法
From: NOKUBI Takatsugu <knok@xxxxxxxxxxxxx> said:
>>> とりあえず OLE では、別の方法を考えて、うまくアプリケーションの
>>> destructor が働いてくれるようにいろいろと試してみようと思います。
>  ふと気がついたのですが、単に filte が require された時や perl 終了時
>になんらかの code を実行させるのなら、わざわざ hook のようなものを実装
>しなくとも BEGIN, END block を使えば良いような気がしてきました。
>  その辺りで代用できませんでしょうか?

なるほど、確かに ENDブロックを使用すれば目的は達成されそうです。
さすが野首さん、私には気が付きませんでした。(^^;
これなら、mknmz が途中で die しても大丈夫そうですし、
mknmz.in を変更する必要はなくなりますね。

これらの修正を全て含めた oleexcel.pl を以下の URL に置きましたので、
お手数をお掛けしますが、またご確認いただけると有り難いです。

・New OLE Excel filter v3.05
  http://www.namazu.org/~takesako/pub/oleexcel.pl

動作報告お待ちしております。以上、よろしくお願いいたします。

--
   広島市立大学 情報科学部 情報機械システム工学科
     竹迫 良範 <takesako@xxxxxxxxx>