/** * Write CFHeader record */ private function writeCFHeader() { $record = 0x1b0; // Record identifier $length = 0x16; // Bytes to follow $numColumnMin = null; $numColumnMax = null; $numRowMin = null; $numRowMax = null; $arrConditional = array(); foreach ($this->phpSheet->getConditionalStylesCollection() as $cellCoordinate => $conditionalStyles) { foreach ($conditionalStyles as $conditional) { if ($conditional->getConditionType() == \PHPExcel\Style\Conditional::CONDITION_EXPRESSION || $conditional->getConditionType() == \PHPExcel\Style\Conditional::CONDITION_CELLIS) { if (!in_array($conditional->getHashCode(), $arrConditional)) { $arrConditional[] = $conditional->getHashCode(); } // Cells $arrCoord = \PHPExcel\Cell::coordinateFromString($cellCoordinate); if (!is_numeric($arrCoord[0])) { $arrCoord[0] = \PHPExcel\Cell::columnIndexFromString($arrCoord[0]); } if (is_null($numColumnMin) || $numColumnMin > $arrCoord[0]) { $numColumnMin = $arrCoord[0]; } if (is_null($numColumnMax) || $numColumnMax < $arrCoord[0]) { $numColumnMax = $arrCoord[0]; } if (is_null($numRowMin) || $numRowMin > $arrCoord[1]) { $numRowMin = $arrCoord[1]; } if (is_null($numRowMax) || $numRowMax < $arrCoord[1]) { $numRowMax = $arrCoord[1]; } } } } $needRedraw = 1; $cellRange = pack('vvvv', $numRowMin - 1, $numRowMax - 1, $numColumnMin - 1, $numColumnMax - 1); $header = pack('vv', $record, $length); $data = pack('vv', count($arrConditional), $needRedraw); $data .= $cellRange; $data .= pack('v', 0x1); $data .= $cellRange; $this->append($header . $data); }
/** * Write ConditionalFormatting * * @param \PHPExcel\Shared\XMLWriter $objWriter XML Writer * @param \PHPExcel\Worksheet $pSheet Worksheet * @throws \PHPExcel\Writer\Exception */ private function writeConditionalFormatting(\PHPExcel\Shared\XMLWriter $objWriter = null, \PHPExcel\Worksheet $pSheet = null) { // Conditional id $id = 1; // Loop through styles in the current worksheet foreach ($pSheet->getConditionalStylesCollection() as $cellCoordinate => $conditionalStyles) { foreach ($conditionalStyles as $conditional) { // WHY was this again? // if ($this->getParentWriter()->getStylesConditionalHashTable()->getIndexForHashCode($conditional->getHashCode()) == '') { // continue; // } if ($conditional->getConditionType() != \PHPExcel\Style\Conditional::CONDITION_NONE) { // conditionalFormatting $objWriter->startElement('conditionalFormatting'); $objWriter->writeAttribute('sqref', $cellCoordinate); // cfRule $objWriter->startElement('cfRule'); $objWriter->writeAttribute('type', $conditional->getConditionType()); $objWriter->writeAttribute('dxfId', $this->getParentWriter()->getStylesConditionalHashTable()->getIndexForHashCode($conditional->getHashCode())); $objWriter->writeAttribute('priority', $id++); if (($conditional->getConditionType() == \PHPExcel\Style\Conditional::CONDITION_CELLIS || $conditional->getConditionType() == \PHPExcel\Style\Conditional::CONDITION_CONTAINSTEXT) && $conditional->getOperatorType() != \PHPExcel\Style\Conditional::OPERATOR_NONE) { $objWriter->writeAttribute('operator', $conditional->getOperatorType()); } if ($conditional->getConditionType() == \PHPExcel\Style\Conditional::CONDITION_CONTAINSTEXT && !is_null($conditional->getText())) { $objWriter->writeAttribute('text', $conditional->getText()); } if ($conditional->getConditionType() == \PHPExcel\Style\Conditional::CONDITION_CONTAINSTEXT && $conditional->getOperatorType() == \PHPExcel\Style\Conditional::OPERATOR_CONTAINSTEXT && !is_null($conditional->getText())) { $objWriter->writeElement('formula', 'NOT(ISERROR(SEARCH("' . $conditional->getText() . '",' . $cellCoordinate . ')))'); } elseif ($conditional->getConditionType() == \PHPExcel\Style\Conditional::CONDITION_CONTAINSTEXT && $conditional->getOperatorType() == \PHPExcel\Style\Conditional::OPERATOR_BEGINSWITH && !is_null($conditional->getText())) { $objWriter->writeElement('formula', 'LEFT(' . $cellCoordinate . ',' . strlen($conditional->getText()) . ')="' . $conditional->getText() . '"'); } elseif ($conditional->getConditionType() == \PHPExcel\Style\Conditional::CONDITION_CONTAINSTEXT && $conditional->getOperatorType() == \PHPExcel\Style\Conditional::OPERATOR_ENDSWITH && !is_null($conditional->getText())) { $objWriter->writeElement('formula', 'RIGHT(' . $cellCoordinate . ',' . strlen($conditional->getText()) . ')="' . $conditional->getText() . '"'); } elseif ($conditional->getConditionType() == \PHPExcel\Style\Conditional::CONDITION_CONTAINSTEXT && $conditional->getOperatorType() == \PHPExcel\Style\Conditional::OPERATOR_NOTCONTAINS && !is_null($conditional->getText())) { $objWriter->writeElement('formula', 'ISERROR(SEARCH("' . $conditional->getText() . '",' . $cellCoordinate . '))'); } elseif ($conditional->getConditionType() == \PHPExcel\Style\Conditional::CONDITION_CELLIS || $conditional->getConditionType() == \PHPExcel\Style\Conditional::CONDITION_CONTAINSTEXT || $conditional->getConditionType() == \PHPExcel\Style\Conditional::CONDITION_EXPRESSION) { foreach ($conditional->getConditions() as $formula) { // Formula $objWriter->writeElement('formula', $formula); } } $objWriter->endElement(); $objWriter->endElement(); } } } }