オブジェクト配列コレクションエラー

 これまで、C#を使って、InDesignCS4 + .NETFramework3.5 でインデザインを制御していたのですが、InDesignCS5 + .NETFramework4.0に開発環境を変えました。

 今回は、内部的には、PageItemの親が変更になったのと、レイヤー管理に階層構造が盛り込まれた事を除けば、そんなに変更がなかったためか、移植は割とすんなり終わりました。

 現在は、過去のユーザーからの障害報告時のデータや製品に付けるチュートリアルのサンプルデータ、これまで作成したテストデータなどを流して、稼働チェックをしています。

 今日、思わぬところでエラーとなって、何故?という感じで驚いています。

 それは、処理対象となるインデザインのテキストフレームをテキストフレームの配列から取得する部分で、一部、直接ラベル名を利用して取得している所があり、この部分で配列コレクションエラーを起こしてしまうという現象が発生したからです。

 例えば、aTextFrame = allTextFrames["あいうえお"]; のようにして、これまで問題なかったロジックでエラーが出てしまうということです。当然のことながら、前のバージョンでは問題ない部分です。

 仕方ないので、ループさせて名前を比較させるという古典的手法に変更しました。

 こうすれば、当然、該当するテキストフレームオブジェクトを取得できます。

 何故なのか考えました。

 ① .NET4.0になってCOMサービスが変化したため。

 ② InDesignCS5のScriptProviderに変更があったため。

 ③ インデザインのオブジェクト構造に変更があったため。

 ④ そもそも、テキストフレームにラベル名をつけたインデザインドキュメントテンプレートを、InDesignCS4 -> InDesignCS5に変換する部分で、インデザインが何か変なことをしているため。

 など、考えてみましたが、分かりません。④が臭いでしょうかね?

 落とし穴は、油断している所にあるもんでした。

この記事へのトラックバック