Namazu-win32-users-ja(旧)


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

Re: Namazu 2.0.5 for Win32 パッチのまとめ



馬場@京大宇宙物理 です。

 From: satou <satou@xxxxxxxxxxxxxxxxx>
 Subject: [namazu-win32-users-ja] Re: Namazu 2.0.5 for Win32 パッチのまとめ
 Date: Fri, 05 Jan 2001 14:15:47 +0900

 > 2.oleexcel.pl
 > >  >    'Password' => 'dummy password' で対象の .xls ファイルに読み取り
 > >  >    パスワードを付けていた場合、確認ダイアログ無しでスキップさせる。
 > > Windows95 + Excel97 ではこのダミーパスワードの行を削らないと動きま
 > > せんでした。よくわかりませんが、OLE のバージョンの違いでしょうか?
 > こちらでテストした限り、Excel97(SR-1)/2000とも問題ないのですが(^^;
 > パスワードの空白を外して8文字以内でないと駄目なのかな?

すみません。oleexcel.pl をいじる時に olemsword.pl からろくに見もせ
ずに copy&paste したためでした。つまり僕の単純な記述ミスでした。_o_

こちらでも VBA のオンラインマニュアルを入れて確認してみました。
Office97 SR-2 の Excel97 の [ヘルプ]→[トピックの検索]→[Microsoft
Excel Visual Basic リファレンス]→[Visual Basic リファレンス]→
[Microsoft Excel Visual Basic リファレンス]→[メソッド]→[Openメソッ
ド] とたどってみて、'Password' であることを発見しました。
# なんせ全然わからんので確認の仕方がこれでいいのかわかりませんけど。

Excel では引数の変数は 'PasswordDocument' でなくて 'Password' なん
ですね。ここを 'PasswordDocument' としていたためにエラーになってい
たので、ちゃんと直してみたところ問題なく動きました。

ちなみに、Word と PowerPoint で確認したら、Word では'PasswordDocument'
で、PowerPoint ではそういうエントリはありませんね。自分のミスを棚
にあげて言うのもナンなのですが、同じ名前にしといてものです。うう。



 > ■備考
 >  ・半角カナを含む日本語ファイル名の場合、以下のエラーが出るケースが
 >   あるようです。
 > Win32::OLE(0.1402) error 0x80080005: "サーバーの実行に失敗" at C:/namazu/share/namazu/filter/win32/olepowerpoint.pl line 93
 >  ・半角カナの「フ ゜」(フ+半濁音)が「ブ」(フ+濁音)に変換されて
 >   いるようです。

う、これは... パス名の半角カナ→全角カナ変換ルーチンのバグですね。

 >  ・半角カナのディレクトリ名やファイル名は扱えない。これらは全角カナ
 >   に変換されます。これはNamazuの仕様のようですね。

まあ、いちおう「半角カナのフォルダ/ファイル名を作る方が悪い」とい
うことになってますですね。正直な個人的な見解は「確かに至極まっとう
だし、自分では絶対やらないから関係ないけど、そうは言ってもなあ、
rare case じゃないから FAQになるのわかってるし、対応しないことによ
るメリットってあんまりないんだから、対応すればいいのにな」というと
ころですが、そうは言っても、これはあくまでポリシーの問題ですから。

当面の workaround としては、竹迫さんの namazu-users-ja 00849 のパッ
チを当てるというので直るんじゃないかなとおもいます。試してませんが。
なぜなら、pl/codeconv.pl はともかく、nmz/codeconv.c にパッチを当て
ても再コンパイルする環境がないから。まあ、pl/codeconv.pl だけ当て
てみて mknmz しなおしたら、なにやら namazu の出力結果が変わったか
ら、たぶん直るとおもいます。

# このパッチをマージするかどうかは... namazu-devel-ja の話題かな。
# マージしていいとおもうんだけどなー。


 > >  > ■mknmz のパッチ
 > > これは迷ったのでまだ当てていません。当ててよさそうではありますが。
 > はい、Win32で mknmz -U している場合、日本語ファイル名を読める形で
 > 表示するので、取り込んで頂けると嬉しいです。
 > 表示部だけの修正なので他のOSには影響が出ないと思います。

これはそうですね。当てておきました。


 > > のような 1,7,12 のような番号依存は(上はolemsword.plのものですが)、
 > > もう少しなんとかならないのでしょうか。
 > VBAのヘルプを見る限り、ここは「ID番号」か「名前」で指定可能です。
 > さっそく試してみるとエラーが発生せずに処理できました。正しい結果が
 > 得られているかは不明ですが、「名前」でも記述できるようです。

そのようですね。VBAヘルプの DocumentProperties の項目にID番号と名
前との対応表があるのを見つけました。もちろん名前に直しておきました。
ついでにこのへんのコードも整理しました。


 > >  >   ・PowerPoint97でテストした結果、WordやExcelのようにPowerPointを
 > >  >    非表示のまま処理することはできない。必ず表示しないとOLEオート
 > >  >    メーション処理に失敗する。多分PowerPointの仕様でしょう。
 > > # ふむ。なんだかなあ、な仕様ですねえ。
 > 勝手な想像ですが、WordやExcelに比べるとユーザからのVBAの要求が低かった
 > のでは(笑)

これなんですが、少し変則的ですが無理やり解決させました。

まず、$ppt->{Presentations}->Open() で 'WithWindow' を 0 にセット
してやると、PowerPoint の画面は出てきますが中身は表示しないで済む
ようになります。で、こうした上で $ppt->{Visible} = 1; の行を0 にす
ると 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 
に送って無視してやれば、うまくインデックスできるようになります。

# ほんとに無視してよいものか、かなり疑問ではありますが。(?_?)
# もちっとマシな方法があればいいんだけど、どうもなさそうだしな。


 > >  >   ・181行
 > >  >    表示しているPowerPointを[ファイル−終了]と同じ動作で閉じる。
 > > は不要でした。
 > そのようですね。Windows98でもう一度調査してみます。

これは、Win32::OLE::new の第二引数は destructor ですが、そこで 
$_[0]->Quit; ということにしてるから、最後に undef するだけで大丈夫
だということのようです。暗黙の undef でも勝手に消えるだろうけど。
# $_[0]->Quit(0); としてたから destructor が働いてなかっただけ?



いちおう、これらの変更は commit しておきました。といっても、mknmz 
とかは試せないとおもうんですけど(コンパイルする環境があれば別です
が)、フィルタだけでも、

  http://cvs.namazu.org/namazu/filter/win32/

からお試し下さい(もちろん anonymous CVS からの取得でも可)。すみま
せんが、再度 Word,Excel,PPT 全部で確認していただけないでしょうか。

# あ、oleexcel.pl は、最新の竹迫さんの変更点はまだ入れていません。


あ、それから ppt がインデックス対象に入らないというコメントがあり
ましたが、佐藤さんからフォローがあったように、namazu-2.0.5 のデフォ
ルトの /etc/namazu/mknmzrc の $ALLOW_FILE には ppt が入っていない
からです。単に追加してやるだけで大丈夫です。すでに CVS 上のコード
には反映させてあります。
--
馬場  肇 ( Hajime BABA )            E-mail: baba@xxxxxxxxxxxxxxxxxxxxxx
京都大学理学部宇宙物理学教室 博士後期課程
--