またPOIではまった……。
id:Horiuchi_H:20041006#1097045408 で書いてましたが、POIを使ってシートをコピーする処理をしていたんです。しかし、急にエラーが発生。何が問題かとぐぐったところ http://www.jajakarta.org/kvasir/bbs/technical/1060?msg=3#msg3636 なんて記事を発見。オートシェイプを含んだシートがコピーできないと言う既知のバグでしたか……。しかたなく、ソースをDownLoadしてきて上記の編集を行いました。
しかし、修正したファイルをビルドして実行したところ今度は org.apache.poi.hssf.record.ObjRecord#clone() で ConcurrentModificationException が発生!何なんだ?とソースを見たところ以下の様になっていました……。
public Object clone() { ObjRecord rec = new ObjRecord(); rec.subrecords = new ArrayList(); for ( Iterator iterator = subrecords.iterator(); iterator.hasNext(); ) subrecords.add(( (Record) iterator.next() ).clone()); return rec; }
ぉぃぉぃ、初歩的な記述ミスですかorz 一回このコードを通れば確実に起きる例外でした……。修正コードは以下に書いておきます。それと、ここを直して無事コピーができたことを付記しておきます。明日の朝一で帰ろうっと……。
public Object clone() { ObjRecord rec = new ObjRecord(); rec.subrecords = new ArrayList(); for ( Iterator iterator = subrecords.iterator(); iterator.hasNext(); ) //OLD subrecords.add(( (Record) iterator.next() ).clone()); rec.subrecords.add(( (Record) iterator.next() ).clone()); return rec; }