因此我尝试使用此函数根据某些特定值对单元格进行着色:
public static void styleExceptions(CellStyle Exstyle, Font Exfont, Cell cell, AdditiveInformation obj){
Exfont.setFontHeightInPoints((short) 10);
Exfont.setFontName("Calibri");
Exstyle.setFont(Exfont);
Exstyle.setAlignment(CellStyle.ALIGN_CENTER);
Exstyle.setVerticalAlignment(CellStyle.VERTICAL_CENTER);
Exstyle.setBorderBottom(CellStyle.BORDER_DOUBLE);
Exstyle.setBorderRight(CellStyle.BORDER_THIN);
Exstyle.setBorderLeft(CellStyle.BORDER_THIN);
Object result=null;
cellToType(cell,result);
if(result instanceof Double){
if((Double)result==obj.get_xmonthreq() || (Double)result==obj.get_xmonthbalance() ||
(Double)result==obj.get_xmonthendstock()){
Exstyle.setFillForegroundColor(IndexedColors.LIGHT_GREEN.getIndex());
Exstyle.setFillPattern(CellStyle.SOLID_FOREGROUND);
}
else if((Double)result==obj.get_ymonthreq() || (Double)result==obj.get_ymonthbalance() ||
(Double)result==obj.get_ymonthendstock()){
Exstyle.setFillForegroundColor(IndexedColors.LIGHT_ORANGE.getIndex());
Exstyle.setFillPattern(CellStyle.SOLID_FOREGROUND);
Exstyle.setBorderBottom(CellStyle.BORDER_DOUBLE);
}
else if((Double)result==obj.get_zmonthreq() || (Double)result==obj.get_zmonthbalance() ||
(Double)result==obj.get_zmonthendstock()){
Exstyle.setFillForegroundColor(IndexedColors.LIGHT_CORNFLOWER_BLUE.getIndex());
Exstyle.setFillPattern(CellStyle.SOLID_FOREGROUND);
Exstyle.setBorderBottom(CellStyle.BORDER_DOUBLE);
}
}
}
除了着色部分以外的所有东西都在函数中工作,我正在对结果对象做错了,因为没有满足条件的单元格被着色。
这是cellToType方法:
private static void cellToType(Cell cell, Object result){
switch(cell.getCellType()){
case Cell.CELL_TYPE_NUMERIC:
if(DateUtil.isCellDateFormatted(cell)){
result= cell.getDateCellValue();
}
else
result=cell.getNumericCellValue();
break;
case Cell.CELL_TYPE_STRING:
result=cell.getStringCellValue();
break;
case Cell.CELL_TYPE_BOOLEAN:
result=cell.getBooleanCellValue();
break;
case Cell.CELL_TYPE_FORMULA:
result=cell.getCellFormula();
break;
default:
throw new RuntimeException("There is no support for this type of cell");
}
}
答案 0 :(得分:0)
你确定方法:
cellToType(...)
按预期工作吗?
我认为问题是程序没有进入if
这里:
Object result=null;
cellToType(cell,result);
if(result instanceof Double) {
您可以发布cellToType(...)
功能吗?
修改强>
你似乎错误地比较双变量。而不是==
尝试使用result.equalsTo(...)
答案 1 :(得分:0)
由于您希望如何更改cellToStyle
方法中的result
对象,因此styleExceptions
方法无效。由于Java按值传递对象的引用,因此cellToStyle
方法在其自己的result
参数中接收result
引用的副本。在该方法中,您更改了该本地引用,但这对result
中的styleExceptions
引用没有任何作用。
您需要在cellToStyle
中返回该引用,并将其分配到result
中的styleExceptions
。
private static Object cellToType(Cell cell){
Object result;
// ...
和
return result;
}
最后。然后,在styleExceptions
中,执行以下操作:
Object result = cellToType(cell);