おもに Groovy やアジャイル開発について勉強していることを書き散らしてます。
わたしのひとりごとが、だれかのお役に立てればと…

JavaExcelAPI で ClassCastException がおきた

またまた、JavaExcelAPI についてのエントリー。

よくわからない ClassCastException が発生しました。
きのうはたぶん動いていた処理を回帰テストしたら、次のような例外スタックトレースが…

※JavaExcelAPI 2.6.12 および 2.6.10 で現象発生を確認しています。

Exception in thread "main" java.lang.ClassCastException: jxl.biff.drawing.EscherAtom cannot be cast to jxl.biff.drawing.EscherContainer
at jxl.biff.drawing.DrawingData.getSpContainer(DrawingData.java:215)
at jxl.biff.drawing.Comment.initialize(Comment.java:261)
at jxl.biff.drawing.Comment.getObjectId(Comment.java:330)
at jxl.biff.drawing.DrawingGroup.addDrawing(DrawingGroup.java:212)
at jxl.biff.drawing.Comment.<init>(Comment.java:195)
at jxl.read.biff.SheetReader.handleObjectRecord(SheetReader.java:1637)
at jxl.read.biff.SheetReader.read(SheetReader.java:1053)
at jxl.read.biff.SheetImpl.readSheet(SheetImpl.java:716)
at jxl.read.biff.WorkbookParser.getSheet(WorkbookParser.java:257)
at jxl.write.biff.WritableWorkbookImpl.copyWorkbook(WritableWorkbookImpl.java:969)
at jxl.write.biff.WritableWorkbookImpl.<init>(WritableWorkbookImpl.java:343)
at jxl.Workbook.createWorkbook(Workbook.java:339)

例外の1行目のメッセージを見ても、そして調べても要領を得ず、困りました。

スタックトレースを追っていくと、Excel セルのコメント(Comment)がどうやら怪しそうなので、
処理対象の Excel にあるコメントをすべて削除すると、正常に処理が実行されました。

必須ではないコメントなので削除して問題なかったのですが、そうでなかったら困りものでした。
JavaExcelAPI はこういうことがあるので、扱いが難しいです。