###前提・実現したいこと
POIを利用し、javaで作成したListをExcelに書き込みます。
その際、フラグが立っている値を書き込むセルについては黄色背景にしたいです。
###発生している問題・エラーメッセージ
書込み処理に問題はないですが、
if文でフラグを判定し、Trueになったものについてセルスタイルを上書きしていくと、一旦上書きされたセルスタイルが保持され続けています。
行単位での書込みでなく、最終的にはブックごと書き込む仕様になっているため上手くいっていません。
ソースにおかしな箇所があればご指摘お願いします。
###該当のソースコード
java
1 /* 2 * 一覧を出力する 3 */ 4 // 一覧出力 5 String fileName_emp = "./M.xlsx"; 6 PoiWrapper poi_emp = new PoiWrapper(fileName_emp, "w"); 7 EmployeeUploadUtil empUploadutil = new EmployeeUploadUtil(poi_emp, fileName_emp); 8 empUploadutil.createCompareData(UC); 9 poi_emp.write(); 10
java
1 public void createCompareData(ArrayList<EmployeeBean>UC) throws Exception{ 2 // シートの作成 3 poi.createSheet("マスタ"); 4 5 // ヘッダーの生成 6 createHeader(); 7 8 // リスト書込み 9 outputEmpInfoUC(UC); 10 } 11
java
1 // Excelシートへの書き込み処理 2 private void outputEmpInfoUC(ArrayList<EmployeeBean> UC) throws Exception{ 3 Iterator<EmployeeBean> itr = UC.iterator(); 4 //各行の値を書き込む(全行書き込む) 5 while(itr.hasNext()){ 6 EmployeeBean emp = itr.next(); 7 8 // 氏名(漢字)が不一致 9 if(emp.getJpFlg().equals(mismatching)){ 10 // セル背景を黄色 11 poi.setColor(Nm_jpStyle,IndexedColors.YELLOW.getIndex()); 12 poi.setFontColor(Nm_jpStyle,IndexedColors.RED.getIndex()); 13 } 14 // 氏名(かな)が不一致 15 if(emp.getKnFlg().equals(mismatching)){ 16 // セル背景を黄色 17 poi.setColor(Nm_knStyle,IndexedColors.YELLOW.getIndex()); 18 poi.setFontColor(Nm_knStyle,IndexedColors.RED.getIndex()); 19 } 20 // 氏名(英字)が不一致 21 if(emp.getEnFlg().equals(mismatching)){ 22 // セル背景を黄色 23 poi.setColor(Nm_enStyle,IndexedColors.YELLOW.getIndex()); 24 poi.setFontColor(Nm_enStyle,IndexedColors.RED.getIndex()); 25 } 26 // 所属会社コードが不一致 27 if(emp.getCompanyCodeFlg().equals(mismatching)){ 28 // セル背景を黄色 29 poi.setColor(CompanyCodeStyle,IndexedColors.YELLOW.getIndex()); 30 poi.setFontColor(CompanyCodeStyle,IndexedColors.RED.getIndex()); 31 } 32 // 部コードが不一致 33 if(emp.getDepCodeFlg().equals(mismatching)){ 34 // セル背景を黄色 35 poi.setColor(DepCodeStyle,IndexedColors.YELLOW.getIndex()); 36 poi.setFontColor(CompanyCodeStyle,IndexedColors.RED.getIndex()); 37 } 38 // 室コードが不一致 39 if(emp.getRoCodeFlg().equals(mismatching)){ 40 // セル背景を黄色 41 poi.setColor(RoCodeStyle,IndexedColors.YELLOW.getIndex()); 42 poi.setFontColor(RoCodeStyle,IndexedColors.RED.getIndex()); 43 } 44 // 課コードが不一致 45 if(emp.getSecCodeFlg().equals(mismatching)){ 46 // セル背景を黄色 47 poi.setColor(SecCodeStyle,IndexedColors.YELLOW.getIndex()); 48 poi.setFontColor(SecCodeStyle,IndexedColors.RED.getIndex()); 49 } 50 // TEL(内線)が不一致 51 if(emp.getTelInFlg().equals(mismatching)){ 52 // セル背景を黄色 53 poi.setColor(TelInStyle,IndexedColors.YELLOW.getIndex()); 54 poi.setFontColor(TelInStyle,IndexedColors.RED.getIndex()); 55 } 56 // TEL(外線)が不一致 57 if(emp.getTelOutFlg().equals(mismatching)){ 58 // セル背景を黄色 59 poi.setColor(TelOutStyle,IndexedColors.YELLOW.getIndex()); 60 poi.setFontColor(TelOutStyle,IndexedColors.RED.getIndex()); 61 } 62 // e-mailアドレス1が不一致 63 if(emp.getEmail1Flg().equals(mismatching)){ 64 // セル背景を黄色 65 poi.setColor(email1Style,IndexedColors.YELLOW.getIndex()); 66 poi.setFontColor(email1Style,IndexedColors.RED.getIndex()); 67 } 68 // e-mailアドレス2が不一致 69 if(emp.getEmail2Flg().equals(mismatching)){ 70 // セル背景を黄色 71 poi.setColor(email2Style,IndexedColors.YELLOW.getIndex()); 72 poi.setFontColor(email2Style,IndexedColors.RED.getIndex()); 73 } 74 75 76 poi.createRow(); 77 poi.setValue(emp.getSyoriCode(), nomalStyle); //処理コード 78 poi.setValue(YearTermUtil.getYear(), nomalStyle); //年 79 poi.setValue(YearTermUtil.getTerm(), nomalStyle); //期 80 poi.setValue(emp.getId(), nomalStyle); //ID 81 poi.setValue(emp.getNm_jp(), Nm_jpStyle); //氏名(漢字) 82 poi.setValue(emp.getNm_kn(), Nm_knStyle); //氏名(かな) 83 poi.setValue(emp.getNm_en(), Nm_enStyle); //氏名(英字) 84 poi.setValue(emp.getCompanyCode(), CompanyCodeStyle); //所属会社コード 85 poi.setValue(emp.getDepCode(), DepCodeStyle); //部コード 86 poi.setValue(emp.getRoCode(), RoCodeStyle); //室コード 87 poi.setValue(emp.getSecCode(), SecCodeStyle); //課コード 88 poi.setValue(emp.getTel_in(), TelInStyle); //TEL内線(NICE-NET) 89 poi.setValue(emp.getTel_out(), TelOutStyle); //TEL外線 90 poi.setValue("", nomalStyle); //FAX内線(NICE-NET) 91 poi.setValue("", nomalStyle); //FAX外線 92 poi.setValue(emp.getEmail_01(), email1Style); //e-mailアドレス1 93 poi.setValue(emp.getEmail_02(), email2Style); //e-mailアドレス2 94 } 95 }
###試したこと
変更箇所になりうる列ごとにCellStyleを作成し、setValueの引数として渡しました。
比較処理の方で不一致があれば不一致フラグをONにする処理を行っています。
outputEmpInfoUCメソッドでは、if文で各項目のフラグの値を見て、セル背景色をSetする/しないの処理に分けてみました。
ただ、最後にブックでまとめてwriteする仕様になっているため、
書込み対象のList(UC)をループしても
一旦Styleが上書きされるとそのまま変更が維持されています。
行単位でStyleを設定したいです。
ブック単位でのwriteは影響範囲が大きいため、なるべくならwriteの単位は変えたくないですが実装方法が浮かばずご相談させていただければと思います。
###補足情報(言語/FW/ツール等のバージョンなど)
Java JDK1.6
struts 1系

回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2017/02/07 00:21
2017/02/07 00:52
2017/02/07 01:57
2017/02/07 02:39
2017/02/07 05:58