- - PR -
POIで読み、そのまま出力したxlsがexcelで開けない
1
投稿者 | 投稿内容 | ||||
---|---|---|---|---|---|
|
投稿日時: 2007-11-15 16:48
コントロールを多数持つxlsファイルは、poiで正しく出力できないようです。
既存のxlsファイルを開き、セルに値を入力、保存するツールを作成しています。 poi-3.0.1でまずは基本的な部分を作成し、単純に読み込んでそのまま書き込む機能をテストしたところ、例外も発生せず処理は正常に終了するのですが、出力されたxlsファイルがExcelで開けません(読み込めませんと叱られる)。 既存のxlsファイルにはチェックボックスなどのコントロールが複数存在するのですが、その総数が58以上になると上記現象になることが判りました(57以下なら出力xlsファイルはExcelで開けた)。 poiのバグかと思いwebを漁ってみましたが、関連するような情報が見つかりません。 このままだとこれまでのコーディングが全てパー、新たにVBAで組み直すことになるため、なんとかpoiで解決を図りたいのですが、何かアドバイス or 情報をいただけると幸いです。 コントロール数を数え間違えていたので修正しました。 xlsファイルを新規作成し、チェックボックスを大量に貼り付けても、上記と同じ数字になりました。 [ メッセージ編集済み 編集者: やじゅう 編集日時 2007-11-15 17:41 ] | ||||
|
投稿日時: 2007-11-15 17:54
直接の回答ではないのですが、下記の手順で試したところ、やじゅうさんのおっしゃるような現象は発生せず、Excel (2002 SP3) で開くことができました。
コントロールの数が直接の原因ではなく、その総数が38を超えるあたりで別のトリガを引いているのかもしれませんね。
Excel で開こうとしたときに表示されるメッセージの詳細とか Excel のバージョンなんかも書き込んでおくと回答が付きやすいかもしれません。 | ||||
|
投稿日時: 2007-11-15 17:55
ASF Bugzillaに同じような情報が載ってましたよ、POI2.5で発生したという
ことみたいですけどね。 Can have no more than 60 form controls on a sheet http://issues.apache.org/bugzilla/show_bug.cgi?id=39512 なんか2006/5から放置されているっぽいですが、ASF Bugzillaに登録して 検索すると、もしかしたら良い情報が得られるかもしれませんよ。 | ||||
|
投稿日時: 2007-11-15 18:01
うはww
コメント書いてる途中でコントロール総数の閾値が 39 から 58 に修正されてる・・・。orz 58 個では試してないです。 | ||||
|
投稿日時: 2007-11-15 18:35
乗りかかった船なので、数を増やして試してみました。
私の場合は58個までは大丈夫でしたが59個で 「ファイルを読み込めません。」のメッセージが表示されました。 「ファイルを読み込めません。」って表示されるんですね・・・。orz メッセージの詳細を書いた方がいいとかいっちゃってごめんなさい。 こんな無愛想なメッセージが表示されているとは思いませんでした。 あと、POI でいじる前のファイルを org.apache.poi.hssf.dev.BiffViewer でチェックしてみたんですが、以下のような例外がスローされました。
関係ないかもしれませんが、一応参考まで。 | ||||
|
投稿日時: 2007-11-16 17:02
情報ありがとうございます。
ASF Bugzillaも早速登録し、過去メールを漁りましたが、解決につながる情報はなさそうでした。一応バグレポートは投げておきました(稚拙な英語で)。 自力で解決すべくPOIのソースも覗いてみましたが、5分で挫折しました。 JExcelAPIで逃げられないか試してみたところ、保存したXLSは開けたのですが、シート上のコントロールが全て消えてしまいました。(新規作成したxlsに、チェックボックスを60個貼り付けたデータではOKでした。何が違うのかは調査中です) 結局VBAでやることになりそうです。とほほ… | ||||
|
投稿日時: 2007-11-19 10:07
追加情報です。
JExcelAPIで消えてしまうのは「フォーム」コントロールで、「コントロールボックス」のコントロールは大丈夫のようです。 ということなら運用で回避できそうだと思ったのですが、トラブルが発覚したxlsファイルはお客さんのユーザが作っているものなので、それも難しいとのことでした。 ![]() |
1