Namazu-win32-users-ja(旧)


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

返信:[namazu−win32−use



池浦@福岡県水産海洋技術センター豊前海研究所です。
 竹迫さん、早速のフォローありがとうございます。

>竹迫です。
>
>池浦さん、早速の問題報告ありがとうございました。
>
>Subject: [namazu-win32-users-ja] インデックス作成時のエラー
>From: <sikeura_BGY@xxxxxxxxxxxxxxxxxxxxxxxxxx> said:
>> 待ってましたとばかりにNew oleexcel.plを使用していて問題が起きました。
>
>すみません。控え目にリリースすると、あんまり多くの人に使ってもらえないかな?
>と思って、ちょっと文書を誇張して書いてみました。(^^;
>
>> New oleexcelフィルタでテキスト出力した後のファイルをmknmzが処理している時に
>>異常終了するexcelファイルがあります(ちなみに従来のoleexcel.plだとインデックスが
>>作成できます。時間はかかりますが)。
>> 状況としては、oleexcelフィルタからテキストとして内容がmknmzに
>>返ってから後の処理で異常になっているようで、Perl.exeのメモリ使用量が
>>直線的に増加して約26MB程度になった後、
>
>なるほど。
>Perl.exe のメモリ使用量が増えすぎて異常が起こってしまっているようですね。
>早速、メモリをできるだけ使用しないように New OLE Excelフィルタを作り直し
>てみました。申し訳ありませんが、これでまたお試しいただけると助かります。
>
>・New OLE Excel filter v3.03 (Excelを毎回起動・終了しない)
> http://www.namazu.org/~takesako/pub/oledemo.lzh
>
>あと、マシンに積んでいるメモリ容量はどのくらいでしょうか?
>私のところでは Windows95(96MB) と WindowsNT4.0(192MB) の環境で試しました。

 すいません。メモリ搭載量を書くのを忘れていました。256MB積んでいます
(Windows2000Professionalマシンも256MBです)。


>>そこで、New oleexcel.plの一時ファイルMNZ.XLS1.tmpを調べるとテキスト出力は
>>正常に実行されおり、問題のファイルを手動でテキスト出力した物と同一でした。
>
>そのときの NMZ.XLS1.tmp のファイルサイズはいくらでしたでしょうか?
>参考まで教えていただけると有り難いです。

 エラーがでたファイルのNMZ.XLS1.tmpは91KBありました。最初の2行に全角漢字の
行があった後は全てタブコードの行です。

>> 更に詰めてみると、1行目の最後の"銘柄"の文字を削除或いは"銘柄"の後に半角文字を
>>付けるとタブのみの行が511以上あっても正常に終了します。どうもmknmzの行頭行末処理に
>>絡んでいそうなの問題のようなのですが、どなたか解決策をご存じないでしょうか。
>
>すみません。こちらの問題についてはちょっとよくわかりません。
>他の方のフォローをお待ちしてます。(^^;
>

私の環境でのこの問題はNew OleExcel.plというより、mknmzの問題のようで、

1行目:年<TAB>月<TAB>日<TAB>場所<TAB>種類<TAB>サイズ<TAB>銘柄
 + 511行以上の<TAB>のみの行
 (<TAB>:タブコード)
の内容のテキストファイルでエラーが再現されます。問題のexcelファイルも、上記のテキスト
ファイルでもエラーになります。やはりmknmzの関係のようで、残念ながらoledemoを使用しても
結果は同様です。New Oleexcel.plは自分もPerlが分かったら作ろうかと思っていた位なので、
今回の問題がクリアできたらうれしいです。当方の環境だけで起きる問題かもしれませんが、
どなたかフォローをお願いします。

 それと、New oleexcel.plについてですが、

1.excelブックの開き方
 汎用性を持たせるためには、
    Updatelinks=0(外部参照、リモート参照を更新しない)と、
    IgnoreReadOnlyRecommended=true(読みとり推奨メッセージの非表示)

をOpenメソッドのパラメータに追加した方が、確認ダイアログボックスの入力待ちで止まることが
なくなってベターかと思います。現に当方では外部参照や読みとり推奨bookがあるので、これを
しないとmknmzが止まってしまいます。

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を開くとうまくいきそうなのですが、実際にはうまく行きませ
んでした(自分がへたくそなだけ?)。

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

  Application.EnableEvents=false

と記述したダミーのbookを作成し、このbookをNew oleexcel.pl中でいったん開いてから閉じて
(これでexcelのインスタンスのイベントマクロを無効にできます)、次に目的のブックを開いて、
SaveAsメソッドでNMZ.XLS1.tmpを書き出す前にDisplayAlertsプロパティにfalseを設定することで、
Openイベントの実行とNMZ.XLS1.tmpの上書き確認ダイアログボックスの表示をトラップすることが
できました。ダミーのbookのOpenイベントにThisworkbook.Closeまで書いてしまうと、イベントの
無効化が効かなかったので、こんな形にしています。
 全然スマートな方法ではないですが、ご参考までに。

                e-mail:s-ikeura_sea@xxxxxxxxxxxxxxxxxxxxxxxxxx