【问题标题】:PHPExcel - duplicateStyle() seems not to work / does nothingPHPExcel - duplicateStyle() 似乎不起作用/什么也不做
【发布时间】:2015-09-15 21:42:05
【问题描述】:

我正在为我的公司导出通过 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。

提前致谢!

【问题讨论】:

    标签: phpexcel


    【解决方案1】:

    今天早上我遇到了同样的问题,并想出了一个对自己来说并不那么痛苦的解决方法。 关键 点是:在调用 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');
    
    

    上述解决方案对我来说效果很好。

    【讨论】:

      【解决方案2】:

      我现在自己做了一个小解决方法。我现在没有在单元格中添加条件,而是在我的 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

      【讨论】:

        猜你喜欢
        • 2014-12-18
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-07-07
        • 2016-05-25
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多