PHPExcel使用公式有条件地格式化范围

时间:2017-02-06 15:36:24

标签: php excel phpexcel

我有以下代码:

$vOffset = 2;
$offset = 6;
$formatRows = 100;
$formatColumns = 100;

//set conditional formatting in place
for($row=$vOffset;$i<$formatRows;$row++){
  for($col=$offset+1;$col<$formatColumns;$col+3){
    //prepare conditional styles
    //if verbal is bigger
    $conditionalStyle_RED = new PHPExcel\Style_Conditional();
    $conditionalStyle_RED->setConditionType(PHPExcel\Style_Conditional::CONDITION_CELLIS);
    $conditionalStyle_RED->addCondition(
        "=" . $this->coordinates($col, $row) . " > " . $this->coordinates($col+1,$row)
    );
    $conditionalStyle_RED->getStyle()->getFont()->getColor()->setARGB(PHPExcel\Style_Color::COLOR_RED);
    array_push($conditionalStyles, $conditionalStyle_RED);

    $this->getActiveSheet()
        ->getStyle($this->coordinates($col, $row) . ':' . $this->coordinates($col+1, $row))
        ->setConditionalStyles($conditionalStyles);
  }
}

我尝试使用类似于以下公式设置条件样式:

= A1&gt; A3

它还没有工作。有谁知道如何做到这一点?

1 个答案:

答案 0 :(得分:2)

相当迟到的反应,但我一直在通过互联网寻找类似的问题。最终我解决了它。如果将来人们遇到这个问题,我会记下一些事情。

我一直在努力解决同样的问题,我设法解决了这个问题。你想要的是在条件格式中插入一个公式。这听起来比实际上更棘手。

对于您的特定代码,这应该很有用。

$vOffset = 2;
$offset = 6;
$formatRows = 100;
$formatColumns = 100;

//set conditional formatting in place
for($row=$vOffset;$i<$formatRows;$row++){
    for($col=$offset+1;$col<$formatColumns;$col+3){
        //prepare conditional styles
        //if verbal is bigger
        $conditionalStyle_RED = new PHPExcel\Style_Conditional();
        $conditionalStyle_RED->setConditionType(PHPExcel\Style_Conditional::CONDITION_EXPRESSION);
        $conditionalStyle_RED->setConditions(array("(" . $this->coordinates($col, $row) . " > " . $this->coordinates($col+1,$row) . ")"));
        $conditionalStyle_RED->getStyle()->getFont()->getColor()->setARGB(PHPExcel\Style_Color::COLOR_RED);
        array_push($conditionalStyles, $conditionalStyle_RED);

        $this->getActiveSheet()
            ->getStyle($this->coordinates($col, $row) . ':' . $this->coordinates($col+1, $row))
            ->setConditionalStyles($conditionalStyles);
    }
}

&#34; condition_expression&#34;用于将公式放入条件格式中。据我所知,实现公式的唯一方法是使用&#34; setConditions&#34;。有了这个,你可以给出一个字符串数组,每个字符串都是一个公式。 在您的代码中,当第一个坐标大于第二个坐标时,这将导致红色。

现在回到你的代码,我还没有对它进行测试,所以你可能想要调整一些值,但这至少应该让你朝着正确的方向前进。祝你好运伴侣!