PHPExcel - duplicateStyle()似乎无法工作/什么都不做

时间:2015-06-29 12:15:54

标签: phpexcel

我正在为我的公司进行导出,该导出通过PHP获取soma数据,并将它们输出到excel电子表格。

一切都运作良好,除了一件小事。我有条件地格式化一些单元格以具有特定的颜色。我没有得到错误,也没有为其他单元格获得正确的背景颜色,它们只是保持白色。

我使用PHPExcel创建输出,以下是我的代码:

//just for information:
// $spreadsheet = $objPHPExcel->getActiveSheet();

//normal
$conditionalStyleNormal = new PHPExcel_Style_Conditional();
$conditionalStyleNormal->setConditionType(PHPExcel_Style_Conditional::CONDITION_CONTAINSTEXT)
    ->setOperatorType(PHPExcel_Style_Conditional::OPERATOR_CONTAINSTEXT)
    ->setText('Normal (Mittagspause)')
    ->getStyle()->getFill()->setFillType(PHPExcel_Style_Fill::FILL_SOLID)->getEndColor()
    ->setARGB(PHPExcel_Style_Color::COLOR_LIGHTYELLOW);

//apply style
$conditionalStyles = $spreadsheet->getStyle('A5:A50')->getConditionalStyles();
array_push($conditionalStyles, $conditionalStyleNormal);
$spreadsheet->getStyle('A5:I50')->setConditionalStyles($conditionalStyles);

//copy style to other cells (does not work)
$spreadsheet->duplicateStyle($spreadsheet->getStyle('A5'), 'C5:I5');

最后一行对文件没有影响。

PHPExcel的文档说:

  

如果要将规则集复制到其他单元格,可以复制样式对象:   $ objPHPExcel-> getActiveSheet() - > duplicateStyle($ objPHPExcel-> getActiveSheet() - > getStyle(' B2'),' B3:B7');

我忽略了什么吗?或者它只是一个错误?如果是这样,是否有一个好的解决方法?

无法找到解决方案,只是发现该功能在早期版本中存在不当行为。我正在使用PHPExcel 1.8.0。

提前致谢!

2 个答案:

答案 0 :(得分:0)

我现在做了一个小小的解决方法。我没有在单元格中添加条件,而是在PHP脚本中完成了所有操作。我检查了具有条件的单元格,如果它具有特定值,如果有,我会为它们旁边的其他单元格着色。

for ($row=1; $row <= 50; $row++) {
    $cellvalue = $spreadsheet->getCell('A'.$row)->getValue();
    switch ($cellvalue) {
        // a case for each value where the row should be colored,
        // will not list the others, so it uses not as much space
        case 'Frühschicht':
                for ($col="A"; $col <= "I"; $col++) {
                    $spreadsheet->getStyle($col.$row)->getFill()
                        ->setFillType(PHPExcel_Style_Fill::FILL_SOLID)
                        ->getStartColor()->setARGB($lightblue);
                }
            break;

        default:
            break;
    }
}

可能不是最好的解决方案,但对于像这样的小项目,它应该没关系,可能会更糟糕我认为xD

答案 1 :(得分:0)

今天早上我遇到了同样的问题,并找出了对我自己并不那么悲惨的解决方法。 点是:在调用duplicateStyle()之后,您必须重新设置已执行此方法的单元格的值。 例如:



    $sheet = $phpExcel->getActiveSheet();
    key step 1: $style= $sheet->getStyle('D1');
    key step 2: $sheet->duplicateStyle($style,'A5');
    key step 3: $sheet->setCellValue('A5','NIDONGDE');

上述解决方案对我有用。