最近,老大要求做的项目系统能将excel模板导入,并兼容excel2003和2007,研究了一下POI。
说重点!遇到的一个难题是如何将excel自定义的单元格背景色转换为awt.Color。
POI获取单元格背景色,用的方法是getFillForegroundColorColor(),就是获取前景色的方法。得到的对象是HSSFColor或者XSSFColor。
HSSFColor.getTriplet()方法,能获得颜色的rgb值,Alpha值设为0xff。
XSSFColor.getARgb()也能获得argb值,但是每个值都是一个有符号的2进制数,将其当做无符号数来转化,就是awt.Color对应的argb值了,比如Alpha=-1,二进制就是11111111,当做无符号数,换算就是Alpha=255了,这时对应的argb值就是awt.Color的了。换算方法:
private static int change(int number){
return ((number & 0x0f0) >> 4)*16 +(number & 0x0f);
}
获得ARGB值,然后转换颜色就很简单了:new java.awt.Color(R, G, B, A)。
较低版本的POI.jar可能没有方法getFillForegroundColorColor(),只有getFillForegroundColor(),得到的是一个short值,可以通过方法:
HSSFWorkbook.getCustomPalette().getColor(Short index);获得HSSFColor。
如果要兼容2007,处理XSSFColor,如果没有getFillForegroundColorColor(),那还是换高版本吧,因为XSSFWorkbook好像没有对应的HSSFPalette对象。