我对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%正确的,我知道着色语句是正确的(因为如果我特别提到它们就会给单元格着色)。它只是不想动态播放。
有什么想法吗?
由于 菲尔
答案 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);