2

我对 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 一直循环到当月的天数(IE 为 6 月 30)。然后它将单元格值设置为每一天的点数。

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

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

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

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

有任何想法吗?

谢谢菲尔

4

2 回答 2

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'
    ),
)

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

于 2016-04-06T10:22:27.033 回答
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);
于 2013-06-17T13:28:18.477 回答