diff --git a/Classes/PHPExcel.php b/Classes/PHPExcel.php index cc70286d..ab3396ba 100644 --- a/Classes/PHPExcel.php +++ b/Classes/PHPExcel.php @@ -607,6 +607,17 @@ class PHPExcel return false; } + /** + * Check if style exists in style collection + * + * @param PHPExcel_Style $style + * @return boolean + */ + public function cellXfExists($pCellStyle = null) + { + return in_array($pCellStyle, $this->_cellXfCollection, true); + } + /** * Get default style * diff --git a/Classes/PHPExcel/Worksheet.php b/Classes/PHPExcel/Worksheet.php index bc58a696..4ffd94f3 100644 --- a/Classes/PHPExcel/Worksheet.php +++ b/Classes/PHPExcel/Worksheet.php @@ -1454,9 +1454,9 @@ class PHPExcel_Worksheet implements PHPExcel_IComparable // Add the style to the workbook if necessary $workbook = $this->_parent; - if ($existingStyle = $this->_parent->getCellXfByHashCode($pCellStyle->getHashCode())) { - // there is already such cell Xf in our collection - $xfIndex = $existingStyle->getIndex(); + if ($this->_parent->cellXfExists($pCellStyle)) { + // there is already this cell Xf in our collection + $xfIndex = $pCellStyle->getIndex(); } else { // we don't have such a cell Xf, need to add $workbook->addCellXf($pCellStyle); diff --git a/Examples/40duplicateStyle.php b/Examples/40duplicateStyle.php new file mode 100644 index 00000000..52891ad4 --- /dev/null +++ b/Examples/40duplicateStyle.php @@ -0,0 +1,51 @@ +'); + +date_default_timezone_set('Europe/London'); + +/** Include PHPExcel */ +require_once '../Classes/PHPExcel.php'; + +echo date('H:i:s') , " Create new PHPExcel object" , EOL; +$objPHPExcel = new PHPExcel(); +$worksheet = $objPHPExcel->getActiveSheet(); + +echo date('H:i:s') , " Create styles array" , EOL; +$styles = array(); +for ($i = 0; $i < 10; $i++) { + $style = new PHPExcel_Style(); + $style->getFont()->setSize($i + 4); + $styles[] = $style; +} + +echo date('H:i:s') , " Add data (begin)" , EOL; +$t = microtime(true); +for ($col = 0; $col < 50; $col++) { + for ($row = 0; $row < 100; $row++) { + $str = ($row + $col); + $style = $styles[$row % 10]; + $coord = PHPExcel_Cell::stringFromColumnIndex($col) . ($row + 1); + $worksheet->setCellValue($coord, $str); + $worksheet->duplicateStyle($style, $coord); + } +} +$d = microtime(true) - $t; +echo date('H:i:s') , " Add data (end), time: " . round($d, 2) . " s", EOL; + + +echo date('H:i:s') , " Write to Excel2007 format" , EOL; +$objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel2007'); +$objWriter->save(str_replace('.php', '.xlsx', __FILE__)); +echo date('H:i:s') , " File written to " , str_replace('.php', '.xlsx', pathinfo(__FILE__, PATHINFO_BASENAME)) , EOL; + + +echo date('H:i:s') , " Peak memory usage: " , (memory_get_peak_usage(true) / 1024 / 1024) , " MB" , EOL; + +echo date('H:i:s') , " Done writing file" , EOL; +echo 'File has been created in ' , getcwd() , EOL;