PHPExcel 使用公式有条件地格式化范围
PHPExcel conditionally formatting a range with a formula
我有以下代码:
$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 > A3
它还没有工作。有人知道如何实现吗?
回复很晚,但我一直在网上寻找类似的问题。最终我解决了它。以防将来有人遇到这个问题我会记下一些事情。
我一直在为同样的问题而苦苦挣扎,但我设法解决了它。您想要的是将公式插入条件格式。这听起来比实际更棘手。
对于您的特定代码段,这应该很可能有效。
$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);
}
}
"condition_expression" 用于将公式置于条件格式中。据我所知,实现公式的唯一方法是使用 "setConditions"。有了这个,你可以给出一个字符串数组,每个字符串都是一个公式。
在您的代码中,当第一个坐标大于第二个坐标时,这将导致颜色为红色。
现在回到您的代码,我尚未对其进行测试,因此您可能想要调整一些值,但这至少应该将您推向正确的方向。祝你好运!
我有以下代码:
$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 > A3
它还没有工作。有人知道如何实现吗?
回复很晚,但我一直在网上寻找类似的问题。最终我解决了它。以防将来有人遇到这个问题我会记下一些事情。
我一直在为同样的问题而苦苦挣扎,但我设法解决了它。您想要的是将公式插入条件格式。这听起来比实际更棘手。
对于您的特定代码段,这应该很可能有效。
$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);
}
}
"condition_expression" 用于将公式置于条件格式中。据我所知,实现公式的唯一方法是使用 "setConditions"。有了这个,你可以给出一个字符串数组,每个字符串都是一个公式。 在您的代码中,当第一个坐标大于第二个坐标时,这将导致颜色为红色。
现在回到您的代码,我尚未对其进行测试,因此您可能想要调整一些值,但这至少应该将您推向正确的方向。祝你好运!