最近参加了一个日本保险公司的内部项目管理的项目,我担当的是文档出力处理这个模块,开发过程中遇到几个问题,解决方法同大家分享下。
处理文档的单元格样式是从模板文件里边读取出来的。
第一个问题是单元格的颜色问题,出力的文件单元格颜色和模板上的颜色不一致,经查API,发现每一个workbook对象都有一个专属的调色板属性对象,
解决办法看以下代码。
//出力工作簿的调色板对象取得
HSSFPalette pale = toWorkbook.getCustomPalette();
//模板文件cell(1,6)的样式对象取得
HSSFCellStyle fromCellStyle = fromSheet.getRow(1).getCell(6).getCellStyle();
//前景色取得
HSSFColor color = fromCellStyle.getFillForegroundColorColor();
//前景色的rgb值取得
short[] co = color.getTriplet();
//出力工作簿的调色板对象索引为COLOR_INDEX的位置的颜色设定
pale.setColorAtIndex(COLOR_INDEX, (byte)co[0], (byte)co[1], (byte)co[2]);
//记录索引颜色的位置和用处
colorMap.put("littleHead", COLOR_INDEX++);
由于公司的保密协议不能把所有代码列出,以上是处理的方法,在用到特定颜色的地方,根据map对象的key取得特定的颜色即可。
第二个问题是列宽的设定,同样列宽的设定值也是从模板文件里读取出来的,但是直接toSheet.setColumnWidth(index,fromSheet.getColumnWidth(index)),宽度始终
有误差,经查api,列宽的设定是根据当前sheet的第一个单元格的font属性决定的,如果当前第一个单元格的font属性和模板文件的一样,那么toSheet.setColumnWidth(index,fromSheet.getColumnWidth(index)),宽度就会一样。