[ Index ] |
PHP Cross Reference of Unnamed Project |
[Summary view] [Print] [Text view]
1 <?php 2 3 /** 4 * PHPExcel_Writer_Excel2007_Chart 5 * 6 * Copyright (c) 2006 - 2015 PHPExcel 7 * 8 * This library is free software; you can redistribute it and/or 9 * modify it under the terms of the GNU Lesser General Public 10 * License as published by the Free Software Foundation; either 11 * version 2.1 of the License, or (at your option) any later version. 12 * 13 * This library is distributed in the hope that it will be useful, 14 * but WITHOUT ANY WARRANTY; without even the implied warranty of 15 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 16 * Lesser General Public License for more details. 17 * 18 * You should have received a copy of the GNU Lesser General Public 19 * License along with this library; if not, write to the Free Software 20 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA 21 * 22 * @category PHPExcel 23 * @package PHPExcel_Writer_Excel2007 24 * @copyright Copyright (c) 2006 - 2015 PHPExcel (http://www.codeplex.com/PHPExcel) 25 * @license http://www.gnu.org/licenses/old-licenses/lgpl-2.1.txt LGPL 26 * @version ##VERSION##, ##DATE## 27 */ 28 class PHPExcel_Writer_Excel2007_Chart extends PHPExcel_Writer_Excel2007_WriterPart 29 { 30 /** 31 * Write charts to XML format 32 * 33 * @param PHPExcel_Chart $pChart 34 * 35 * @return string XML Output 36 * @throws PHPExcel_Writer_Exception 37 */ 38 public function writeChart(PHPExcel_Chart $pChart = null) 39 { 40 // Create XML writer 41 $objWriter = null; 42 if ($this->getParentWriter()->getUseDiskCaching()) { 43 $objWriter = new PHPExcel_Shared_XMLWriter(PHPExcel_Shared_XMLWriter::STORAGE_DISK, $this->getParentWriter()->getDiskCachingDirectory()); 44 } else { 45 $objWriter = new PHPExcel_Shared_XMLWriter(PHPExcel_Shared_XMLWriter::STORAGE_MEMORY); 46 } 47 // Ensure that data series values are up-to-date before we save 48 $pChart->refresh(); 49 50 // XML header 51 $objWriter->startDocument('1.0', 'UTF-8', 'yes'); 52 53 // c:chartSpace 54 $objWriter->startElement('c:chartSpace'); 55 $objWriter->writeAttribute('xmlns:c', 'http://schemas.openxmlformats.org/drawingml/2006/chart'); 56 $objWriter->writeAttribute('xmlns:a', 'http://schemas.openxmlformats.org/drawingml/2006/main'); 57 $objWriter->writeAttribute('xmlns:r', 'http://schemas.openxmlformats.org/officeDocument/2006/relationships'); 58 59 $objWriter->startElement('c:date1904'); 60 $objWriter->writeAttribute('val', 0); 61 $objWriter->endElement(); 62 $objWriter->startElement('c:lang'); 63 $objWriter->writeAttribute('val', "en-GB"); 64 $objWriter->endElement(); 65 $objWriter->startElement('c:roundedCorners'); 66 $objWriter->writeAttribute('val', 0); 67 $objWriter->endElement(); 68 69 $this->writeAlternateContent($objWriter); 70 71 $objWriter->startElement('c:chart'); 72 73 $this->writeTitle($pChart->getTitle(), $objWriter); 74 75 $objWriter->startElement('c:autoTitleDeleted'); 76 $objWriter->writeAttribute('val', 0); 77 $objWriter->endElement(); 78 79 $this->writePlotArea($pChart->getPlotArea(), $pChart->getXAxisLabel(), $pChart->getYAxisLabel(), $objWriter, $pChart->getWorksheet(), $pChart->getChartAxisX(), $pChart->getChartAxisY(), $pChart->getMajorGridlines(), $pChart->getMinorGridlines()); 80 81 $this->writeLegend($pChart->getLegend(), $objWriter); 82 83 $objWriter->startElement('c:plotVisOnly'); 84 $objWriter->writeAttribute('val', 1); 85 $objWriter->endElement(); 86 87 $objWriter->startElement('c:dispBlanksAs'); 88 $objWriter->writeAttribute('val', "gap"); 89 $objWriter->endElement(); 90 91 $objWriter->startElement('c:showDLblsOverMax'); 92 $objWriter->writeAttribute('val', 0); 93 $objWriter->endElement(); 94 95 $objWriter->endElement(); 96 97 $this->writePrintSettings($objWriter); 98 99 $objWriter->endElement(); 100 101 // Return 102 return $objWriter->getData(); 103 } 104 105 /** 106 * Write Chart Title 107 * 108 * @param PHPExcel_Chart_Title $title 109 * @param PHPExcel_Shared_XMLWriter $objWriter XML Writer 110 * 111 * @throws PHPExcel_Writer_Exception 112 */ 113 private function writeTitle(PHPExcel_Chart_Title $title = null, $objWriter) 114 { 115 if (is_null($title)) { 116 return; 117 } 118 119 $objWriter->startElement('c:title'); 120 $objWriter->startElement('c:tx'); 121 $objWriter->startElement('c:rich'); 122 123 $objWriter->startElement('a:bodyPr'); 124 $objWriter->endElement(); 125 126 $objWriter->startElement('a:lstStyle'); 127 $objWriter->endElement(); 128 129 $objWriter->startElement('a:p'); 130 131 $caption = $title->getCaption(); 132 if ((is_array($caption)) && (count($caption) > 0)) { 133 $caption = $caption[0]; 134 } 135 $this->getParentWriter()->getWriterPart('stringtable')->writeRichTextForCharts($objWriter, $caption, 'a'); 136 137 $objWriter->endElement(); 138 $objWriter->endElement(); 139 $objWriter->endElement(); 140 141 $this->writeLayout($title->getLayout(), $objWriter); 142 143 $objWriter->startElement('c:overlay'); 144 $objWriter->writeAttribute('val', 0); 145 $objWriter->endElement(); 146 147 $objWriter->endElement(); 148 } 149 150 /** 151 * Write Chart Legend 152 * 153 * @param PHPExcel_Chart_Legend $legend 154 * @param PHPExcel_Shared_XMLWriter $objWriter XML Writer 155 * 156 * @throws PHPExcel_Writer_Exception 157 */ 158 private function writeLegend(PHPExcel_Chart_Legend $legend = null, $objWriter) 159 { 160 if (is_null($legend)) { 161 return; 162 } 163 164 $objWriter->startElement('c:legend'); 165 166 $objWriter->startElement('c:legendPos'); 167 $objWriter->writeAttribute('val', $legend->getPosition()); 168 $objWriter->endElement(); 169 170 $this->writeLayout($legend->getLayout(), $objWriter); 171 172 $objWriter->startElement('c:overlay'); 173 $objWriter->writeAttribute('val', ($legend->getOverlay()) ? '1' : '0'); 174 $objWriter->endElement(); 175 176 $objWriter->startElement('c:txPr'); 177 $objWriter->startElement('a:bodyPr'); 178 $objWriter->endElement(); 179 180 $objWriter->startElement('a:lstStyle'); 181 $objWriter->endElement(); 182 183 $objWriter->startElement('a:p'); 184 $objWriter->startElement('a:pPr'); 185 $objWriter->writeAttribute('rtl', 0); 186 187 $objWriter->startElement('a:defRPr'); 188 $objWriter->endElement(); 189 $objWriter->endElement(); 190 191 $objWriter->startElement('a:endParaRPr'); 192 $objWriter->writeAttribute('lang', "en-US"); 193 $objWriter->endElement(); 194 195 $objWriter->endElement(); 196 $objWriter->endElement(); 197 198 $objWriter->endElement(); 199 } 200 201 /** 202 * Write Chart Plot Area 203 * 204 * @param PHPExcel_Chart_PlotArea $plotArea 205 * @param PHPExcel_Chart_Title $xAxisLabel 206 * @param PHPExcel_Chart_Title $yAxisLabel 207 * @param PHPExcel_Chart_Axis $xAxis 208 * @param PHPExcel_Chart_Axis $yAxis 209 * @param PHPExcel_Shared_XMLWriter $objWriter XML Writer 210 * 211 * @throws PHPExcel_Writer_Exception 212 */ 213 private function writePlotArea(PHPExcel_Chart_PlotArea $plotArea, PHPExcel_Chart_Title $xAxisLabel = null, PHPExcel_Chart_Title $yAxisLabel = null, $objWriter, PHPExcel_Worksheet $pSheet, PHPExcel_Chart_Axis $xAxis, PHPExcel_Chart_Axis $yAxis, PHPExcel_Chart_GridLines $majorGridlines, PHPExcel_Chart_GridLines $minorGridlines) 214 { 215 if (is_null($plotArea)) { 216 return; 217 } 218 219 $id1 = $id2 = 0; 220 $this->_seriesIndex = 0; 221 $objWriter->startElement('c:plotArea'); 222 223 $layout = $plotArea->getLayout(); 224 225 $this->writeLayout($layout, $objWriter); 226 227 $chartTypes = self::getChartType($plotArea); 228 $catIsMultiLevelSeries = $valIsMultiLevelSeries = false; 229 $plotGroupingType = ''; 230 foreach ($chartTypes as $chartType) { 231 $objWriter->startElement('c:' . $chartType); 232 233 $groupCount = $plotArea->getPlotGroupCount(); 234 for ($i = 0; $i < $groupCount; ++$i) { 235 $plotGroup = $plotArea->getPlotGroupByIndex($i); 236 $groupType = $plotGroup->getPlotType(); 237 if ($groupType == $chartType) { 238 $plotStyle = $plotGroup->getPlotStyle(); 239 if ($groupType === PHPExcel_Chart_DataSeries::TYPE_RADARCHART) { 240 $objWriter->startElement('c:radarStyle'); 241 $objWriter->writeAttribute('val', $plotStyle); 242 $objWriter->endElement(); 243 } elseif ($groupType === PHPExcel_Chart_DataSeries::TYPE_SCATTERCHART) { 244 $objWriter->startElement('c:scatterStyle'); 245 $objWriter->writeAttribute('val', $plotStyle); 246 $objWriter->endElement(); 247 } 248 249 $this->writePlotGroup($plotGroup, $chartType, $objWriter, $catIsMultiLevelSeries, $valIsMultiLevelSeries, $plotGroupingType, $pSheet); 250 } 251 } 252 253 $this->writeDataLabels($objWriter, $layout); 254 255 if ($chartType === PHPExcel_Chart_DataSeries::TYPE_LINECHART) { 256 // Line only, Line3D can't be smoothed 257 258 $objWriter->startElement('c:smooth'); 259 $objWriter->writeAttribute('val', (integer) $plotGroup->getSmoothLine()); 260 $objWriter->endElement(); 261 } elseif (($chartType === PHPExcel_Chart_DataSeries::TYPE_BARCHART) ||($chartType === PHPExcel_Chart_DataSeries::TYPE_BARCHART_3D)) { 262 $objWriter->startElement('c:gapWidth'); 263 $objWriter->writeAttribute('val', 150); 264 $objWriter->endElement(); 265 266 if ($plotGroupingType == 'percentStacked' || $plotGroupingType == 'stacked') { 267 $objWriter->startElement('c:overlap'); 268 $objWriter->writeAttribute('val', 100); 269 $objWriter->endElement(); 270 } 271 } elseif ($chartType === PHPExcel_Chart_DataSeries::TYPE_BUBBLECHART) { 272 $objWriter->startElement('c:bubbleScale'); 273 $objWriter->writeAttribute('val', 25); 274 $objWriter->endElement(); 275 276 $objWriter->startElement('c:showNegBubbles'); 277 $objWriter->writeAttribute('val', 0); 278 $objWriter->endElement(); 279 } elseif ($chartType === PHPExcel_Chart_DataSeries::TYPE_STOCKCHART) { 280 $objWriter->startElement('c:hiLowLines'); 281 $objWriter->endElement(); 282 283 $objWriter->startElement('c:upDownBars'); 284 285 $objWriter->startElement('c:gapWidth'); 286 $objWriter->writeAttribute('val', 300); 287 $objWriter->endElement(); 288 289 $objWriter->startElement('c:upBars'); 290 $objWriter->endElement(); 291 292 $objWriter->startElement('c:downBars'); 293 $objWriter->endElement(); 294 295 $objWriter->endElement(); 296 } 297 298 // Generate 2 unique numbers to use for axId values 299 // $id1 = $id2 = rand(10000000,99999999); 300 // do { 301 // $id2 = rand(10000000,99999999); 302 // } while ($id1 == $id2); 303 $id1 = '75091328'; 304 $id2 = '75089408'; 305 306 if (($chartType !== PHPExcel_Chart_DataSeries::TYPE_PIECHART) && ($chartType !== PHPExcel_Chart_DataSeries::TYPE_PIECHART_3D) && ($chartType !== PHPExcel_Chart_DataSeries::TYPE_DONUTCHART)) { 307 $objWriter->startElement('c:axId'); 308 $objWriter->writeAttribute('val', $id1); 309 $objWriter->endElement(); 310 $objWriter->startElement('c:axId'); 311 $objWriter->writeAttribute('val', $id2); 312 $objWriter->endElement(); 313 } else { 314 $objWriter->startElement('c:firstSliceAng'); 315 $objWriter->writeAttribute('val', 0); 316 $objWriter->endElement(); 317 318 if ($chartType === PHPExcel_Chart_DataSeries::TYPE_DONUTCHART) { 319 $objWriter->startElement('c:holeSize'); 320 $objWriter->writeAttribute('val', 50); 321 $objWriter->endElement(); 322 } 323 } 324 325 $objWriter->endElement(); 326 } 327 328 if (($chartType !== PHPExcel_Chart_DataSeries::TYPE_PIECHART) && ($chartType !== PHPExcel_Chart_DataSeries::TYPE_PIECHART_3D) && ($chartType !== PHPExcel_Chart_DataSeries::TYPE_DONUTCHART)) { 329 if ($chartType === PHPExcel_Chart_DataSeries::TYPE_BUBBLECHART) { 330 $this->writeValueAxis($objWriter, $plotArea, $xAxisLabel, $chartType, $id1, $id2, $catIsMultiLevelSeries, $xAxis, $yAxis, $majorGridlines, $minorGridlines); 331 } else { 332 $this->writeCategoryAxis($objWriter, $plotArea, $xAxisLabel, $chartType, $id1, $id2, $catIsMultiLevelSeries, $xAxis, $yAxis); 333 } 334 335 $this->writeValueAxis($objWriter, $plotArea, $yAxisLabel, $chartType, $id1, $id2, $valIsMultiLevelSeries, $xAxis, $yAxis, $majorGridlines, $minorGridlines); 336 } 337 338 $objWriter->endElement(); 339 } 340 341 /** 342 * Write Data Labels 343 * 344 * @param PHPExcel_Shared_XMLWriter $objWriter XML Writer 345 * @param PHPExcel_Chart_Layout $chartLayout Chart layout 346 * 347 * @throws PHPExcel_Writer_Exception 348 */ 349 private function writeDataLabels($objWriter, $chartLayout) 350 { 351 $objWriter->startElement('c:dLbls'); 352 353 $objWriter->startElement('c:showLegendKey'); 354 $showLegendKey = (empty($chartLayout)) ? 0 : $chartLayout->getShowLegendKey(); 355 $objWriter->writeAttribute('val', ((empty($showLegendKey)) ? 0 : 1)); 356 $objWriter->endElement(); 357 358 $objWriter->startElement('c:showVal'); 359 $showVal = (empty($chartLayout)) ? 0 : $chartLayout->getShowVal(); 360 $objWriter->writeAttribute('val', ((empty($showVal)) ? 0 : 1)); 361 $objWriter->endElement(); 362 363 $objWriter->startElement('c:showCatName'); 364 $showCatName = (empty($chartLayout)) ? 0 : $chartLayout->getShowCatName(); 365 $objWriter->writeAttribute('val', ((empty($showCatName)) ? 0 : 1)); 366 $objWriter->endElement(); 367 368 $objWriter->startElement('c:showSerName'); 369 $showSerName = (empty($chartLayout)) ? 0 : $chartLayout->getShowSerName(); 370 $objWriter->writeAttribute('val', ((empty($showSerName)) ? 0 : 1)); 371 $objWriter->endElement(); 372 373 $objWriter->startElement('c:showPercent'); 374 $showPercent = (empty($chartLayout)) ? 0 : $chartLayout->getShowPercent(); 375 $objWriter->writeAttribute('val', ((empty($showPercent)) ? 0 : 1)); 376 $objWriter->endElement(); 377 378 $objWriter->startElement('c:showBubbleSize'); 379 $showBubbleSize = (empty($chartLayout)) ? 0 : $chartLayout->getShowBubbleSize(); 380 $objWriter->writeAttribute('val', ((empty($showBubbleSize)) ? 0 : 1)); 381 $objWriter->endElement(); 382 383 $objWriter->startElement('c:showLeaderLines'); 384 $showLeaderLines = (empty($chartLayout)) ? 1 : $chartLayout->getShowLeaderLines(); 385 $objWriter->writeAttribute('val', ((empty($showLeaderLines)) ? 0 : 1)); 386 $objWriter->endElement(); 387 388 $objWriter->endElement(); 389 } 390 391 /** 392 * Write Category Axis 393 * 394 * @param PHPExcel_Shared_XMLWriter $objWriter XML Writer 395 * @param PHPExcel_Chart_PlotArea $plotArea 396 * @param PHPExcel_Chart_Title $xAxisLabel 397 * @param string $groupType Chart type 398 * @param string $id1 399 * @param string $id2 400 * @param boolean $isMultiLevelSeries 401 * 402 * @throws PHPExcel_Writer_Exception 403 */ 404 private function writeCategoryAxis($objWriter, PHPExcel_Chart_PlotArea $plotArea, $xAxisLabel, $groupType, $id1, $id2, $isMultiLevelSeries, $xAxis, $yAxis) 405 { 406 $objWriter->startElement('c:catAx'); 407 408 if ($id1 > 0) { 409 $objWriter->startElement('c:axId'); 410 $objWriter->writeAttribute('val', $id1); 411 $objWriter->endElement(); 412 } 413 414 $objWriter->startElement('c:scaling'); 415 $objWriter->startElement('c:orientation'); 416 $objWriter->writeAttribute('val', $yAxis->getAxisOptionsProperty('orientation')); 417 $objWriter->endElement(); 418 $objWriter->endElement(); 419 420 $objWriter->startElement('c:delete'); 421 $objWriter->writeAttribute('val', 0); 422 $objWriter->endElement(); 423 424 $objWriter->startElement('c:axPos'); 425 $objWriter->writeAttribute('val', "b"); 426 $objWriter->endElement(); 427 428 if (!is_null($xAxisLabel)) { 429 $objWriter->startElement('c:title'); 430 $objWriter->startElement('c:tx'); 431 $objWriter->startElement('c:rich'); 432 433 $objWriter->startElement('a:bodyPr'); 434 $objWriter->endElement(); 435 436 $objWriter->startElement('a:lstStyle'); 437 $objWriter->endElement(); 438 439 $objWriter->startElement('a:p'); 440 $objWriter->startElement('a:r'); 441 442 $caption = $xAxisLabel->getCaption(); 443 if (is_array($caption)) { 444 $caption = $caption[0]; 445 } 446 $objWriter->startElement('a:t'); 447 // $objWriter->writeAttribute('xml:space', 'preserve'); 448 $objWriter->writeRawData(PHPExcel_Shared_String::ControlCharacterPHP2OOXML($caption)); 449 $objWriter->endElement(); 450 451 $objWriter->endElement(); 452 $objWriter->endElement(); 453 $objWriter->endElement(); 454 $objWriter->endElement(); 455 456 $layout = $xAxisLabel->getLayout(); 457 $this->writeLayout($layout, $objWriter); 458 459 $objWriter->startElement('c:overlay'); 460 $objWriter->writeAttribute('val', 0); 461 $objWriter->endElement(); 462 463 $objWriter->endElement(); 464 } 465 466 $objWriter->startElement('c:numFmt'); 467 $objWriter->writeAttribute('formatCode', $yAxis->getAxisNumberFormat()); 468 $objWriter->writeAttribute('sourceLinked', $yAxis->getAxisNumberSourceLinked()); 469 $objWriter->endElement(); 470 471 $objWriter->startElement('c:majorTickMark'); 472 $objWriter->writeAttribute('val', $yAxis->getAxisOptionsProperty('major_tick_mark')); 473 $objWriter->endElement(); 474 475 $objWriter->startElement('c:minorTickMark'); 476 $objWriter->writeAttribute('val', $yAxis->getAxisOptionsProperty('minor_tick_mark')); 477 $objWriter->endElement(); 478 479 $objWriter->startElement('c:tickLblPos'); 480 $objWriter->writeAttribute('val', $yAxis->getAxisOptionsProperty('axis_labels')); 481 $objWriter->endElement(); 482 483 if ($id2 > 0) { 484 $objWriter->startElement('c:crossAx'); 485 $objWriter->writeAttribute('val', $id2); 486 $objWriter->endElement(); 487 488 $objWriter->startElement('c:crosses'); 489 $objWriter->writeAttribute('val', $yAxis->getAxisOptionsProperty('horizontal_crosses')); 490 $objWriter->endElement(); 491 } 492 493 $objWriter->startElement('c:auto'); 494 $objWriter->writeAttribute('val', 1); 495 $objWriter->endElement(); 496 497 $objWriter->startElement('c:lblAlgn'); 498 $objWriter->writeAttribute('val', "ctr"); 499 $objWriter->endElement(); 500 501 $objWriter->startElement('c:lblOffset'); 502 $objWriter->writeAttribute('val', 100); 503 $objWriter->endElement(); 504 505 if ($isMultiLevelSeries) { 506 $objWriter->startElement('c:noMultiLvlLbl'); 507 $objWriter->writeAttribute('val', 0); 508 $objWriter->endElement(); 509 } 510 $objWriter->endElement(); 511 } 512 513 /** 514 * Write Value Axis 515 * 516 * @param PHPExcel_Shared_XMLWriter $objWriter XML Writer 517 * @param PHPExcel_Chart_PlotArea $plotArea 518 * @param PHPExcel_Chart_Title $yAxisLabel 519 * @param string $groupType Chart type 520 * @param string $id1 521 * @param string $id2 522 * @param boolean $isMultiLevelSeries 523 * 524 * @throws PHPExcel_Writer_Exception 525 */ 526 private function writeValueAxis($objWriter, PHPExcel_Chart_PlotArea $plotArea, $yAxisLabel, $groupType, $id1, $id2, $isMultiLevelSeries, $xAxis, $yAxis, $majorGridlines, $minorGridlines) 527 { 528 $objWriter->startElement('c:valAx'); 529 530 if ($id2 > 0) { 531 $objWriter->startElement('c:axId'); 532 $objWriter->writeAttribute('val', $id2); 533 $objWriter->endElement(); 534 } 535 536 $objWriter->startElement('c:scaling'); 537 $objWriter->startElement('c:orientation'); 538 $objWriter->writeAttribute('val', $xAxis->getAxisOptionsProperty('orientation')); 539 540 if (!is_null($xAxis->getAxisOptionsProperty('maximum'))) { 541 $objWriter->startElement('c:max'); 542 $objWriter->writeAttribute('val', $xAxis->getAxisOptionsProperty('maximum')); 543 $objWriter->endElement(); 544 } 545 546 if (!is_null($xAxis->getAxisOptionsProperty('minimum'))) { 547 $objWriter->startElement('c:min'); 548 $objWriter->writeAttribute('val', $xAxis->getAxisOptionsProperty('minimum')); 549 $objWriter->endElement(); 550 } 551 552 $objWriter->endElement(); 553 $objWriter->endElement(); 554 555 $objWriter->startElement('c:delete'); 556 $objWriter->writeAttribute('val', 0); 557 $objWriter->endElement(); 558 559 $objWriter->startElement('c:axPos'); 560 $objWriter->writeAttribute('val', "l"); 561 $objWriter->endElement(); 562 563 $objWriter->startElement('c:majorGridlines'); 564 $objWriter->startElement('c:spPr'); 565 566 if (!is_null($majorGridlines->getLineColorProperty('value'))) { 567 $objWriter->startElement('a:ln'); 568 $objWriter->writeAttribute('w', $majorGridlines->getLineStyleProperty('width')); 569 $objWriter->startElement('a:solidFill'); 570 $objWriter->startElement("a:{$majorGridlines->getLineColorProperty('type')}"); 571 $objWriter->writeAttribute('val', $majorGridlines->getLineColorProperty('value')); 572 $objWriter->startElement('a:alpha'); 573 $objWriter->writeAttribute('val', $majorGridlines->getLineColorProperty('alpha')); 574 $objWriter->endElement(); //end alpha 575 $objWriter->endElement(); //end srgbClr 576 $objWriter->endElement(); //end solidFill 577 578 $objWriter->startElement('a:prstDash'); 579 $objWriter->writeAttribute('val', $majorGridlines->getLineStyleProperty('dash')); 580 $objWriter->endElement(); 581 582 if ($majorGridlines->getLineStyleProperty('join') == 'miter') { 583 $objWriter->startElement('a:miter'); 584 $objWriter->writeAttribute('lim', '800000'); 585 $objWriter->endElement(); 586 } else { 587 $objWriter->startElement('a:bevel'); 588 $objWriter->endElement(); 589 } 590 591 if (!is_null($majorGridlines->getLineStyleProperty(array('arrow', 'head', 'type')))) { 592 $objWriter->startElement('a:headEnd'); 593 $objWriter->writeAttribute('type', $majorGridlines->getLineStyleProperty(array('arrow', 'head', 'type'))); 594 $objWriter->writeAttribute('w', $majorGridlines->getLineStyleArrowParameters('head', 'w')); 595 $objWriter->writeAttribute('len', $majorGridlines->getLineStyleArrowParameters('head', 'len')); 596 $objWriter->endElement(); 597 } 598 599 if (!is_null($majorGridlines->getLineStyleProperty(array('arrow', 'end', 'type')))) { 600 $objWriter->startElement('a:tailEnd'); 601 $objWriter->writeAttribute('type', $majorGridlines->getLineStyleProperty(array('arrow', 'end', 'type'))); 602 $objWriter->writeAttribute('w', $majorGridlines->getLineStyleArrowParameters('end', 'w')); 603 $objWriter->writeAttribute('len', $majorGridlines->getLineStyleArrowParameters('end', 'len')); 604 $objWriter->endElement(); 605 } 606 $objWriter->endElement(); //end ln 607 } 608 $objWriter->startElement('a:effectLst'); 609 610 if (!is_null($majorGridlines->getGlowSize())) { 611 $objWriter->startElement('a:glow'); 612 $objWriter->writeAttribute('rad', $majorGridlines->getGlowSize()); 613 $objWriter->startElement("a:{$majorGridlines->getGlowColor('type')}"); 614 $objWriter->writeAttribute('val', $majorGridlines->getGlowColor('value')); 615 $objWriter->startElement('a:alpha'); 616 $objWriter->writeAttribute('val', $majorGridlines->getGlowColor('alpha')); 617 $objWriter->endElement(); //end alpha 618 $objWriter->endElement(); //end schemeClr 619 $objWriter->endElement(); //end glow 620 } 621 622 if (!is_null($majorGridlines->getShadowProperty('presets'))) { 623 $objWriter->startElement("a:{$majorGridlines->getShadowProperty('effect')}"); 624 if (!is_null($majorGridlines->getShadowProperty('blur'))) { 625 $objWriter->writeAttribute('blurRad', $majorGridlines->getShadowProperty('blur')); 626 } 627 if (!is_null($majorGridlines->getShadowProperty('distance'))) { 628 $objWriter->writeAttribute('dist', $majorGridlines->getShadowProperty('distance')); 629 } 630 if (!is_null($majorGridlines->getShadowProperty('direction'))) { 631 $objWriter->writeAttribute('dir', $majorGridlines->getShadowProperty('direction')); 632 } 633 if (!is_null($majorGridlines->getShadowProperty('algn'))) { 634 $objWriter->writeAttribute('algn', $majorGridlines->getShadowProperty('algn')); 635 } 636 if (!is_null($majorGridlines->getShadowProperty(array('size', 'sx')))) { 637 $objWriter->writeAttribute('sx', $majorGridlines->getShadowProperty(array('size', 'sx'))); 638 } 639 if (!is_null($majorGridlines->getShadowProperty(array('size', 'sy')))) { 640 $objWriter->writeAttribute('sy', $majorGridlines->getShadowProperty(array('size', 'sy'))); 641 } 642 if (!is_null($majorGridlines->getShadowProperty(array('size', 'kx')))) { 643 $objWriter->writeAttribute('kx', $majorGridlines->getShadowProperty(array('size', 'kx'))); 644 } 645 if (!is_null($majorGridlines->getShadowProperty('rotWithShape'))) { 646 $objWriter->writeAttribute('rotWithShape', $majorGridlines->getShadowProperty('rotWithShape')); 647 } 648 $objWriter->startElement("a:{$majorGridlines->getShadowProperty(array('color', 'type'))}"); 649 $objWriter->writeAttribute('val', $majorGridlines->getShadowProperty(array('color', 'value'))); 650 651 $objWriter->startElement('a:alpha'); 652 $objWriter->writeAttribute('val', $majorGridlines->getShadowProperty(array('color', 'alpha'))); 653 $objWriter->endElement(); //end alpha 654 655 $objWriter->endElement(); //end color:type 656 $objWriter->endElement(); //end shadow 657 } 658 659 if (!is_null($majorGridlines->getSoftEdgesSize())) { 660 $objWriter->startElement('a:softEdge'); 661 $objWriter->writeAttribute('rad', $majorGridlines->getSoftEdgesSize()); 662 $objWriter->endElement(); //end softEdge 663 } 664 665 $objWriter->endElement(); //end effectLst 666 $objWriter->endElement(); //end spPr 667 $objWriter->endElement(); //end majorGridLines 668 669 if ($minorGridlines->getObjectState()) { 670 $objWriter->startElement('c:minorGridlines'); 671 $objWriter->startElement('c:spPr'); 672 673 if (!is_null($minorGridlines->getLineColorProperty('value'))) { 674 $objWriter->startElement('a:ln'); 675 $objWriter->writeAttribute('w', $minorGridlines->getLineStyleProperty('width')); 676 $objWriter->startElement('a:solidFill'); 677 $objWriter->startElement("a:{$minorGridlines->getLineColorProperty('type')}"); 678 $objWriter->writeAttribute('val', $minorGridlines->getLineColorProperty('value')); 679 $objWriter->startElement('a:alpha'); 680 $objWriter->writeAttribute('val', $minorGridlines->getLineColorProperty('alpha')); 681 $objWriter->endElement(); //end alpha 682 $objWriter->endElement(); //end srgbClr 683 $objWriter->endElement(); //end solidFill 684 685 $objWriter->startElement('a:prstDash'); 686 $objWriter->writeAttribute('val', $minorGridlines->getLineStyleProperty('dash')); 687 $objWriter->endElement(); 688 689 if ($minorGridlines->getLineStyleProperty('join') == 'miter') { 690 $objWriter->startElement('a:miter'); 691 $objWriter->writeAttribute('lim', '800000'); 692 $objWriter->endElement(); 693 } else { 694 $objWriter->startElement('a:bevel'); 695 $objWriter->endElement(); 696 } 697 698 if (!is_null($minorGridlines->getLineStyleProperty(array('arrow', 'head', 'type')))) { 699 $objWriter->startElement('a:headEnd'); 700 $objWriter->writeAttribute('type', $minorGridlines->getLineStyleProperty(array('arrow', 'head', 'type'))); 701 $objWriter->writeAttribute('w', $minorGridlines->getLineStyleArrowParameters('head', 'w')); 702 $objWriter->writeAttribute('len', $minorGridlines->getLineStyleArrowParameters('head', 'len')); 703 $objWriter->endElement(); 704 } 705 706 if (!is_null($minorGridlines->getLineStyleProperty(array('arrow', 'end', 'type')))) { 707 $objWriter->startElement('a:tailEnd'); 708 $objWriter->writeAttribute('type', $minorGridlines->getLineStyleProperty(array('arrow', 'end', 'type'))); 709 $objWriter->writeAttribute('w', $minorGridlines->getLineStyleArrowParameters('end', 'w')); 710 $objWriter->writeAttribute('len', $minorGridlines->getLineStyleArrowParameters('end', 'len')); 711 $objWriter->endElement(); 712 } 713 $objWriter->endElement(); //end ln 714 } 715 716 $objWriter->startElement('a:effectLst'); 717 718 if (!is_null($minorGridlines->getGlowSize())) { 719 $objWriter->startElement('a:glow'); 720 $objWriter->writeAttribute('rad', $minorGridlines->getGlowSize()); 721 $objWriter->startElement("a:{$minorGridlines->getGlowColor('type')}"); 722 $objWriter->writeAttribute('val', $minorGridlines->getGlowColor('value')); 723 $objWriter->startElement('a:alpha'); 724 $objWriter->writeAttribute('val', $minorGridlines->getGlowColor('alpha')); 725 $objWriter->endElement(); //end alpha 726 $objWriter->endElement(); //end schemeClr 727 $objWriter->endElement(); //end glow 728 } 729 730 if (!is_null($minorGridlines->getShadowProperty('presets'))) { 731 $objWriter->startElement("a:{$minorGridlines->getShadowProperty('effect')}"); 732 if (!is_null($minorGridlines->getShadowProperty('blur'))) { 733 $objWriter->writeAttribute('blurRad', $minorGridlines->getShadowProperty('blur')); 734 } 735 if (!is_null($minorGridlines->getShadowProperty('distance'))) { 736 $objWriter->writeAttribute('dist', $minorGridlines->getShadowProperty('distance')); 737 } 738 if (!is_null($minorGridlines->getShadowProperty('direction'))) { 739 $objWriter->writeAttribute('dir', $minorGridlines->getShadowProperty('direction')); 740 } 741 if (!is_null($minorGridlines->getShadowProperty('algn'))) { 742 $objWriter->writeAttribute('algn', $minorGridlines->getShadowProperty('algn')); 743 } 744 if (!is_null($minorGridlines->getShadowProperty(array('size', 'sx')))) { 745 $objWriter->writeAttribute('sx', $minorGridlines->getShadowProperty(array('size', 'sx'))); 746 } 747 if (!is_null($minorGridlines->getShadowProperty(array('size', 'sy')))) { 748 $objWriter->writeAttribute('sy', $minorGridlines->getShadowProperty(array('size', 'sy'))); 749 } 750 if (!is_null($minorGridlines->getShadowProperty(array('size', 'kx')))) { 751 $objWriter->writeAttribute('kx', $minorGridlines->getShadowProperty(array('size', 'kx'))); 752 } 753 if (!is_null($minorGridlines->getShadowProperty('rotWithShape'))) { 754 $objWriter->writeAttribute('rotWithShape', $minorGridlines->getShadowProperty('rotWithShape')); 755 } 756 $objWriter->startElement("a:{$minorGridlines->getShadowProperty(array('color', 'type'))}"); 757 $objWriter->writeAttribute('val', $minorGridlines->getShadowProperty(array('color', 'value'))); 758 $objWriter->startElement('a:alpha'); 759 $objWriter->writeAttribute('val', $minorGridlines->getShadowProperty(array('color', 'alpha'))); 760 $objWriter->endElement(); //end alpha 761 $objWriter->endElement(); //end color:type 762 $objWriter->endElement(); //end shadow 763 } 764 765 if (!is_null($minorGridlines->getSoftEdgesSize())) { 766 $objWriter->startElement('a:softEdge'); 767 $objWriter->writeAttribute('rad', $minorGridlines->getSoftEdgesSize()); 768 $objWriter->endElement(); //end softEdge 769 } 770 771 $objWriter->endElement(); //end effectLst 772 $objWriter->endElement(); //end spPr 773 $objWriter->endElement(); //end minorGridLines 774 } 775 776 if (!is_null($yAxisLabel)) { 777 $objWriter->startElement('c:title'); 778 $objWriter->startElement('c:tx'); 779 $objWriter->startElement('c:rich'); 780 781 $objWriter->startElement('a:bodyPr'); 782 $objWriter->endElement(); 783 784 $objWriter->startElement('a:lstStyle'); 785 $objWriter->endElement(); 786 787 $objWriter->startElement('a:p'); 788 $objWriter->startElement('a:r'); 789 790 $caption = $yAxisLabel->getCaption(); 791 if (is_array($caption)) { 792 $caption = $caption[0]; 793 } 794 795 $objWriter->startElement('a:t'); 796 // $objWriter->writeAttribute('xml:space', 'preserve'); 797 $objWriter->writeRawData(PHPExcel_Shared_String::ControlCharacterPHP2OOXML($caption)); 798 $objWriter->endElement(); 799 800 $objWriter->endElement(); 801 $objWriter->endElement(); 802 $objWriter->endElement(); 803 $objWriter->endElement(); 804 805 if ($groupType !== PHPExcel_Chart_DataSeries::TYPE_BUBBLECHART) { 806 $layout = $yAxisLabel->getLayout(); 807 $this->writeLayout($layout, $objWriter); 808 } 809 810 $objWriter->startElement('c:overlay'); 811 $objWriter->writeAttribute('val', 0); 812 $objWriter->endElement(); 813 814 $objWriter->endElement(); 815 } 816 817 $objWriter->startElement('c:numFmt'); 818 $objWriter->writeAttribute('formatCode', $xAxis->getAxisNumberFormat()); 819 $objWriter->writeAttribute('sourceLinked', $xAxis->getAxisNumberSourceLinked()); 820 $objWriter->endElement(); 821 822 $objWriter->startElement('c:majorTickMark'); 823 $objWriter->writeAttribute('val', $xAxis->getAxisOptionsProperty('major_tick_mark')); 824 $objWriter->endElement(); 825 826 $objWriter->startElement('c:minorTickMark'); 827 $objWriter->writeAttribute('val', $xAxis->getAxisOptionsProperty('minor_tick_mark')); 828 $objWriter->endElement(); 829 830 $objWriter->startElement('c:tickLblPos'); 831 $objWriter->writeAttribute('val', $xAxis->getAxisOptionsProperty('axis_labels')); 832 $objWriter->endElement(); 833 834 $objWriter->startElement('c:spPr'); 835 836 if (!is_null($xAxis->getFillProperty('value'))) { 837 $objWriter->startElement('a:solidFill'); 838 $objWriter->startElement("a:" . $xAxis->getFillProperty('type')); 839 $objWriter->writeAttribute('val', $xAxis->getFillProperty('value')); 840 $objWriter->startElement('a:alpha'); 841 $objWriter->writeAttribute('val', $xAxis->getFillProperty('alpha')); 842 $objWriter->endElement(); 843 $objWriter->endElement(); 844 $objWriter->endElement(); 845 } 846 847 $objWriter->startElement('a:ln'); 848 849 $objWriter->writeAttribute('w', $xAxis->getLineStyleProperty('width')); 850 $objWriter->writeAttribute('cap', $xAxis->getLineStyleProperty('cap')); 851 $objWriter->writeAttribute('cmpd', $xAxis->getLineStyleProperty('compound')); 852 853 if (!is_null($xAxis->getLineProperty('value'))) { 854 $objWriter->startElement('a:solidFill'); 855 $objWriter->startElement("a:" . $xAxis->getLineProperty('type')); 856 $objWriter->writeAttribute('val', $xAxis->getLineProperty('value')); 857 $objWriter->startElement('a:alpha'); 858 $objWriter->writeAttribute('val', $xAxis->getLineProperty('alpha')); 859 $objWriter->endElement(); 860 $objWriter->endElement(); 861 $objWriter->endElement(); 862 } 863 864 $objWriter->startElement('a:prstDash'); 865 $objWriter->writeAttribute('val', $xAxis->getLineStyleProperty('dash')); 866 $objWriter->endElement(); 867 868 if ($xAxis->getLineStyleProperty('join') == 'miter') { 869 $objWriter->startElement('a:miter'); 870 $objWriter->writeAttribute('lim', '800000'); 871 $objWriter->endElement(); 872 } else { 873 $objWriter->startElement('a:bevel'); 874 $objWriter->endElement(); 875 } 876 877 if (!is_null($xAxis->getLineStyleProperty(array('arrow', 'head', 'type')))) { 878 $objWriter->startElement('a:headEnd'); 879 $objWriter->writeAttribute('type', $xAxis->getLineStyleProperty(array('arrow', 'head', 'type'))); 880 $objWriter->writeAttribute('w', $xAxis->getLineStyleArrowWidth('head')); 881 $objWriter->writeAttribute('len', $xAxis->getLineStyleArrowLength('head')); 882 $objWriter->endElement(); 883 } 884 885 if (!is_null($xAxis->getLineStyleProperty(array('arrow', 'end', 'type')))) { 886 $objWriter->startElement('a:tailEnd'); 887 $objWriter->writeAttribute('type', $xAxis->getLineStyleProperty(array('arrow', 'end', 'type'))); 888 $objWriter->writeAttribute('w', $xAxis->getLineStyleArrowWidth('end')); 889 $objWriter->writeAttribute('len', $xAxis->getLineStyleArrowLength('end')); 890 $objWriter->endElement(); 891 } 892 893 $objWriter->endElement(); 894 895 $objWriter->startElement('a:effectLst'); 896 897 if (!is_null($xAxis->getGlowProperty('size'))) { 898 $objWriter->startElement('a:glow'); 899 $objWriter->writeAttribute('rad', $xAxis->getGlowProperty('size')); 900 $objWriter->startElement("a:{$xAxis->getGlowProperty(array('color','type'))}"); 901 $objWriter->writeAttribute('val', $xAxis->getGlowProperty(array('color','value'))); 902 $objWriter->startElement('a:alpha'); 903 $objWriter->writeAttribute('val', $xAxis->getGlowProperty(array('color','alpha'))); 904 $objWriter->endElement(); 905 $objWriter->endElement(); 906 $objWriter->endElement(); 907 } 908 909 if (!is_null($xAxis->getShadowProperty('presets'))) { 910 $objWriter->startElement("a:{$xAxis->getShadowProperty('effect')}"); 911 912 if (!is_null($xAxis->getShadowProperty('blur'))) { 913 $objWriter->writeAttribute('blurRad', $xAxis->getShadowProperty('blur')); 914 } 915 if (!is_null($xAxis->getShadowProperty('distance'))) { 916 $objWriter->writeAttribute('dist', $xAxis->getShadowProperty('distance')); 917 } 918 if (!is_null($xAxis->getShadowProperty('direction'))) { 919 $objWriter->writeAttribute('dir', $xAxis->getShadowProperty('direction')); 920 } 921 if (!is_null($xAxis->getShadowProperty('algn'))) { 922 $objWriter->writeAttribute('algn', $xAxis->getShadowProperty('algn')); 923 } 924 if (!is_null($xAxis->getShadowProperty(array('size','sx')))) { 925 $objWriter->writeAttribute('sx', $xAxis->getShadowProperty(array('size','sx'))); 926 } 927 if (!is_null($xAxis->getShadowProperty(array('size','sy')))) { 928 $objWriter->writeAttribute('sy', $xAxis->getShadowProperty(array('size','sy'))); 929 } 930 if (!is_null($xAxis->getShadowProperty(array('size','kx')))) { 931 $objWriter->writeAttribute('kx', $xAxis->getShadowProperty(array('size','kx'))); 932 } 933 if (!is_null($xAxis->getShadowProperty('rotWithShape'))) { 934 $objWriter->writeAttribute('rotWithShape', $xAxis->getShadowProperty('rotWithShape')); 935 } 936 937 $objWriter->startElement("a:{$xAxis->getShadowProperty(array('color','type'))}"); 938 $objWriter->writeAttribute('val', $xAxis->getShadowProperty(array('color','value'))); 939 $objWriter->startElement('a:alpha'); 940 $objWriter->writeAttribute('val', $xAxis->getShadowProperty(array('color','alpha'))); 941 $objWriter->endElement(); 942 $objWriter->endElement(); 943 944 $objWriter->endElement(); 945 } 946 947 if (!is_null($xAxis->getSoftEdgesSize())) { 948 $objWriter->startElement('a:softEdge'); 949 $objWriter->writeAttribute('rad', $xAxis->getSoftEdgesSize()); 950 $objWriter->endElement(); 951 } 952 953 $objWriter->endElement(); //effectList 954 $objWriter->endElement(); //end spPr 955 956 if ($id1 > 0) { 957 $objWriter->startElement('c:crossAx'); 958 $objWriter->writeAttribute('val', $id2); 959 $objWriter->endElement(); 960 961 if (!is_null($xAxis->getAxisOptionsProperty('horizontal_crosses_value'))) { 962 $objWriter->startElement('c:crossesAt'); 963 $objWriter->writeAttribute('val', $xAxis->getAxisOptionsProperty('horizontal_crosses_value')); 964 $objWriter->endElement(); 965 } else { 966 $objWriter->startElement('c:crosses'); 967 $objWriter->writeAttribute('val', $xAxis->getAxisOptionsProperty('horizontal_crosses')); 968 $objWriter->endElement(); 969 } 970 971 $objWriter->startElement('c:crossBetween'); 972 $objWriter->writeAttribute('val', "midCat"); 973 $objWriter->endElement(); 974 975 if (!is_null($xAxis->getAxisOptionsProperty('major_unit'))) { 976 $objWriter->startElement('c:majorUnit'); 977 $objWriter->writeAttribute('val', $xAxis->getAxisOptionsProperty('major_unit')); 978 $objWriter->endElement(); 979 } 980 981 if (!is_null($xAxis->getAxisOptionsProperty('minor_unit'))) { 982 $objWriter->startElement('c:minorUnit'); 983 $objWriter->writeAttribute('val', $xAxis->getAxisOptionsProperty('minor_unit')); 984 $objWriter->endElement(); 985 } 986 } 987 988 if ($isMultiLevelSeries) { 989 if ($groupType !== PHPExcel_Chart_DataSeries::TYPE_BUBBLECHART) { 990 $objWriter->startElement('c:noMultiLvlLbl'); 991 $objWriter->writeAttribute('val', 0); 992 $objWriter->endElement(); 993 } 994 } 995 996 $objWriter->endElement(); 997 } 998 999 /** 1000 * Get the data series type(s) for a chart plot series 1001 * 1002 * @param PHPExcel_Chart_PlotArea $plotArea 1003 * 1004 * @return string|array 1005 * @throws PHPExcel_Writer_Exception 1006 */ 1007 private static function getChartType($plotArea) 1008 { 1009 $groupCount = $plotArea->getPlotGroupCount(); 1010 1011 if ($groupCount == 1) { 1012 $chartType = array($plotArea->getPlotGroupByIndex(0)->getPlotType()); 1013 } else { 1014 $chartTypes = array(); 1015 for ($i = 0; $i < $groupCount; ++$i) { 1016 $chartTypes[] = $plotArea->getPlotGroupByIndex($i)->getPlotType(); 1017 } 1018 $chartType = array_unique($chartTypes); 1019 if (count($chartTypes) == 0) { 1020 throw new PHPExcel_Writer_Exception('Chart is not yet implemented'); 1021 } 1022 } 1023 1024 return $chartType; 1025 } 1026 1027 /** 1028 * Write Plot Group (series of related plots) 1029 * 1030 * @param PHPExcel_Chart_DataSeries $plotGroup 1031 * @param string $groupType Type of plot for dataseries 1032 * @param PHPExcel_Shared_XMLWriter $objWriter XML Writer 1033 * @param boolean &$catIsMultiLevelSeries Is category a multi-series category 1034 * @param boolean &$valIsMultiLevelSeries Is value set a multi-series set 1035 * @param string &$plotGroupingType Type of grouping for multi-series values 1036 * @param PHPExcel_Worksheet $pSheet 1037 * 1038 * @throws PHPExcel_Writer_Exception 1039 */ 1040 private function writePlotGroup($plotGroup, $groupType, $objWriter, &$catIsMultiLevelSeries, &$valIsMultiLevelSeries, &$plotGroupingType, PHPExcel_Worksheet $pSheet) 1041 { 1042 if (is_null($plotGroup)) { 1043 return; 1044 } 1045 1046 if (($groupType == PHPExcel_Chart_DataSeries::TYPE_BARCHART) || ($groupType == PHPExcel_Chart_DataSeries::TYPE_BARCHART_3D)) { 1047 $objWriter->startElement('c:barDir'); 1048 $objWriter->writeAttribute('val', $plotGroup->getPlotDirection()); 1049 $objWriter->endElement(); 1050 } 1051 1052 if (!is_null($plotGroup->getPlotGrouping())) { 1053 $plotGroupingType = $plotGroup->getPlotGrouping(); 1054 $objWriter->startElement('c:grouping'); 1055 $objWriter->writeAttribute('val', $plotGroupingType); 1056 $objWriter->endElement(); 1057 } 1058 1059 // Get these details before the loop, because we can use the count to check for varyColors 1060 $plotSeriesOrder = $plotGroup->getPlotOrder(); 1061 $plotSeriesCount = count($plotSeriesOrder); 1062 1063 if (($groupType !== PHPExcel_Chart_DataSeries::TYPE_RADARCHART) && ($groupType !== PHPExcel_Chart_DataSeries::TYPE_STOCKCHART)) { 1064 if ($groupType !== PHPExcel_Chart_DataSeries::TYPE_LINECHART) { 1065 if (($groupType == PHPExcel_Chart_DataSeries::TYPE_PIECHART) || ($groupType == PHPExcel_Chart_DataSeries::TYPE_PIECHART_3D) || ($groupType == PHPExcel_Chart_DataSeries::TYPE_DONUTCHART) || ($plotSeriesCount > 1)) { 1066 $objWriter->startElement('c:varyColors'); 1067 $objWriter->writeAttribute('val', 1); 1068 $objWriter->endElement(); 1069 } else { 1070 $objWriter->startElement('c:varyColors'); 1071 $objWriter->writeAttribute('val', 0); 1072 $objWriter->endElement(); 1073 } 1074 } 1075 } 1076 1077 foreach ($plotSeriesOrder as $plotSeriesIdx => $plotSeriesRef) { 1078 $objWriter->startElement('c:ser'); 1079 1080 $objWriter->startElement('c:idx'); 1081 $objWriter->writeAttribute('val', $this->_seriesIndex + $plotSeriesIdx); 1082 $objWriter->endElement(); 1083 1084 $objWriter->startElement('c:order'); 1085 $objWriter->writeAttribute('val', $this->_seriesIndex + $plotSeriesRef); 1086 $objWriter->endElement(); 1087 1088 if (($groupType == PHPExcel_Chart_DataSeries::TYPE_PIECHART) || ($groupType == PHPExcel_Chart_DataSeries::TYPE_PIECHART_3D) || ($groupType == PHPExcel_Chart_DataSeries::TYPE_DONUTCHART)) { 1089 $objWriter->startElement('c:dPt'); 1090 $objWriter->startElement('c:idx'); 1091 $objWriter->writeAttribute('val', 3); 1092 $objWriter->endElement(); 1093 1094 $objWriter->startElement('c:bubble3D'); 1095 $objWriter->writeAttribute('val', 0); 1096 $objWriter->endElement(); 1097 1098 $objWriter->startElement('c:spPr'); 1099 $objWriter->startElement('a:solidFill'); 1100 $objWriter->startElement('a:srgbClr'); 1101 $objWriter->writeAttribute('val', 'FF9900'); 1102 $objWriter->endElement(); 1103 $objWriter->endElement(); 1104 $objWriter->endElement(); 1105 $objWriter->endElement(); 1106 } 1107 1108 // Labels 1109 $plotSeriesLabel = $plotGroup->getPlotLabelByIndex($plotSeriesRef); 1110 if ($plotSeriesLabel && ($plotSeriesLabel->getPointCount() > 0)) { 1111 $objWriter->startElement('c:tx'); 1112 $objWriter->startElement('c:strRef'); 1113 $this->writePlotSeriesLabel($plotSeriesLabel, $objWriter); 1114 $objWriter->endElement(); 1115 $objWriter->endElement(); 1116 } 1117 1118 // Formatting for the points 1119 if (($groupType == PHPExcel_Chart_DataSeries::TYPE_LINECHART) || ($groupType == PHPExcel_Chart_DataSeries::TYPE_STOCKCHART)) { 1120 $objWriter->startElement('c:spPr'); 1121 $objWriter->startElement('a:ln'); 1122 $objWriter->writeAttribute('w', 12700); 1123 if ($groupType == PHPExcel_Chart_DataSeries::TYPE_STOCKCHART) { 1124 $objWriter->startElement('a:noFill'); 1125 $objWriter->endElement(); 1126 } 1127 $objWriter->endElement(); 1128 $objWriter->endElement(); 1129 } 1130 1131 $plotSeriesValues = $plotGroup->getPlotValuesByIndex($plotSeriesRef); 1132 if ($plotSeriesValues) { 1133 $plotSeriesMarker = $plotSeriesValues->getPointMarker(); 1134 if ($plotSeriesMarker) { 1135 $objWriter->startElement('c:marker'); 1136 $objWriter->startElement('c:symbol'); 1137 $objWriter->writeAttribute('val', $plotSeriesMarker); 1138 $objWriter->endElement(); 1139 1140 if ($plotSeriesMarker !== 'none') { 1141 $objWriter->startElement('c:size'); 1142 $objWriter->writeAttribute('val', 3); 1143 $objWriter->endElement(); 1144 } 1145 1146 $objWriter->endElement(); 1147 } 1148 } 1149 1150 if (($groupType === PHPExcel_Chart_DataSeries::TYPE_BARCHART) || ($groupType === PHPExcel_Chart_DataSeries::TYPE_BARCHART_3D) || ($groupType === PHPExcel_Chart_DataSeries::TYPE_BUBBLECHART)) { 1151 $objWriter->startElement('c:invertIfNegative'); 1152 $objWriter->writeAttribute('val', 0); 1153 $objWriter->endElement(); 1154 } 1155 1156 // Category Labels 1157 $plotSeriesCategory = $plotGroup->getPlotCategoryByIndex($plotSeriesRef); 1158 if ($plotSeriesCategory && ($plotSeriesCategory->getPointCount() > 0)) { 1159 $catIsMultiLevelSeries = $catIsMultiLevelSeries || $plotSeriesCategory->isMultiLevelSeries(); 1160 1161 if (($groupType == PHPExcel_Chart_DataSeries::TYPE_PIECHART) || ($groupType == PHPExcel_Chart_DataSeries::TYPE_PIECHART_3D) || ($groupType == PHPExcel_Chart_DataSeries::TYPE_DONUTCHART)) { 1162 if (!is_null($plotGroup->getPlotStyle())) { 1163 $plotStyle = $plotGroup->getPlotStyle(); 1164 if ($plotStyle) { 1165 $objWriter->startElement('c:explosion'); 1166 $objWriter->writeAttribute('val', 25); 1167 $objWriter->endElement(); 1168 } 1169 } 1170 } 1171 1172 if (($groupType === PHPExcel_Chart_DataSeries::TYPE_BUBBLECHART) || ($groupType === PHPExcel_Chart_DataSeries::TYPE_SCATTERCHART)) { 1173 $objWriter->startElement('c:xVal'); 1174 } else { 1175 $objWriter->startElement('c:cat'); 1176 } 1177 1178 $this->writePlotSeriesValues($plotSeriesCategory, $objWriter, $groupType, 'str', $pSheet); 1179 $objWriter->endElement(); 1180 } 1181 1182 // Values 1183 if ($plotSeriesValues) { 1184 $valIsMultiLevelSeries = $valIsMultiLevelSeries || $plotSeriesValues->isMultiLevelSeries(); 1185 1186 if (($groupType === PHPExcel_Chart_DataSeries::TYPE_BUBBLECHART) || ($groupType === PHPExcel_Chart_DataSeries::TYPE_SCATTERCHART)) { 1187 $objWriter->startElement('c:yVal'); 1188 } else { 1189 $objWriter->startElement('c:val'); 1190 } 1191 1192 $this->writePlotSeriesValues($plotSeriesValues, $objWriter, $groupType, 'num', $pSheet); 1193 $objWriter->endElement(); 1194 } 1195 1196 if ($groupType === PHPExcel_Chart_DataSeries::TYPE_BUBBLECHART) { 1197 $this->writeBubbles($plotSeriesValues, $objWriter, $pSheet); 1198 } 1199 1200 $objWriter->endElement(); 1201 } 1202 1203 $this->_seriesIndex += $plotSeriesIdx + 1; 1204 } 1205 1206 /** 1207 * Write Plot Series Label 1208 * 1209 * @param PHPExcel_Chart_DataSeriesValues $plotSeriesLabel 1210 * @param PHPExcel_Shared_XMLWriter $objWriter XML Writer 1211 * 1212 * @throws PHPExcel_Writer_Exception 1213 */ 1214 private function writePlotSeriesLabel($plotSeriesLabel, $objWriter) 1215 { 1216 if (is_null($plotSeriesLabel)) { 1217 return; 1218 } 1219 1220 $objWriter->startElement('c:f'); 1221 $objWriter->writeRawData($plotSeriesLabel->getDataSource()); 1222 $objWriter->endElement(); 1223 1224 $objWriter->startElement('c:strCache'); 1225 $objWriter->startElement('c:ptCount'); 1226 $objWriter->writeAttribute('val', $plotSeriesLabel->getPointCount()); 1227 $objWriter->endElement(); 1228 1229 foreach ($plotSeriesLabel->getDataValues() as $plotLabelKey => $plotLabelValue) { 1230 $objWriter->startElement('c:pt'); 1231 $objWriter->writeAttribute('idx', $plotLabelKey); 1232 1233 $objWriter->startElement('c:v'); 1234 $objWriter->writeRawData($plotLabelValue); 1235 $objWriter->endElement(); 1236 $objWriter->endElement(); 1237 } 1238 $objWriter->endElement(); 1239 } 1240 1241 /** 1242 * Write Plot Series Values 1243 * 1244 * @param PHPExcel_Chart_DataSeriesValues $plotSeriesValues 1245 * @param PHPExcel_Shared_XMLWriter $objWriter XML Writer 1246 * @param string $groupType Type of plot for dataseries 1247 * @param string $dataType Datatype of series values 1248 * @param PHPExcel_Worksheet $pSheet 1249 * 1250 * @throws PHPExcel_Writer_Exception 1251 */ 1252 private function writePlotSeriesValues($plotSeriesValues, $objWriter, $groupType, $dataType = 'str', PHPExcel_Worksheet $pSheet) 1253 { 1254 if (is_null($plotSeriesValues)) { 1255 return; 1256 } 1257 1258 if ($plotSeriesValues->isMultiLevelSeries()) { 1259 $levelCount = $plotSeriesValues->multiLevelCount(); 1260 1261 $objWriter->startElement('c:multiLvlStrRef'); 1262 1263 $objWriter->startElement('c:f'); 1264 $objWriter->writeRawData($plotSeriesValues->getDataSource()); 1265 $objWriter->endElement(); 1266 1267 $objWriter->startElement('c:multiLvlStrCache'); 1268 1269 $objWriter->startElement('c:ptCount'); 1270 $objWriter->writeAttribute('val', $plotSeriesValues->getPointCount()); 1271 $objWriter->endElement(); 1272 1273 for ($level = 0; $level < $levelCount; ++$level) { 1274 $objWriter->startElement('c:lvl'); 1275 1276 foreach ($plotSeriesValues->getDataValues() as $plotSeriesKey => $plotSeriesValue) { 1277 if (isset($plotSeriesValue[$level])) { 1278 $objWriter->startElement('c:pt'); 1279 $objWriter->writeAttribute('idx', $plotSeriesKey); 1280 1281 $objWriter->startElement('c:v'); 1282 $objWriter->writeRawData($plotSeriesValue[$level]); 1283 $objWriter->endElement(); 1284 $objWriter->endElement(); 1285 } 1286 } 1287 1288 $objWriter->endElement(); 1289 } 1290 1291 $objWriter->endElement(); 1292 1293 $objWriter->endElement(); 1294 } else { 1295 $objWriter->startElement('c:' . $dataType . 'Ref'); 1296 1297 $objWriter->startElement('c:f'); 1298 $objWriter->writeRawData($plotSeriesValues->getDataSource()); 1299 $objWriter->endElement(); 1300 1301 $objWriter->startElement('c:' . $dataType . 'Cache'); 1302 1303 if (($groupType != PHPExcel_Chart_DataSeries::TYPE_PIECHART) && ($groupType != PHPExcel_Chart_DataSeries::TYPE_PIECHART_3D) && ($groupType != PHPExcel_Chart_DataSeries::TYPE_DONUTCHART)) { 1304 if (($plotSeriesValues->getFormatCode() !== null) && ($plotSeriesValues->getFormatCode() !== '')) { 1305 $objWriter->startElement('c:formatCode'); 1306 $objWriter->writeRawData($plotSeriesValues->getFormatCode()); 1307 $objWriter->endElement(); 1308 } 1309 } 1310 1311 $objWriter->startElement('c:ptCount'); 1312 $objWriter->writeAttribute('val', $plotSeriesValues->getPointCount()); 1313 $objWriter->endElement(); 1314 1315 $dataValues = $plotSeriesValues->getDataValues(); 1316 if (!empty($dataValues)) { 1317 if (is_array($dataValues)) { 1318 foreach ($dataValues as $plotSeriesKey => $plotSeriesValue) { 1319 $objWriter->startElement('c:pt'); 1320 $objWriter->writeAttribute('idx', $plotSeriesKey); 1321 1322 $objWriter->startElement('c:v'); 1323 $objWriter->writeRawData($plotSeriesValue); 1324 $objWriter->endElement(); 1325 $objWriter->endElement(); 1326 } 1327 } 1328 } 1329 1330 $objWriter->endElement(); 1331 1332 $objWriter->endElement(); 1333 } 1334 } 1335 1336 /** 1337 * Write Bubble Chart Details 1338 * 1339 * @param PHPExcel_Chart_DataSeriesValues $plotSeriesValues 1340 * @param PHPExcel_Shared_XMLWriter $objWriter XML Writer 1341 * 1342 * @throws PHPExcel_Writer_Exception 1343 */ 1344 private function writeBubbles($plotSeriesValues, $objWriter, PHPExcel_Worksheet $pSheet) 1345 { 1346 if (is_null($plotSeriesValues)) { 1347 return; 1348 } 1349 1350 $objWriter->startElement('c:bubbleSize'); 1351 $objWriter->startElement('c:numLit'); 1352 1353 $objWriter->startElement('c:formatCode'); 1354 $objWriter->writeRawData('General'); 1355 $objWriter->endElement(); 1356 1357 $objWriter->startElement('c:ptCount'); 1358 $objWriter->writeAttribute('val', $plotSeriesValues->getPointCount()); 1359 $objWriter->endElement(); 1360 1361 $dataValues = $plotSeriesValues->getDataValues(); 1362 if (!empty($dataValues)) { 1363 if (is_array($dataValues)) { 1364 foreach ($dataValues as $plotSeriesKey => $plotSeriesValue) { 1365 $objWriter->startElement('c:pt'); 1366 $objWriter->writeAttribute('idx', $plotSeriesKey); 1367 $objWriter->startElement('c:v'); 1368 $objWriter->writeRawData(1); 1369 $objWriter->endElement(); 1370 $objWriter->endElement(); 1371 } 1372 } 1373 } 1374 1375 $objWriter->endElement(); 1376 $objWriter->endElement(); 1377 1378 $objWriter->startElement('c:bubble3D'); 1379 $objWriter->writeAttribute('val', 0); 1380 $objWriter->endElement(); 1381 } 1382 1383 /** 1384 * Write Layout 1385 * 1386 * @param PHPExcel_Chart_Layout $layout 1387 * @param PHPExcel_Shared_XMLWriter $objWriter XML Writer 1388 * 1389 * @throws PHPExcel_Writer_Exception 1390 */ 1391 private function writeLayout(PHPExcel_Chart_Layout $layout = null, $objWriter) 1392 { 1393 $objWriter->startElement('c:layout'); 1394 1395 if (!is_null($layout)) { 1396 $objWriter->startElement('c:manualLayout'); 1397 1398 $layoutTarget = $layout->getLayoutTarget(); 1399 if (!is_null($layoutTarget)) { 1400 $objWriter->startElement('c:layoutTarget'); 1401 $objWriter->writeAttribute('val', $layoutTarget); 1402 $objWriter->endElement(); 1403 } 1404 1405 $xMode = $layout->getXMode(); 1406 if (!is_null($xMode)) { 1407 $objWriter->startElement('c:xMode'); 1408 $objWriter->writeAttribute('val', $xMode); 1409 $objWriter->endElement(); 1410 } 1411 1412 $yMode = $layout->getYMode(); 1413 if (!is_null($yMode)) { 1414 $objWriter->startElement('c:yMode'); 1415 $objWriter->writeAttribute('val', $yMode); 1416 $objWriter->endElement(); 1417 } 1418 1419 $x = $layout->getXPosition(); 1420 if (!is_null($x)) { 1421 $objWriter->startElement('c:x'); 1422 $objWriter->writeAttribute('val', $x); 1423 $objWriter->endElement(); 1424 } 1425 1426 $y = $layout->getYPosition(); 1427 if (!is_null($y)) { 1428 $objWriter->startElement('c:y'); 1429 $objWriter->writeAttribute('val', $y); 1430 $objWriter->endElement(); 1431 } 1432 1433 $w = $layout->getWidth(); 1434 if (!is_null($w)) { 1435 $objWriter->startElement('c:w'); 1436 $objWriter->writeAttribute('val', $w); 1437 $objWriter->endElement(); 1438 } 1439 1440 $h = $layout->getHeight(); 1441 if (!is_null($h)) { 1442 $objWriter->startElement('c:h'); 1443 $objWriter->writeAttribute('val', $h); 1444 $objWriter->endElement(); 1445 } 1446 1447 $objWriter->endElement(); 1448 } 1449 1450 $objWriter->endElement(); 1451 } 1452 1453 /** 1454 * Write Alternate Content block 1455 * 1456 * @param PHPExcel_Shared_XMLWriter $objWriter XML Writer 1457 * 1458 * @throws PHPExcel_Writer_Exception 1459 */ 1460 private function writeAlternateContent($objWriter) 1461 { 1462 $objWriter->startElement('mc:AlternateContent'); 1463 $objWriter->writeAttribute('xmlns:mc', 'http://schemas.openxmlformats.org/markup-compatibility/2006'); 1464 1465 $objWriter->startElement('mc:Choice'); 1466 $objWriter->writeAttribute('xmlns:c14', 'http://schemas.microsoft.com/office/drawing/2007/8/2/chart'); 1467 $objWriter->writeAttribute('Requires', 'c14'); 1468 1469 $objWriter->startElement('c14:style'); 1470 $objWriter->writeAttribute('val', '102'); 1471 $objWriter->endElement(); 1472 $objWriter->endElement(); 1473 1474 $objWriter->startElement('mc:Fallback'); 1475 $objWriter->startElement('c:style'); 1476 $objWriter->writeAttribute('val', '2'); 1477 $objWriter->endElement(); 1478 $objWriter->endElement(); 1479 1480 $objWriter->endElement(); 1481 } 1482 1483 /** 1484 * Write Printer Settings 1485 * 1486 * @param PHPExcel_Shared_XMLWriter $objWriter XML Writer 1487 * 1488 * @throws PHPExcel_Writer_Exception 1489 */ 1490 private function writePrintSettings($objWriter) 1491 { 1492 $objWriter->startElement('c:printSettings'); 1493 1494 $objWriter->startElement('c:headerFooter'); 1495 $objWriter->endElement(); 1496 1497 $objWriter->startElement('c:pageMargins'); 1498 $objWriter->writeAttribute('footer', 0.3); 1499 $objWriter->writeAttribute('header', 0.3); 1500 $objWriter->writeAttribute('r', 0.7); 1501 $objWriter->writeAttribute('l', 0.7); 1502 $objWriter->writeAttribute('t', 0.75); 1503 $objWriter->writeAttribute('b', 0.75); 1504 $objWriter->endElement(); 1505 1506 $objWriter->startElement('c:pageSetup'); 1507 $objWriter->writeAttribute('orientation', "portrait"); 1508 $objWriter->endElement(); 1509 1510 $objWriter->endElement(); 1511 } 1512 }
title
Description
Body
title
Description
Body
title
Description
Body
title
Body
Generated: Thu Aug 11 10:00:09 2016 | Cross-referenced by PHPXref 0.7.1 |