質問: itr.next(); // 氏名(漢字)が不一致 if(emp.getJpFlg().equals(mismatching)){ // セル背景を黄色 poi.setColor(Nm_jpStyle,IndexedColors.YELLOW.getIndex()); poi.setFontColor(Nm_jpStyle,IndexedColors.RED.getIndex()); } // 氏名(かな)が不一致 if(emp.getKnFlg().equals(mismatching)){ // セル背景を黄色 poi.setColor(Nm_knStyle,IndexedColors.YELLOW.getIndex()); poi.setFontColor(Nm_knStyle,IndexedColors.RED.getIndex()); } // 氏名(英字)が不一致 if(emp.getEnFlg().equals(mismatching)){ // セル背景を黄色 poi.setColor(Nm_enStyle,IndexedColors.YELLOW.getIndex()); poi.setFontColor(Nm_enStyle,IndexedColors.RED.getIndex()); } // 所属会社コードが不一致 if(emp.getCompanyCodeFlg().equals(mismatching)){ // セル背景を黄色 poi.setColor(CompanyCodeStyle,IndexedColors.YELLOW.getIndex()); poi.setFontColor(CompanyCodeStyle,IndexedColors.RED.getIndex()); } // 部コードが不一致 if(emp.getDepCodeFlg().equals(mismatching)){ // セル背景を黄色 poi.setColor(DepCodeStyle,IndexedColors.YELLOW.getIndex()); poi.setFontColor(CompanyCodeStyle,IndexedColors.RED.getIndex()); } // 室コードが不一致 if(emp.getRoCodeFlg().equals(mismatching)){ // セル背景を黄色 poi.setColor(RoCodeStyle,IndexedColors.YELLOW.getIndex()); poi.setFontColor(RoCodeStyle,IndexedColors.RED.getIndex()); } // 課コードが不一致 if(emp.getSecCodeFlg().equals(mismatching)){ // セル背景を黄色 poi.setColor(SecCodeStyle,IndexedColors.YELLOW.getIndex()); poi.setFontColor(SecCodeStyle,IndexedColors.RED.getIndex()); } // TEL(内線)が不一致 if(emp.getTelInFlg().equals(mismatching)){ // セル背景を黄色 poi.setColor(TelInStyle,IndexedColors.YELLOW.getIndex()); poi.setFontColor(TelInStyle,IndexedColors.RED.getIndex()); } // TEL(外線)が不一致 if(emp.getTelOutFlg().equals(mismatching)){ // セル背景を黄色 poi.setColor(TelOutStyle,IndexedColors.YELLOW.getIndex()); poi.setFontColor(TelOutStyle,IndexedColors.RED.getIndex()); } // e-mailアドレス1が不一致 if(emp.getEmail1Flg().equals(mismatching)){ // セル背景を黄色 poi.setColor(email1Style,IndexedColors.YELLOW.getIndex()); poi.setFontColor(email1Style,IndexedColors.RED.getIndex()); } // e-mailアドレス2が不一致 if(emp.getEmail2Flg().equals(mismatching)){ // セル背景を黄色 poi.setColor(email2Style,IndexedColors.YELLOW.getIndex()); poi.setFontColor(email2Style,IndexedColors.RED.getIndex()); } poi.createRow(); poi.setValue(emp.getSyoriCode(), nomalStyle); //処理コード poi.setValue(YearTermUtil.getYear(), nomalStyle); //年 poi.setValue(YearTermUtil.getTerm(), nomalStyle); //期 poi.setValue(emp.getId(), nomalStyle); //ID poi.setValue(emp.getNm_jp(), Nm_jpStyle); //氏名(漢字) poi.setValue(emp.getNm_kn(), Nm_knStyle); //氏名(かな) poi.setValue(emp.getNm_en(), Nm_enStyle); //氏名(英字) poi.setValue(emp.getCompanyCode(), CompanyCodeStyle); //所属会社コード poi.setValue(emp.getDepCode(), DepCodeStyle); //部コード poi.setValue(emp.getRoCode(), RoCodeStyle); //室コード poi.setValue(emp.getSecCode(), SecCodeStyle); //課コード poi.setValue(emp.getTel_in(), TelInStyle); //TEL内線(NICE-NET) poi.setValue(emp.getTel_out(), TelOutStyle); //TEL外線 poi.setValue("", nomalStyle); //FAX内線(NICE-NET) poi.setValue("", nomalStyle); //FAX外線 poi.setValue(emp.getEmail_01(), email1Style); //e-mailアドレス1 poi.setValue(emp.getEmail_02(), email2Style); //e-mailアドレス2 } } ``` ### 試したこと 変更箇所になりうる列ごとにCellStyleを作成し、setValueの引数として渡しました。 比較処理の方で不一致があれば不一致フラグをONにする処理を行っています。 outputEmpInfoUCメソッドでは、if文で各項目のフラグの値を見て、セル背景色をSetする/しないの処理に分けてみました。 ただ、最後にブックでまとめてwriteする仕様になっているため、 書込み対象のList(UC)をループしても 一旦Styleが上書きされるとそのまま変更が維持されています。 行単位でStyleを設定したいです。 ブック単位でのwriteは影響範囲が大きいため、なるべくならwriteの単位は変えたくないですが実装方法が浮かばずご相談させていただければと思います。 ### 補足情報(言語/FW/ツール等のバージョンなど) Java JDK1.6 struts 1系
回答: 行ごとにスタイルを定義するクラスなどはありませんが、セルごとにスタイルを定義できるクラスはあります。 ``` CellStyle cellStyle = workbook.createCellStyle(); cellStyle.setFillPattern(CellStyle.SOLID_FOREGROUND); cellStyle.setFillForegroundColor(IndexedColors.RED.getIndex()); cell.setCellStyle(cellStyle); ``` CellStyleのインスタンスを作り、背景色を変えたいセルのスタイルをあらかじめ作ります。 その後、背景色などのスタイルをあてたいセルのインスタンスに対し、setCellStyle(cellStyle) を実行することで、個別のスタイル定義ができるでしょう。 Apache POI|Busy Developers' Guide to HSSF and XSSF Features