PHPExcel如何设置条件格式以根据单元格值更改单元格背景色

时间:2018-10-19 08:02:38

标签: php excel phpexcel

早上好

我需要使用PHPExcel设置单元格背景颜色,但我不知道该怎么做。

这是我的标头,并且可以正常工作:

$styleArray = array(
    'font' => array(
        'bold' => true,
    ),
    'alignment' => array(
        'horizontal' => PHPExcel_Style_Alignment::HORIZONTAL_LEFT,
    ),
    'borders' => array(
        'allborders' => array(
            'style' => PHPExcel_Style_Border::BORDER_THIN,
        )
    )
);

$objPHPExcel->getActiveSheet()->getStyle('A1:F1')->applyFromArray($styleArray);

现在,我想通过这种方式设置单元格背景颜色:

J:Q列,如果单元格的值为“ OK”,则bg颜色为绿色;如果为“否”,则背景色为红色。

谢谢

2 个答案:

答案 0 :(得分:0)

function cellColor($col, $row){
    global $objPHPExcel;

    $cell = $col.$row;
    $cellValue = $objWorksheet->getCellByColumnAndRow($col, $row)->getValue();

    $color = 'ffffff';
    if($cellValue == 'ok')
       $color = 'ff0000';
    if($cellValue == 'no')
       $color = '30a30a';

    $objPHPExcel->getActiveSheet()->getStyle($cell)->getFill()->applyFromArray(array(
        'type' => PHPExcel_Style_Fill::FILL_SOLID,
        'startcolor' => array(
             'rgb' => $color
        )
    ));
}

例如,您可以这样使用:

cellColor('B', '5');

答案 1 :(得分:0)

我知道这个答案还很晚,但是我认为这里的问题没有得到正确回答。这必须使用条件格式完成,因为如果在PHP生成excel后单元格值发生更改,则颜色不会更改。即:Excel处理格式的逻辑。我一直试图使它工作,显然必须使用getEndColor()-> setRGB()而不是getStartColor()。 参见下面的示例:

 $conditional1 = new \PhpOffice\PhpSpreadsheet\Style\Conditional();
    $conditional1->setConditionType(\PhpOffice\PhpSpreadsheet\Style\Conditional::CONDITION_CONTAINSTEXT);
    $conditional1->setOperatorType(\PhpOffice\PhpSpreadsheet\Style\Conditional::OPERATOR_CONTAINSTEXT);
    $conditional1->setText('No');
    $conditional1->getStyle()->getFont()->getColor()->setARGB(\PhpOffice\PhpSpreadsheet\Style\Color::COLOR_RED);
    $conditional1->getStyle()->getFont()->setBold(true);
    $conditional1->getStyle()->getFill()->setFillType(\PhpOffice\PhpSpreadsheet\Style\Fill::FILL_SOLID);

    $conditional1->getStyle()->getFill()->getEndColor()->setRGB('FFC7CE');
    $conditionalStyles[] = $conditional1;

    $spreadsheet->getActiveSheet()->getStyle('E4')->setConditionalStyles($conditionalStyles);