细胞没有着色

时间:2014-02-27 11:53:24

标签: java colors apache-poi

因此我尝试使用此函数根据某些特定值对单元格进行着色:

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");
        }
    }

2 个答案:

答案 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);