Namazu-win32-users-ja(旧)


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

質問【olepowerpoint.plの改善点について】



はじめまして。

山下と申します。
宜しくお願いします。

以下の環境でnamazuのフィルタを
動作させようと考えているのですが
olepowerpoint.pl内でスクリプトがフリーズしているように
見えます。
過去のログ等拝見しますと、
無事動作されているようなので、どうにも困り果てています。

namazuのフィルタに関しては
WindowsXP(あるいはOfficeXP)では動作しない等条件が存在するのでしょうか?

どなたかご存知の方いらっしゃいましたら、
お知恵を拝借したいと考えております。

[動作環境]
・Windows XP Professional SP1
・Microsoft Office XP Professional
・Active Perl v5.8.1

[実行しようとしていること]
・PowerPointファイルからのテキストの抽出
・olepowerpoint.plのRead

[olepowerpoint.plの起動方法]
・VC++のプログラム内から、CreateProcessでPerl モジュールを起動しフィルタとしてolepowerpoint.plを指定

[発生状況]
 $ppt->{Visible} = 1;と書き換えると100%動作する
 $ppt->{Visible} = 0;のままだとほぼ100%動作が固まる(ようにみえる)

場所としては、$ppt->{Visible} = 0;の部分で処理がとまっている。
(PowerPointオブジェクトからの応答がなくなる)ように見えています。

以上です.


----------------------------------------------------------------------------------
竹迫です。

Subject: [namazu-win32-users-ja] Re: Namazu 2.0.5 for Win32パッチのまとめ
From: baba@xxxxxxxxxxxxxxxxxxxxxx <baba@xxxxxxxxxxxxxxxxxxxxxx> said:
> > >  >   ・PowerPoint97でテストした結果、WordやExcelのようにPowerPointを
> > >  >    非表示のまま処理することはできない。必ず表示しないとOLEオート
> > >  >    メーション処理に失敗する。多分PowerPointの仕様でしょう。
>
>これなんですが、少し変則的ですが無理やり解決させました。
>
>まず、$ppt->{Presentations}->Open() で 'WithWindow' を 0 にセット
>してやると、PowerPoint の画面は出てきますが中身は表示しないで済む
>ようになります。で、こうした上で $ppt->{Visible} = 1; の行を0 にす
>ると PowerPoint の画面が出なくなります。

そんな方法があったんですか!これは凄い...(^^;
早速こちらでも試してみたところ PowerPoint の画面は出てこずに
インデックスの作成ができました。これはかなり嬉しいことです。

>ですが、このままだと、
>
>  Win32::OLE(0.1402) error 0x80020009: "例外が発生しました。"
>      in PROPERTYPUT "Visible" at /namazu/share/namazu/filter/win32/olepowerpoint.pl line 159
>  OLE exception from "Microsoft PowerPoint 8.0":
>
>  Application.Visible : 無効な要求です。アプリケーション
>  ウィンドウを非表示に設定することはできません。
>
>の例外が起きます。ところが、この例外メッセージが出てもインデックス
>は正常に作成されるようです。ということで、この例外メッセージを nul 
>に送って無視してやれば、うまくインデックスできるようになります。

ちょっと荒業ではありますが、$Win32::OLE::Warn = 0; という一行を
書き加えると例外メッセージの表示を抑制することができるみたいです。

以下は Win32::OLE のドキュメントの一部です。

| $Win32::OLE::Warn
| 
| This variable determines the behavior of the Win32::OLE module when
| an error happens. Valid values are:
| 
|  0 Ignore error, return undef
|  1 Carp::carp if $^W is set (-w option)
|  2 always Carp::carp
|  3 Carp::croak

>いちおう、これらの変更は commit しておきました。といっても、mknmz 
>とかは試せないとおもうんですけど(コンパイルする環境があれば別です
>が)、フィルタだけでも、
>
>  http://cvs.namazu.org/namazu/filter/win32/
>
>からお試し下さい(もちろん anonymous CVS からの取得でも可)。すみま
>せんが、再度 Word,Excel,PPT 全部で確認していただけないでしょうか。

これで OLEフィルタに関しては、多くの問題が解決されたみたいですね。
あとは、みなさんの動作報告を待つだけかな? 試された方は、
是非メーリングリストにご報告していただけると助かります。(^^;

以上、よろしくお願いいたします。

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