From eab9a9cc78284d929dfa6c1bc71f9e4e4a0c10f1 Mon Sep 17 00:00:00 2001 From: Simon Finne Date: Sat, 15 Jun 2013 19:23:04 +0200 Subject: [PATCH 1/3] Font size support in Chart Title for Excel2007 --- Classes/PHPExcel/Writer/Excel2007/StringTable.php | 3 +++ 1 file changed, 3 insertions(+) diff --git a/Classes/PHPExcel/Writer/Excel2007/StringTable.php b/Classes/PHPExcel/Writer/Excel2007/StringTable.php index d6a702768..502f8bdcf 100644 --- a/Classes/PHPExcel/Writer/Excel2007/StringTable.php +++ b/Classes/PHPExcel/Writer/Excel2007/StringTable.php @@ -266,6 +266,9 @@ public function writeRichTextForCharts(PHPExcel_Shared_XMLWriter $objWriter = nu // Strikethrough $objWriter->writeAttribute('strike', ($element->getFont()->getStrikethrough() ? 'sngStrike' : 'noStrike')); + // Size + $objWriter->writeAttribute('sz', intval($element->getFont()->getSize() * 100.0)); + // rFont $objWriter->startElement($prefix.'latin'); $objWriter->writeAttribute('typeface', $element->getFont()->getName()); From 09c6f5fc69beb80b978d78aa375f92cb3e0c3f8c Mon Sep 17 00:00:00 2001 From: Simon Finne Date: Sat, 15 Jun 2013 20:55:00 +0200 Subject: [PATCH 2/3] Rich text support for Chart Axis Labels for Excel2007 --- Classes/PHPExcel/Writer/Excel2007/Chart.php | 29 +++++++-------------- 1 file changed, 9 insertions(+), 20 deletions(-) diff --git a/Classes/PHPExcel/Writer/Excel2007/Chart.php b/Classes/PHPExcel/Writer/Excel2007/Chart.php index 763f8af02..df53ffded 100644 --- a/Classes/PHPExcel/Writer/Excel2007/Chart.php +++ b/Classes/PHPExcel/Writer/Excel2007/Chart.php @@ -449,17 +449,11 @@ private function _writeCatAx($objWriter, PHPExcel_Chart_PlotArea $plotArea, $xAx $objWriter->endElement(); $objWriter->startElement('a:p'); - $objWriter->startElement('a:r'); - - $caption = $xAxisLabel->getCaption(); - if (is_array($caption)) - $caption = $caption[0]; - $objWriter->startElement('a:t'); -// $objWriter->writeAttribute('xml:space', 'preserve'); - $objWriter->writeRawData(PHPExcel_Shared_String::ControlCharacterPHP2OOXML( $caption )); - $objWriter->endElement(); + $caption = $xAxisLabel->getCaption(); + if ((is_array($caption)) && (count($caption) > 0)) + $caption = $caption[0]; - $objWriter->endElement(); + $this->getParentWriter()->getWriterPart('stringtable')->writeRichTextForCharts($objWriter, $caption, 'a'); $objWriter->endElement(); $objWriter->endElement(); $objWriter->endElement(); @@ -575,17 +569,12 @@ private function _writeValAx($objWriter, PHPExcel_Chart_PlotArea $plotArea, $yAx $objWriter->endElement(); $objWriter->startElement('a:p'); - $objWriter->startElement('a:r'); - - $caption = $yAxisLabel->getCaption(); - if (is_array($caption)) - $caption = $caption[0]; - $objWriter->startElement('a:t'); -// $objWriter->writeAttribute('xml:space', 'preserve'); - $objWriter->writeRawData(PHPExcel_Shared_String::ControlCharacterPHP2OOXML( $caption )); - $objWriter->endElement(); + $caption = $yAxisLabel->getCaption(); + if ((is_array($caption)) && (count($caption) > 0)) + $caption = $caption[0]; + + $this->getParentWriter()->getWriterPart('stringtable')->writeRichTextForCharts($objWriter, $caption, 'a'); - $objWriter->endElement(); $objWriter->endElement(); $objWriter->endElement(); $objWriter->endElement(); From ac0afe3a77da3be31a72dad96870de577c01e567 Mon Sep 17 00:00:00 2001 From: Simon Finne Date: Mon, 17 Jun 2013 21:43:08 +0200 Subject: [PATCH 3/3] Add support for 'Tick Label Skip' in Category Axis This commit adds a _tickLabelSkip attribute to PHPExcel_Chart_DataSeriesValues, which when used as a category axis in a chart will control writing of the c:tickLblSkip element in the Excel2007 Writer. --- Classes/PHPExcel/Chart/DataSeriesValues.php | 26 +++++++++++++++++++++ Classes/PHPExcel/Chart/PlotArea.php | 15 ++++++++++++ Classes/PHPExcel/Writer/Excel2007/Chart.php | 8 +++++++ 3 files changed, 49 insertions(+) diff --git a/Classes/PHPExcel/Chart/DataSeriesValues.php b/Classes/PHPExcel/Chart/DataSeriesValues.php index f7d068180..44e1e12fa 100644 --- a/Classes/PHPExcel/Chart/DataSeriesValues.php +++ b/Classes/PHPExcel/Chart/DataSeriesValues.php @@ -86,6 +86,13 @@ class PHPExcel_Chart_DataSeriesValues */ private $_dataValues = array(); + /** + * Tick Label Skip (when this dataseries is used as a category axis in chart) + * + * @var int + */ + private $_tickLabelSkip = null; + /** * Create a new PHPExcel_Chart_DataSeriesValues object */ @@ -99,6 +106,25 @@ public function __construct($dataType = self::DATASERIES_TYPE_NUMBER, $dataSourc $this->_marker = $marker; } + /** + * Get Tick Label Skip (when dataseries is used as a category axis in chart) + * + * @return int + */ + public function getTickLabelSkip() { + return $this->_tickLabelSkip; + } + + /** + * Set Tick Label Skip (when dataseries is used as a category axis in chart) + * + * @param int $tickLabelSkip + */ + public function setTickLabelSkip($tickLabelSkip = null) + { + $this->_tickLabelSkip = $tickLabelSkip; + } + /** * Get Series Data Type * diff --git a/Classes/PHPExcel/Chart/PlotArea.php b/Classes/PHPExcel/Chart/PlotArea.php index 2975c0936..ae81f0132 100644 --- a/Classes/PHPExcel/Chart/PlotArea.php +++ b/Classes/PHPExcel/Chart/PlotArea.php @@ -116,6 +116,21 @@ public function setPlotSeries($plotSeries = array()) { $this->_plotSeries = $plotSeries; } + /** + * Return the first plot categories found among all plot series + * + * @return PHPExcel_Chart_DataSeriesValues + */ + public function getPlotCategories() { + foreach($this->_plotSeries as $plot) + { + $cat = $plot->getPlotCategories(); + if (isset($cat[0]) && $cat[0] !== null) { + return $cat[0]; + } + } + } + public function refresh(PHPExcel_Worksheet $worksheet) { foreach($this->_plotSeries as $plotSeries) { $plotSeries->refresh($worksheet); diff --git a/Classes/PHPExcel/Writer/Excel2007/Chart.php b/Classes/PHPExcel/Writer/Excel2007/Chart.php index df53ffded..ffb04663b 100644 --- a/Classes/PHPExcel/Writer/Excel2007/Chart.php +++ b/Classes/PHPExcel/Writer/Excel2007/Chart.php @@ -496,6 +496,14 @@ private function _writeCatAx($objWriter, PHPExcel_Chart_PlotArea $plotArea, $xAx $objWriter->endElement(); } + $plotCategories = $plotArea->getPlotCategories(); + if ($plotCategories !== null && $plotCategories->getTickLabelSkip() !== null) + { + $objWriter->startElement('c:tickLblSkip'); + $objWriter->writeAttribute('val', $plotCategories->getTickLabelSkip()); + $objWriter->endElement(); + } + $objWriter->startElement('c:auto'); $objWriter->writeAttribute('val', 1); $objWriter->endElement();