PHPExcel背景色彩逻辑

时间:2013-06-17 12:55:13

标签: php phpexcel

我对PHPExcel有一个非常混乱的问题。我有800名学生。我已经生成了一个电子表格,其中列出了该学生有多少赞扬(当天每月)。

例如,它可能如下所示:

+---------------+-----+-----+-----+-----+
| Student Name  | 1st | 2nd | 3rd | 4th | ...
+---------------+-----+-----+-----+-----+
| Test Student  | 2   | 0   | 3   | 7   |
+---------------+-----+-----+-----+-----+

我想要更改大于(或等于)5的单元格的背景颜色。我使用循环来循环学生和天。这是我的代码:

for($d=1; $d<=$daysInCMonth; $d++)
{
    $phpExcel
        ->getSheetByName('Monthly Leaderboard')
        ->setCellValue($alphabetArray[($d+7)] . ($recordCount+5), $record['monthlyReport'][$MonthlyReportKeys[($d-1)]]);

    if($record['monthlyReport'][$MonthlyReportKeys[($d-1)]]>=5)
    {
        $cellId = $alphabetArray[($d+7)] . ($recordCount+5);
        $phpExcel
            ->getSheetByName('Monthly Leaderboard')
            ->getStyle($cellId)
            ->applyFromArray(
                array('fill' => array('type' => PHPExcel_Style_Fill::FILL_SOLID,'color' => array('rgb' => '000000'))
         ));
    }

}

为了帮助理解代码,初始for循环从1开始循环到当月的天数(6月的IE 30)。然后,它将单元格值设置为每个给定日期的点数。

这一切都很完美。现在,if条件将捕获值大于(或等于)5的单元格。

代码$alphabetArray[($d+7)] . ($recordCount+5)在迭代中获取当前的单元ID。我知道这也很好用,因为如果我将它回显到屏幕上,第一个输出是T5,这是一个大于5的单元格。

如果我隐式指定T5作为要着色的单元格,它可以正常工作。但是,如果我尝试使用$cellId的值为我的条件动态着色所有单元格,则没有单元格被着色。

我知道单元格ID是100%正确的,我知道着色语句是正确的(因为如果我特别提到它们就会给单元格着色)。它只是不想动态播放。

有什么想法吗?

由于 菲尔

2 个答案:

答案 0 :(得分:5)

现在这是一个很老的问题,但是在遇到同样的问题之后我发现了它。在深入研究代码后,我发现了一些可行的方法。所以我想我会在这里为任何未来的发现者添加它。

对于背景的条件着色,仅设置填充颜色的方法似乎不起作用。例如

'fill' => array(
    'type' => PHPExcel_Style_Fill::FILL_SOLID,
    'color' => array(
        'rgb' => 'FFC7CE'
    ),
)

以上在直接应用于单元格时非常有效,但在条件样式中使用时。如果什么也不做。但是,如果将其更改为

'fill' => array(
    'type' => PHPExcel_Style_Fill::FILL_SOLID,
    'startcolor' => array(
        'rgb' => 'FFC7CE'
    ),
    'endcolor' => array(
        'rgb' => 'FFC7CE'
    ),
)

预期的背景颜色。看起来背景的条件着色需要指定的开始和结束颜色。

答案 1 :(得分:2)

$headerStyle = array(
                'fill' => array(
                        'type' => PHPExcel_Style_Fill::FILL_SOLID,
                        'color' => array('rgb'=>'00B4F2'),
                ),
                'font' => array(
                        'bold' => true,
                )
        );
        $borderStyle = array('borders' =>
                array('outline' =>
                        array('style' => PHPExcel_Style_Border::BORDER_THICK,
                                'color' => array('argb' => '000000'),   ),),);
        //HEADER COLOR

        $objPHPExcel->getActiveSheet()->getStyle('A1:'.'V1')->applyFromArray($headerStyle);

        //SET ALIGN OF TEXT
        $objPHPExcel->getActiveSheet()->getStyle('A1:V1')->getAlignment()->setHorizontal(PHPExcel_Style_Alignment::HORIZONTAL_CENTER);
        $objPHPExcel->getActiveSheet()->getStyle('B2:V'.$row)->getAlignment()->setVertical(PHPExcel_Style_Alignment::VERTICAL_TOP);

        //BORDER TO CELL
        $objPHPExcel->getActiveSheet()->getStyle('A1:'.'V1')->applyFromArray($borderStyle);
        $borderColumn =  (intval($column) -1 );
        $objPHPExcel->getActiveSheet()->getStyle('A1:'.'V'.$borderColumn)->applyFromArray($borderStyle);