[ Index ] |
PHP Cross Reference of moodle-2.8 |
[Summary view] [Print] [Text view]
1 <?php 2 /** 3 * PHPExcel 4 * 5 * Copyright (c) 2006 - 2014 PHPExcel 6 * 7 * This library is free software; you can redistribute it and/or 8 * modify it under the terms of the GNU Lesser General Public 9 * License as published by the Free Software Foundation; either 10 * version 2.1 of the License, or (at your option) any later version. 11 * 12 * This library is distributed in the hope that it will be useful, 13 * but WITHOUT ANY WARRANTY; without even the implied warranty of 14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 15 * Lesser General Public License for more details. 16 * 17 * You should have received a copy of the GNU Lesser General Public 18 * License along with this library; if not, write to the Free Software 19 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA 20 * 21 * @category PHPExcel 22 * @package PHPExcel_Writer_Excel2007 23 * @copyright Copyright (c) 2006 - 2014 PHPExcel (http://www.codeplex.com/PHPExcel) 24 * @license http://www.gnu.org/licenses/old-licenses/lgpl-2.1.txt LGPL 25 * @version ##VERSION##, ##DATE## 26 */ 27 28 29 /** 30 * PHPExcel_Writer_Excel2007_Chart 31 * 32 * @category PHPExcel 33 * @package PHPExcel_Writer_Excel2007 34 * @copyright Copyright (c) 2006 - 2014 PHPExcel (http://www.codeplex.com/PHPExcel) 35 */ 36 class PHPExcel_Writer_Excel2007_Chart extends PHPExcel_Writer_Excel2007_WriterPart 37 { 38 /** 39 * Write charts to XML format 40 * 41 * @param PHPExcel_Chart $pChart 42 * @return string XML Output 43 * @throws PHPExcel_Writer_Exception 44 */ 45 public function writeChart(PHPExcel_Chart $pChart = null) 46 { 47 // Create XML writer 48 $objWriter = null; 49 if ($this->getParentWriter()->getUseDiskCaching()) { 50 $objWriter = new PHPExcel_Shared_XMLWriter(PHPExcel_Shared_XMLWriter::STORAGE_DISK, $this->getParentWriter()->getDiskCachingDirectory()); 51 } else { 52 $objWriter = new PHPExcel_Shared_XMLWriter(PHPExcel_Shared_XMLWriter::STORAGE_MEMORY); 53 } 54 // Ensure that data series values are up-to-date before we save 55 $pChart->refresh(); 56 57 // XML header 58 $objWriter->startDocument('1.0','UTF-8','yes'); 59 60 // c:chartSpace 61 $objWriter->startElement('c:chartSpace'); 62 $objWriter->writeAttribute('xmlns:c', 'http://schemas.openxmlformats.org/drawingml/2006/chart'); 63 $objWriter->writeAttribute('xmlns:a', 'http://schemas.openxmlformats.org/drawingml/2006/main'); 64 $objWriter->writeAttribute('xmlns:r', 'http://schemas.openxmlformats.org/officeDocument/2006/relationships'); 65 66 $objWriter->startElement('c:date1904'); 67 $objWriter->writeAttribute('val', 0); 68 $objWriter->endElement(); 69 $objWriter->startElement('c:lang'); 70 $objWriter->writeAttribute('val', "en-GB"); 71 $objWriter->endElement(); 72 $objWriter->startElement('c:roundedCorners'); 73 $objWriter->writeAttribute('val', 0); 74 $objWriter->endElement(); 75 76 $this->_writeAlternateContent($objWriter); 77 78 $objWriter->startElement('c:chart'); 79 80 $this->_writeTitle($pChart->getTitle(), $objWriter); 81 82 $objWriter->startElement('c:autoTitleDeleted'); 83 $objWriter->writeAttribute('val', 0); 84 $objWriter->endElement(); 85 86 $this->_writePlotArea($pChart->getPlotArea(), 87 $pChart->getXAxisLabel(), 88 $pChart->getYAxisLabel(), 89 $objWriter, 90 $pChart->getWorksheet() 91 ); 92 93 $this->_writeLegend($pChart->getLegend(), $objWriter); 94 95 96 $objWriter->startElement('c:plotVisOnly'); 97 $objWriter->writeAttribute('val', 1); 98 $objWriter->endElement(); 99 100 $objWriter->startElement('c:dispBlanksAs'); 101 $objWriter->writeAttribute('val', "gap"); 102 $objWriter->endElement(); 103 104 $objWriter->startElement('c:showDLblsOverMax'); 105 $objWriter->writeAttribute('val', 0); 106 $objWriter->endElement(); 107 108 $objWriter->endElement(); 109 110 $this->_writePrintSettings($objWriter); 111 112 $objWriter->endElement(); 113 114 // Return 115 return $objWriter->getData(); 116 } 117 118 /** 119 * Write Chart Title 120 * 121 * @param PHPExcel_Chart_Title $title 122 * @param PHPExcel_Shared_XMLWriter $objWriter XML Writer 123 * @throws PHPExcel_Writer_Exception 124 */ 125 private function _writeTitle(PHPExcel_Chart_Title $title = null, $objWriter) 126 { 127 if (is_null($title)) { 128 return; 129 } 130 131 $objWriter->startElement('c:title'); 132 $objWriter->startElement('c:tx'); 133 $objWriter->startElement('c:rich'); 134 135 $objWriter->startElement('a:bodyPr'); 136 $objWriter->endElement(); 137 138 $objWriter->startElement('a:lstStyle'); 139 $objWriter->endElement(); 140 141 $objWriter->startElement('a:p'); 142 143 $caption = $title->getCaption(); 144 if ((is_array($caption)) && (count($caption) > 0)) 145 $caption = $caption[0]; 146 $this->getParentWriter()->getWriterPart('stringtable')->writeRichTextForCharts($objWriter, $caption, 'a'); 147 148 $objWriter->endElement(); 149 $objWriter->endElement(); 150 $objWriter->endElement(); 151 152 $layout = $title->getLayout(); 153 $this->_writeLayout($layout, $objWriter); 154 155 $objWriter->startElement('c:overlay'); 156 $objWriter->writeAttribute('val', 0); 157 $objWriter->endElement(); 158 159 $objWriter->endElement(); 160 } 161 162 /** 163 * Write Chart Legend 164 * 165 * @param PHPExcel_Chart_Legend $legend 166 * @param PHPExcel_Shared_XMLWriter $objWriter XML Writer 167 * @throws PHPExcel_Writer_Exception 168 */ 169 private function _writeLegend(PHPExcel_Chart_Legend $legend = null, $objWriter) 170 { 171 if (is_null($legend)) { 172 return; 173 } 174 175 $objWriter->startElement('c:legend'); 176 177 $objWriter->startElement('c:legendPos'); 178 $objWriter->writeAttribute('val', $legend->getPosition()); 179 $objWriter->endElement(); 180 181 $layout = $legend->getLayout(); 182 $this->_writeLayout($layout, $objWriter); 183 184 $objWriter->startElement('c:overlay'); 185 $objWriter->writeAttribute('val', ($legend->getOverlay()) ? '1' : '0'); 186 $objWriter->endElement(); 187 188 $objWriter->startElement('c:txPr'); 189 $objWriter->startElement('a:bodyPr'); 190 $objWriter->endElement(); 191 192 $objWriter->startElement('a:lstStyle'); 193 $objWriter->endElement(); 194 195 $objWriter->startElement('a:p'); 196 $objWriter->startElement('a:pPr'); 197 $objWriter->writeAttribute('rtl', 0); 198 199 $objWriter->startElement('a:defRPr'); 200 $objWriter->endElement(); 201 $objWriter->endElement(); 202 203 $objWriter->startElement('a:endParaRPr'); 204 $objWriter->writeAttribute('lang', "en-US"); 205 $objWriter->endElement(); 206 207 $objWriter->endElement(); 208 $objWriter->endElement(); 209 210 $objWriter->endElement(); 211 } 212 213 /** 214 * Write Chart Plot Area 215 * 216 * @param PHPExcel_Chart_PlotArea $plotArea 217 * @param PHPExcel_Chart_Title $xAxisLabel 218 * @param PHPExcel_Chart_Title $yAxisLabel 219 * @param PHPExcel_Shared_XMLWriter $objWriter XML Writer 220 * @throws PHPExcel_Writer_Exception 221 */ 222 private function _writePlotArea(PHPExcel_Chart_PlotArea $plotArea, 223 PHPExcel_Chart_Title $xAxisLabel = NULL, 224 PHPExcel_Chart_Title $yAxisLabel = NULL, 225 $objWriter, 226 PHPExcel_Worksheet $pSheet) 227 { 228 if (is_null($plotArea)) { 229 return; 230 } 231 232 $id1 = $id2 = 0; 233 $this->_seriesIndex = 0; 234 $objWriter->startElement('c:plotArea'); 235 236 $layout = $plotArea->getLayout(); 237 238 $this->_writeLayout($layout, $objWriter); 239 240 $chartTypes = self::_getChartType($plotArea); 241 $catIsMultiLevelSeries = $valIsMultiLevelSeries = FALSE; 242 $plotGroupingType = ''; 243 foreach($chartTypes as $chartType) { 244 $objWriter->startElement('c:'.$chartType); 245 246 $groupCount = $plotArea->getPlotGroupCount(); 247 for($i = 0; $i < $groupCount; ++$i) { 248 $plotGroup = $plotArea->getPlotGroupByIndex($i); 249 $groupType = $plotGroup->getPlotType(); 250 if ($groupType == $chartType) { 251 252 $plotStyle = $plotGroup->getPlotStyle(); 253 if ($groupType === PHPExcel_Chart_DataSeries::TYPE_RADARCHART) { 254 $objWriter->startElement('c:radarStyle'); 255 $objWriter->writeAttribute('val', $plotStyle ); 256 $objWriter->endElement(); 257 } elseif ($groupType === PHPExcel_Chart_DataSeries::TYPE_SCATTERCHART) { 258 $objWriter->startElement('c:scatterStyle'); 259 $objWriter->writeAttribute('val', $plotStyle ); 260 $objWriter->endElement(); 261 } 262 263 $this->_writePlotGroup($plotGroup, $chartType, $objWriter, $catIsMultiLevelSeries, $valIsMultiLevelSeries, $plotGroupingType, $pSheet); 264 } 265 } 266 267 $this->_writeDataLbls($objWriter, $layout); 268 269 if ($chartType === PHPExcel_Chart_DataSeries::TYPE_LINECHART) { 270 // Line only, Line3D can't be smoothed 271 272 $objWriter->startElement('c:smooth'); 273 $objWriter->writeAttribute('val', (integer) $plotGroup->getSmoothLine() ); 274 $objWriter->endElement(); 275 } elseif (($chartType === PHPExcel_Chart_DataSeries::TYPE_BARCHART) || 276 ($chartType === PHPExcel_Chart_DataSeries::TYPE_BARCHART_3D)) { 277 278 $objWriter->startElement('c:gapWidth'); 279 $objWriter->writeAttribute('val', 150 ); 280 $objWriter->endElement(); 281 282 if ($plotGroupingType == 'percentStacked' || 283 $plotGroupingType == 'stacked') { 284 285 $objWriter->startElement('c:overlap'); 286 $objWriter->writeAttribute('val', 100 ); 287 $objWriter->endElement(); 288 } 289 } elseif ($chartType === PHPExcel_Chart_DataSeries::TYPE_BUBBLECHART) { 290 291 $objWriter->startElement('c:bubbleScale'); 292 $objWriter->writeAttribute('val', 25 ); 293 $objWriter->endElement(); 294 295 $objWriter->startElement('c:showNegBubbles'); 296 $objWriter->writeAttribute('val', 0 ); 297 $objWriter->endElement(); 298 } elseif ($chartType === PHPExcel_Chart_DataSeries::TYPE_STOCKCHART) { 299 300 $objWriter->startElement('c:hiLowLines'); 301 $objWriter->endElement(); 302 303 $objWriter->startElement( 'c:upDownBars' ); 304 305 $objWriter->startElement( 'c:gapWidth' ); 306 $objWriter->writeAttribute('val', 300); 307 $objWriter->endElement(); 308 309 $objWriter->startElement( 'c:upBars' ); 310 $objWriter->endElement(); 311 312 $objWriter->startElement( 'c:downBars' ); 313 $objWriter->endElement(); 314 315 $objWriter->endElement(); 316 } 317 318 // Generate 2 unique numbers to use for axId values 319 // $id1 = $id2 = rand(10000000,99999999); 320 // do { 321 // $id2 = rand(10000000,99999999); 322 // } while ($id1 == $id2); 323 $id1 = '75091328'; 324 $id2 = '75089408'; 325 326 if (($chartType !== PHPExcel_Chart_DataSeries::TYPE_PIECHART) && 327 ($chartType !== PHPExcel_Chart_DataSeries::TYPE_PIECHART_3D) && 328 ($chartType !== PHPExcel_Chart_DataSeries::TYPE_DONUTCHART)) { 329 330 $objWriter->startElement('c:axId'); 331 $objWriter->writeAttribute('val', $id1 ); 332 $objWriter->endElement(); 333 $objWriter->startElement('c:axId'); 334 $objWriter->writeAttribute('val', $id2 ); 335 $objWriter->endElement(); 336 } else { 337 $objWriter->startElement('c:firstSliceAng'); 338 $objWriter->writeAttribute('val', 0); 339 $objWriter->endElement(); 340 341 if ($chartType === PHPExcel_Chart_DataSeries::TYPE_DONUTCHART) { 342 343 $objWriter->startElement('c:holeSize'); 344 $objWriter->writeAttribute('val', 50); 345 $objWriter->endElement(); 346 } 347 } 348 349 $objWriter->endElement(); 350 } 351 352 if (($chartType !== PHPExcel_Chart_DataSeries::TYPE_PIECHART) && 353 ($chartType !== PHPExcel_Chart_DataSeries::TYPE_PIECHART_3D) && 354 ($chartType !== PHPExcel_Chart_DataSeries::TYPE_DONUTCHART)) { 355 356 if ($chartType === PHPExcel_Chart_DataSeries::TYPE_BUBBLECHART) { 357 $this->_writeValAx($objWriter,$plotArea,$xAxisLabel,$chartType,$id1,$id2,$catIsMultiLevelSeries); 358 } else { 359 $this->_writeCatAx($objWriter,$plotArea,$xAxisLabel,$chartType,$id1,$id2,$catIsMultiLevelSeries); 360 } 361 362 $this->_writeValAx($objWriter,$plotArea,$yAxisLabel,$chartType,$id1,$id2,$valIsMultiLevelSeries); 363 } 364 365 $objWriter->endElement(); 366 } 367 368 /** 369 * Write Data Labels 370 * 371 * @param PHPExcel_Shared_XMLWriter $objWriter XML Writer 372 * @param PHPExcel_Chart_Layout $chartLayout Chart layout 373 * @throws PHPExcel_Writer_Exception 374 */ 375 private function _writeDataLbls($objWriter, $chartLayout) 376 { 377 $objWriter->startElement('c:dLbls'); 378 379 $objWriter->startElement('c:showLegendKey'); 380 $showLegendKey = (empty($chartLayout)) ? 0 : $chartLayout->getShowLegendKey(); 381 $objWriter->writeAttribute('val', ((empty($showLegendKey)) ? 0 : 1) ); 382 $objWriter->endElement(); 383 384 385 $objWriter->startElement('c:showVal'); 386 $showVal = (empty($chartLayout)) ? 0 : $chartLayout->getShowVal(); 387 $objWriter->writeAttribute('val', ((empty($showVal)) ? 0 : 1) ); 388 $objWriter->endElement(); 389 390 $objWriter->startElement('c:showCatName'); 391 $showCatName = (empty($chartLayout)) ? 0 : $chartLayout->getShowCatName(); 392 $objWriter->writeAttribute('val', ((empty($showCatName)) ? 0 : 1) ); 393 $objWriter->endElement(); 394 395 $objWriter->startElement('c:showSerName'); 396 $showSerName = (empty($chartLayout)) ? 0 : $chartLayout->getShowSerName(); 397 $objWriter->writeAttribute('val', ((empty($showSerName)) ? 0 : 1) ); 398 $objWriter->endElement(); 399 400 $objWriter->startElement('c:showPercent'); 401 $showPercent = (empty($chartLayout)) ? 0 : $chartLayout->getShowPercent(); 402 $objWriter->writeAttribute('val', ((empty($showPercent)) ? 0 : 1) ); 403 $objWriter->endElement(); 404 405 $objWriter->startElement('c:showBubbleSize'); 406 $showBubbleSize = (empty($chartLayout)) ? 0 : $chartLayout->getShowBubbleSize(); 407 $objWriter->writeAttribute('val', ((empty($showBubbleSize)) ? 0 : 1) ); 408 $objWriter->endElement(); 409 410 $objWriter->startElement('c:showLeaderLines'); 411 $showLeaderLines = (empty($chartLayout)) ? 1 : $chartLayout->getShowLeaderLines(); 412 $objWriter->writeAttribute('val', ((empty($showLeaderLines)) ? 0 : 1) ); 413 $objWriter->endElement(); 414 415 $objWriter->endElement(); 416 } 417 418 /** 419 * Write Category Axis 420 * 421 * @param PHPExcel_Shared_XMLWriter $objWriter XML Writer 422 * @param PHPExcel_Chart_PlotArea $plotArea 423 * @param PHPExcel_Chart_Title $xAxisLabel 424 * @param string $groupType Chart type 425 * @param string $id1 426 * @param string $id2 427 * @param boolean $isMultiLevelSeries 428 * @throws PHPExcel_Writer_Exception 429 */ 430 private function _writeCatAx($objWriter, PHPExcel_Chart_PlotArea $plotArea, $xAxisLabel, $groupType, $id1, $id2, $isMultiLevelSeries) 431 { 432 $objWriter->startElement('c:catAx'); 433 434 if ($id1 > 0) { 435 $objWriter->startElement('c:axId'); 436 $objWriter->writeAttribute('val', $id1); 437 $objWriter->endElement(); 438 } 439 440 $objWriter->startElement('c:scaling'); 441 $objWriter->startElement('c:orientation'); 442 $objWriter->writeAttribute('val', "minMax"); 443 $objWriter->endElement(); 444 $objWriter->endElement(); 445 446 $objWriter->startElement('c:delete'); 447 $objWriter->writeAttribute('val', 0); 448 $objWriter->endElement(); 449 450 $objWriter->startElement('c:axPos'); 451 $objWriter->writeAttribute('val', "b"); 452 $objWriter->endElement(); 453 454 if (!is_null($xAxisLabel)) { 455 $objWriter->startElement('c:title'); 456 $objWriter->startElement('c:tx'); 457 $objWriter->startElement('c:rich'); 458 459 $objWriter->startElement('a:bodyPr'); 460 $objWriter->endElement(); 461 462 $objWriter->startElement('a:lstStyle'); 463 $objWriter->endElement(); 464 465 $objWriter->startElement('a:p'); 466 $objWriter->startElement('a:r'); 467 468 $caption = $xAxisLabel->getCaption(); 469 if (is_array($caption)) 470 $caption = $caption[0]; 471 $objWriter->startElement('a:t'); 472 // $objWriter->writeAttribute('xml:space', 'preserve'); 473 $objWriter->writeRawData(PHPExcel_Shared_String::ControlCharacterPHP2OOXML( $caption )); 474 $objWriter->endElement(); 475 476 $objWriter->endElement(); 477 $objWriter->endElement(); 478 $objWriter->endElement(); 479 $objWriter->endElement(); 480 481 $layout = $xAxisLabel->getLayout(); 482 $this->_writeLayout($layout, $objWriter); 483 484 $objWriter->startElement('c:overlay'); 485 $objWriter->writeAttribute('val', 0); 486 $objWriter->endElement(); 487 488 $objWriter->endElement(); 489 490 } 491 492 $objWriter->startElement('c:numFmt'); 493 $objWriter->writeAttribute('formatCode', "General"); 494 $objWriter->writeAttribute('sourceLinked', 1); 495 $objWriter->endElement(); 496 497 $objWriter->startElement('c:majorTickMark'); 498 $objWriter->writeAttribute('val', "out"); 499 $objWriter->endElement(); 500 501 $objWriter->startElement('c:minorTickMark'); 502 $objWriter->writeAttribute('val', "none"); 503 $objWriter->endElement(); 504 505 $objWriter->startElement('c:tickLblPos'); 506 $objWriter->writeAttribute('val', "nextTo"); 507 $objWriter->endElement(); 508 509 if ($id2 > 0) { 510 $objWriter->startElement('c:crossAx'); 511 $objWriter->writeAttribute('val', $id2); 512 $objWriter->endElement(); 513 514 $objWriter->startElement('c:crosses'); 515 $objWriter->writeAttribute('val', "autoZero"); 516 $objWriter->endElement(); 517 } 518 519 $objWriter->startElement('c:auto'); 520 $objWriter->writeAttribute('val', 1); 521 $objWriter->endElement(); 522 523 $objWriter->startElement('c:lblAlgn'); 524 $objWriter->writeAttribute('val', "ctr"); 525 $objWriter->endElement(); 526 527 $objWriter->startElement('c:lblOffset'); 528 $objWriter->writeAttribute('val', 100); 529 $objWriter->endElement(); 530 531 if ($isMultiLevelSeries) { 532 $objWriter->startElement('c:noMultiLvlLbl'); 533 $objWriter->writeAttribute('val', 0); 534 $objWriter->endElement(); 535 } 536 $objWriter->endElement(); 537 538 } 539 540 541 /** 542 * Write Value Axis 543 * 544 * @param PHPExcel_Shared_XMLWriter $objWriter XML Writer 545 * @param PHPExcel_Chart_PlotArea $plotArea 546 * @param PHPExcel_Chart_Title $yAxisLabel 547 * @param string $groupType Chart type 548 * @param string $id1 549 * @param string $id2 550 * @param boolean $isMultiLevelSeries 551 * @throws PHPExcel_Writer_Exception 552 */ 553 private function _writeValAx($objWriter, PHPExcel_Chart_PlotArea $plotArea, $yAxisLabel, $groupType, $id1, $id2, $isMultiLevelSeries) 554 { 555 $objWriter->startElement('c:valAx'); 556 557 if ($id2 > 0) { 558 $objWriter->startElement('c:axId'); 559 $objWriter->writeAttribute('val', $id2); 560 $objWriter->endElement(); 561 } 562 563 $objWriter->startElement('c:scaling'); 564 $objWriter->startElement('c:orientation'); 565 $objWriter->writeAttribute('val', "minMax"); 566 $objWriter->endElement(); 567 $objWriter->endElement(); 568 569 $objWriter->startElement('c:delete'); 570 $objWriter->writeAttribute('val', 0); 571 $objWriter->endElement(); 572 573 $objWriter->startElement('c:axPos'); 574 $objWriter->writeAttribute('val', "l"); 575 $objWriter->endElement(); 576 577 $objWriter->startElement('c:majorGridlines'); 578 $objWriter->endElement(); 579 580 if (!is_null($yAxisLabel)) { 581 $objWriter->startElement('c:title'); 582 $objWriter->startElement('c:tx'); 583 $objWriter->startElement('c:rich'); 584 585 $objWriter->startElement('a:bodyPr'); 586 $objWriter->endElement(); 587 588 $objWriter->startElement('a:lstStyle'); 589 $objWriter->endElement(); 590 591 $objWriter->startElement('a:p'); 592 $objWriter->startElement('a:r'); 593 594 $caption = $yAxisLabel->getCaption(); 595 if (is_array($caption)) 596 $caption = $caption[0]; 597 $objWriter->startElement('a:t'); 598 // $objWriter->writeAttribute('xml:space', 'preserve'); 599 $objWriter->writeRawData(PHPExcel_Shared_String::ControlCharacterPHP2OOXML( $caption )); 600 $objWriter->endElement(); 601 602 $objWriter->endElement(); 603 $objWriter->endElement(); 604 $objWriter->endElement(); 605 $objWriter->endElement(); 606 607 if ($groupType !== PHPExcel_Chart_DataSeries::TYPE_BUBBLECHART) { 608 $layout = $yAxisLabel->getLayout(); 609 $this->_writeLayout($layout, $objWriter); 610 } 611 612 $objWriter->startElement('c:overlay'); 613 $objWriter->writeAttribute('val', 0); 614 $objWriter->endElement(); 615 616 $objWriter->endElement(); 617 } 618 619 $objWriter->startElement('c:numFmt'); 620 $objWriter->writeAttribute('formatCode', "General"); 621 $objWriter->writeAttribute('sourceLinked', 1); 622 $objWriter->endElement(); 623 624 $objWriter->startElement('c:majorTickMark'); 625 $objWriter->writeAttribute('val', "out"); 626 $objWriter->endElement(); 627 628 $objWriter->startElement('c:minorTickMark'); 629 $objWriter->writeAttribute('val', "none"); 630 $objWriter->endElement(); 631 632 $objWriter->startElement('c:tickLblPos'); 633 $objWriter->writeAttribute('val', "nextTo"); 634 $objWriter->endElement(); 635 636 if ($id1 > 0) { 637 $objWriter->startElement('c:crossAx'); 638 $objWriter->writeAttribute('val', $id2); 639 $objWriter->endElement(); 640 641 $objWriter->startElement('c:crosses'); 642 $objWriter->writeAttribute('val', "autoZero"); 643 $objWriter->endElement(); 644 645 $objWriter->startElement('c:crossBetween'); 646 $objWriter->writeAttribute('val', "midCat"); 647 $objWriter->endElement(); 648 } 649 650 if ($isMultiLevelSeries) { 651 if ($groupType !== PHPExcel_Chart_DataSeries::TYPE_BUBBLECHART) { 652 $objWriter->startElement('c:noMultiLvlLbl'); 653 $objWriter->writeAttribute('val', 0); 654 $objWriter->endElement(); 655 } 656 } 657 $objWriter->endElement(); 658 659 } 660 661 662 /** 663 * Get the data series type(s) for a chart plot series 664 * 665 * @param PHPExcel_Chart_PlotArea $plotArea 666 * @return string|array 667 * @throws PHPExcel_Writer_Exception 668 */ 669 private static function _getChartType($plotArea) 670 { 671 $groupCount = $plotArea->getPlotGroupCount(); 672 673 if ($groupCount == 1) { 674 $chartType = array($plotArea->getPlotGroupByIndex(0)->getPlotType()); 675 } else { 676 $chartTypes = array(); 677 for($i = 0; $i < $groupCount; ++$i) { 678 $chartTypes[] = $plotArea->getPlotGroupByIndex($i)->getPlotType(); 679 } 680 $chartType = array_unique($chartTypes); 681 if (count($chartTypes) == 0) { 682 throw new PHPExcel_Writer_Exception('Chart is not yet implemented'); 683 } 684 } 685 686 return $chartType; 687 } 688 689 /** 690 * Write Plot Group (series of related plots) 691 * 692 * @param PHPExcel_Chart_DataSeries $plotGroup 693 * @param string $groupType Type of plot for dataseries 694 * @param PHPExcel_Shared_XMLWriter $objWriter XML Writer 695 * @param boolean &$catIsMultiLevelSeries Is category a multi-series category 696 * @param boolean &$valIsMultiLevelSeries Is value set a multi-series set 697 * @param string &$plotGroupingType Type of grouping for multi-series values 698 * @param PHPExcel_Worksheet $pSheet 699 * @throws PHPExcel_Writer_Exception 700 */ 701 private function _writePlotGroup( $plotGroup, 702 $groupType, 703 $objWriter, 704 &$catIsMultiLevelSeries, 705 &$valIsMultiLevelSeries, 706 &$plotGroupingType, 707 PHPExcel_Worksheet $pSheet 708 ) 709 { 710 if (is_null($plotGroup)) { 711 return; 712 } 713 714 if (($groupType == PHPExcel_Chart_DataSeries::TYPE_BARCHART) || 715 ($groupType == PHPExcel_Chart_DataSeries::TYPE_BARCHART_3D)) { 716 $objWriter->startElement('c:barDir'); 717 $objWriter->writeAttribute('val', $plotGroup->getPlotDirection()); 718 $objWriter->endElement(); 719 } 720 721 if (!is_null($plotGroup->getPlotGrouping())) { 722 $plotGroupingType = $plotGroup->getPlotGrouping(); 723 $objWriter->startElement('c:grouping'); 724 $objWriter->writeAttribute('val', $plotGroupingType); 725 $objWriter->endElement(); 726 } 727 728 // Get these details before the loop, because we can use the count to check for varyColors 729 $plotSeriesOrder = $plotGroup->getPlotOrder(); 730 $plotSeriesCount = count($plotSeriesOrder); 731 732 if (($groupType !== PHPExcel_Chart_DataSeries::TYPE_RADARCHART) && 733 ($groupType !== PHPExcel_Chart_DataSeries::TYPE_STOCKCHART)) { 734 735 if ($groupType !== PHPExcel_Chart_DataSeries::TYPE_LINECHART) { 736 if (($groupType == PHPExcel_Chart_DataSeries::TYPE_PIECHART) || 737 ($groupType == PHPExcel_Chart_DataSeries::TYPE_PIECHART_3D) || 738 ($groupType == PHPExcel_Chart_DataSeries::TYPE_DONUTCHART) || 739 ($plotSeriesCount > 1)) { 740 $objWriter->startElement('c:varyColors'); 741 $objWriter->writeAttribute('val', 1); 742 $objWriter->endElement(); 743 } else { 744 $objWriter->startElement('c:varyColors'); 745 $objWriter->writeAttribute('val', 0); 746 $objWriter->endElement(); 747 } 748 } 749 } 750 751 foreach($plotSeriesOrder as $plotSeriesIdx => $plotSeriesRef) { 752 $objWriter->startElement('c:ser'); 753 754 $objWriter->startElement('c:idx'); 755 $objWriter->writeAttribute('val', $this->_seriesIndex + $plotSeriesIdx); 756 $objWriter->endElement(); 757 758 $objWriter->startElement('c:order'); 759 $objWriter->writeAttribute('val', $this->_seriesIndex + $plotSeriesRef); 760 $objWriter->endElement(); 761 762 if (($groupType == PHPExcel_Chart_DataSeries::TYPE_PIECHART) || 763 ($groupType == PHPExcel_Chart_DataSeries::TYPE_PIECHART_3D) || 764 ($groupType == PHPExcel_Chart_DataSeries::TYPE_DONUTCHART)) { 765 766 $objWriter->startElement('c:dPt'); 767 $objWriter->startElement('c:idx'); 768 $objWriter->writeAttribute('val', 3); 769 $objWriter->endElement(); 770 771 $objWriter->startElement('c:bubble3D'); 772 $objWriter->writeAttribute('val', 0); 773 $objWriter->endElement(); 774 775 $objWriter->startElement('c:spPr'); 776 $objWriter->startElement('a:solidFill'); 777 $objWriter->startElement('a:srgbClr'); 778 $objWriter->writeAttribute('val', 'FF9900'); 779 $objWriter->endElement(); 780 $objWriter->endElement(); 781 $objWriter->endElement(); 782 $objWriter->endElement(); 783 } 784 785 // Labels 786 $plotSeriesLabel = $plotGroup->getPlotLabelByIndex($plotSeriesRef); 787 if ($plotSeriesLabel && ($plotSeriesLabel->getPointCount() > 0)) { 788 $objWriter->startElement('c:tx'); 789 $objWriter->startElement('c:strRef'); 790 $this->_writePlotSeriesLabel($plotSeriesLabel, $objWriter); 791 $objWriter->endElement(); 792 $objWriter->endElement(); 793 } 794 795 // Formatting for the points 796 if (($groupType == PHPExcel_Chart_DataSeries::TYPE_LINECHART) || 797 ($groupType == PHPExcel_Chart_DataSeries::TYPE_STOCKCHART)) { 798 $objWriter->startElement('c:spPr'); 799 $objWriter->startElement('a:ln'); 800 $objWriter->writeAttribute('w', 12700); 801 if ($groupType == PHPExcel_Chart_DataSeries::TYPE_STOCKCHART) { 802 $objWriter->startElement('a:noFill'); 803 $objWriter->endElement(); 804 } 805 $objWriter->endElement(); 806 $objWriter->endElement(); 807 } 808 809 $plotSeriesValues = $plotGroup->getPlotValuesByIndex($plotSeriesRef); 810 if ($plotSeriesValues) { 811 $plotSeriesMarker = $plotSeriesValues->getPointMarker(); 812 if ($plotSeriesMarker) { 813 $objWriter->startElement('c:marker'); 814 $objWriter->startElement('c:symbol'); 815 $objWriter->writeAttribute('val', $plotSeriesMarker); 816 $objWriter->endElement(); 817 818 if ($plotSeriesMarker !== 'none') { 819 $objWriter->startElement('c:size'); 820 $objWriter->writeAttribute('val', 3); 821 $objWriter->endElement(); 822 } 823 $objWriter->endElement(); 824 } 825 } 826 827 if (($groupType === PHPExcel_Chart_DataSeries::TYPE_BARCHART) || 828 ($groupType === PHPExcel_Chart_DataSeries::TYPE_BARCHART_3D) || 829 ($groupType === PHPExcel_Chart_DataSeries::TYPE_BUBBLECHART)) { 830 831 $objWriter->startElement('c:invertIfNegative'); 832 $objWriter->writeAttribute('val', 0); 833 $objWriter->endElement(); 834 } 835 836 // Category Labels 837 $plotSeriesCategory = $plotGroup->getPlotCategoryByIndex($plotSeriesRef); 838 if ($plotSeriesCategory && ($plotSeriesCategory->getPointCount() > 0)) { 839 $catIsMultiLevelSeries = $catIsMultiLevelSeries || $plotSeriesCategory->isMultiLevelSeries(); 840 841 if (($groupType == PHPExcel_Chart_DataSeries::TYPE_PIECHART) || 842 ($groupType == PHPExcel_Chart_DataSeries::TYPE_PIECHART_3D) || 843 ($groupType == PHPExcel_Chart_DataSeries::TYPE_DONUTCHART)) { 844 845 if (!is_null($plotGroup->getPlotStyle())) { 846 $plotStyle = $plotGroup->getPlotStyle(); 847 if ($plotStyle) { 848 $objWriter->startElement('c:explosion'); 849 $objWriter->writeAttribute('val', 25); 850 $objWriter->endElement(); 851 } 852 } 853 } 854 855 if (($groupType === PHPExcel_Chart_DataSeries::TYPE_BUBBLECHART) || 856 ($groupType === PHPExcel_Chart_DataSeries::TYPE_SCATTERCHART)) { 857 $objWriter->startElement('c:xVal'); 858 } else { 859 $objWriter->startElement('c:cat'); 860 } 861 862 $this->_writePlotSeriesValues($plotSeriesCategory, $objWriter, $groupType, 'str', $pSheet); 863 $objWriter->endElement(); 864 } 865 866 // Values 867 if ($plotSeriesValues) { 868 $valIsMultiLevelSeries = $valIsMultiLevelSeries || $plotSeriesValues->isMultiLevelSeries(); 869 870 if (($groupType === PHPExcel_Chart_DataSeries::TYPE_BUBBLECHART) || 871 ($groupType === PHPExcel_Chart_DataSeries::TYPE_SCATTERCHART)) { 872 $objWriter->startElement('c:yVal'); 873 } else { 874 $objWriter->startElement('c:val'); 875 } 876 877 $this->_writePlotSeriesValues($plotSeriesValues, $objWriter, $groupType, 'num', $pSheet); 878 $objWriter->endElement(); 879 } 880 881 if ($groupType === PHPExcel_Chart_DataSeries::TYPE_BUBBLECHART) { 882 $this->_writeBubbles($plotSeriesValues, $objWriter, $pSheet); 883 } 884 885 $objWriter->endElement(); 886 887 } 888 889 $this->_seriesIndex += $plotSeriesIdx + 1; 890 } 891 892 /** 893 * Write Plot Series Label 894 * 895 * @param PHPExcel_Chart_DataSeriesValues $plotSeriesLabel 896 * @param PHPExcel_Shared_XMLWriter $objWriter XML Writer 897 * @throws PHPExcel_Writer_Exception 898 */ 899 private function _writePlotSeriesLabel($plotSeriesLabel, $objWriter) 900 { 901 if (is_null($plotSeriesLabel)) { 902 return; 903 } 904 905 $objWriter->startElement('c:f'); 906 $objWriter->writeRawData($plotSeriesLabel->getDataSource()); 907 $objWriter->endElement(); 908 909 $objWriter->startElement('c:strCache'); 910 $objWriter->startElement('c:ptCount'); 911 $objWriter->writeAttribute('val', $plotSeriesLabel->getPointCount() ); 912 $objWriter->endElement(); 913 914 foreach($plotSeriesLabel->getDataValues() as $plotLabelKey => $plotLabelValue) { 915 $objWriter->startElement('c:pt'); 916 $objWriter->writeAttribute('idx', $plotLabelKey ); 917 918 $objWriter->startElement('c:v'); 919 $objWriter->writeRawData( $plotLabelValue ); 920 $objWriter->endElement(); 921 $objWriter->endElement(); 922 } 923 $objWriter->endElement(); 924 925 } 926 927 /** 928 * Write Plot Series Values 929 * 930 * @param PHPExcel_Chart_DataSeriesValues $plotSeriesValues 931 * @param PHPExcel_Shared_XMLWriter $objWriter XML Writer 932 * @param string $groupType Type of plot for dataseries 933 * @param string $dataType Datatype of series values 934 * @param PHPExcel_Worksheet $pSheet 935 * @throws PHPExcel_Writer_Exception 936 */ 937 private function _writePlotSeriesValues( $plotSeriesValues, 938 $objWriter, 939 $groupType, 940 $dataType='str', 941 PHPExcel_Worksheet $pSheet 942 ) 943 { 944 if (is_null($plotSeriesValues)) { 945 return; 946 } 947 948 if ($plotSeriesValues->isMultiLevelSeries()) { 949 $levelCount = $plotSeriesValues->multiLevelCount(); 950 951 $objWriter->startElement('c:multiLvlStrRef'); 952 953 $objWriter->startElement('c:f'); 954 $objWriter->writeRawData( $plotSeriesValues->getDataSource() ); 955 $objWriter->endElement(); 956 957 $objWriter->startElement('c:multiLvlStrCache'); 958 959 $objWriter->startElement('c:ptCount'); 960 $objWriter->writeAttribute('val', $plotSeriesValues->getPointCount() ); 961 $objWriter->endElement(); 962 963 for ($level = 0; $level < $levelCount; ++$level) { 964 $objWriter->startElement('c:lvl'); 965 966 foreach($plotSeriesValues->getDataValues() as $plotSeriesKey => $plotSeriesValue) { 967 if (isset($plotSeriesValue[$level])) { 968 $objWriter->startElement('c:pt'); 969 $objWriter->writeAttribute('idx', $plotSeriesKey ); 970 971 $objWriter->startElement('c:v'); 972 $objWriter->writeRawData( $plotSeriesValue[$level] ); 973 $objWriter->endElement(); 974 $objWriter->endElement(); 975 } 976 } 977 978 $objWriter->endElement(); 979 } 980 981 $objWriter->endElement(); 982 983 $objWriter->endElement(); 984 } else { 985 $objWriter->startElement('c:'.$dataType.'Ref'); 986 987 $objWriter->startElement('c:f'); 988 $objWriter->writeRawData( $plotSeriesValues->getDataSource() ); 989 $objWriter->endElement(); 990 991 $objWriter->startElement('c:'.$dataType.'Cache'); 992 993 if (($groupType != PHPExcel_Chart_DataSeries::TYPE_PIECHART) && 994 ($groupType != PHPExcel_Chart_DataSeries::TYPE_PIECHART_3D) && 995 ($groupType != PHPExcel_Chart_DataSeries::TYPE_DONUTCHART)) { 996 997 if (($plotSeriesValues->getFormatCode() !== NULL) && 998 ($plotSeriesValues->getFormatCode() !== '')) { 999 $objWriter->startElement('c:formatCode'); 1000 $objWriter->writeRawData( $plotSeriesValues->getFormatCode() ); 1001 $objWriter->endElement(); 1002 } 1003 } 1004 1005 $objWriter->startElement('c:ptCount'); 1006 $objWriter->writeAttribute('val', $plotSeriesValues->getPointCount() ); 1007 $objWriter->endElement(); 1008 1009 $dataValues = $plotSeriesValues->getDataValues(); 1010 if (!empty($dataValues)) { 1011 if (is_array($dataValues)) { 1012 foreach($dataValues as $plotSeriesKey => $plotSeriesValue) { 1013 $objWriter->startElement('c:pt'); 1014 $objWriter->writeAttribute('idx', $plotSeriesKey ); 1015 1016 $objWriter->startElement('c:v'); 1017 $objWriter->writeRawData( $plotSeriesValue ); 1018 $objWriter->endElement(); 1019 $objWriter->endElement(); 1020 } 1021 } 1022 } 1023 1024 $objWriter->endElement(); 1025 1026 $objWriter->endElement(); 1027 } 1028 } 1029 1030 /** 1031 * Write Bubble Chart Details 1032 * 1033 * @param PHPExcel_Chart_DataSeriesValues $plotSeriesValues 1034 * @param PHPExcel_Shared_XMLWriter $objWriter XML Writer 1035 * @throws PHPExcel_Writer_Exception 1036 */ 1037 private function _writeBubbles($plotSeriesValues, $objWriter, PHPExcel_Worksheet $pSheet) 1038 { 1039 if (is_null($plotSeriesValues)) { 1040 return; 1041 } 1042 1043 $objWriter->startElement('c:bubbleSize'); 1044 $objWriter->startElement('c:numLit'); 1045 1046 $objWriter->startElement('c:formatCode'); 1047 $objWriter->writeRawData( 'General' ); 1048 $objWriter->endElement(); 1049 1050 $objWriter->startElement('c:ptCount'); 1051 $objWriter->writeAttribute('val', $plotSeriesValues->getPointCount() ); 1052 $objWriter->endElement(); 1053 1054 $dataValues = $plotSeriesValues->getDataValues(); 1055 if (!empty($dataValues)) { 1056 if (is_array($dataValues)) { 1057 foreach($dataValues as $plotSeriesKey => $plotSeriesValue) { 1058 $objWriter->startElement('c:pt'); 1059 $objWriter->writeAttribute('idx', $plotSeriesKey ); 1060 $objWriter->startElement('c:v'); 1061 $objWriter->writeRawData( 1 ); 1062 $objWriter->endElement(); 1063 $objWriter->endElement(); 1064 } 1065 } 1066 } 1067 1068 $objWriter->endElement(); 1069 $objWriter->endElement(); 1070 1071 $objWriter->startElement('c:bubble3D'); 1072 $objWriter->writeAttribute('val', 0 ); 1073 $objWriter->endElement(); 1074 } 1075 1076 /** 1077 * Write Layout 1078 * 1079 * @param PHPExcel_Chart_Layout $layout 1080 * @param PHPExcel_Shared_XMLWriter $objWriter XML Writer 1081 * @throws PHPExcel_Writer_Exception 1082 */ 1083 private function _writeLayout(PHPExcel_Chart_Layout $layout = NULL, $objWriter) 1084 { 1085 $objWriter->startElement('c:layout'); 1086 1087 if (!is_null($layout)) { 1088 $objWriter->startElement('c:manualLayout'); 1089 1090 $layoutTarget = $layout->getLayoutTarget(); 1091 if (!is_null($layoutTarget)) { 1092 $objWriter->startElement('c:layoutTarget'); 1093 $objWriter->writeAttribute('val', $layoutTarget); 1094 $objWriter->endElement(); 1095 } 1096 1097 $xMode = $layout->getXMode(); 1098 if (!is_null($xMode)) { 1099 $objWriter->startElement('c:xMode'); 1100 $objWriter->writeAttribute('val', $xMode); 1101 $objWriter->endElement(); 1102 } 1103 1104 $yMode = $layout->getYMode(); 1105 if (!is_null($yMode)) { 1106 $objWriter->startElement('c:yMode'); 1107 $objWriter->writeAttribute('val', $yMode); 1108 $objWriter->endElement(); 1109 } 1110 1111 $x = $layout->getXPosition(); 1112 if (!is_null($x)) { 1113 $objWriter->startElement('c:x'); 1114 $objWriter->writeAttribute('val', $x); 1115 $objWriter->endElement(); 1116 } 1117 1118 $y = $layout->getYPosition(); 1119 if (!is_null($y)) { 1120 $objWriter->startElement('c:y'); 1121 $objWriter->writeAttribute('val', $y); 1122 $objWriter->endElement(); 1123 } 1124 1125 $w = $layout->getWidth(); 1126 if (!is_null($w)) { 1127 $objWriter->startElement('c:w'); 1128 $objWriter->writeAttribute('val', $w); 1129 $objWriter->endElement(); 1130 } 1131 1132 $h = $layout->getHeight(); 1133 if (!is_null($h)) { 1134 $objWriter->startElement('c:h'); 1135 $objWriter->writeAttribute('val', $h); 1136 $objWriter->endElement(); 1137 } 1138 1139 $objWriter->endElement(); 1140 } 1141 1142 $objWriter->endElement(); 1143 } 1144 1145 /** 1146 * Write Alternate Content block 1147 * 1148 * @param PHPExcel_Shared_XMLWriter $objWriter XML Writer 1149 * @throws PHPExcel_Writer_Exception 1150 */ 1151 private function _writeAlternateContent($objWriter) 1152 { 1153 $objWriter->startElement('mc:AlternateContent'); 1154 $objWriter->writeAttribute('xmlns:mc', 'http://schemas.openxmlformats.org/markup-compatibility/2006'); 1155 1156 $objWriter->startElement('mc:Choice'); 1157 $objWriter->writeAttribute('xmlns:c14', 'http://schemas.microsoft.com/office/drawing/2007/8/2/chart'); 1158 $objWriter->writeAttribute('Requires', 'c14'); 1159 1160 $objWriter->startElement('c14:style'); 1161 $objWriter->writeAttribute('val', '102'); 1162 $objWriter->endElement(); 1163 $objWriter->endElement(); 1164 1165 $objWriter->startElement('mc:Fallback'); 1166 $objWriter->startElement('c:style'); 1167 $objWriter->writeAttribute('val', '2'); 1168 $objWriter->endElement(); 1169 $objWriter->endElement(); 1170 1171 $objWriter->endElement(); 1172 } 1173 1174 /** 1175 * Write Printer Settings 1176 * 1177 * @param PHPExcel_Shared_XMLWriter $objWriter XML Writer 1178 * @throws PHPExcel_Writer_Exception 1179 */ 1180 private function _writePrintSettings($objWriter) 1181 { 1182 $objWriter->startElement('c:printSettings'); 1183 1184 $objWriter->startElement('c:headerFooter'); 1185 $objWriter->endElement(); 1186 1187 $objWriter->startElement('c:pageMargins'); 1188 $objWriter->writeAttribute('footer', 0.3); 1189 $objWriter->writeAttribute('header', 0.3); 1190 $objWriter->writeAttribute('r', 0.7); 1191 $objWriter->writeAttribute('l', 0.7); 1192 $objWriter->writeAttribute('t', 0.75); 1193 $objWriter->writeAttribute('b', 0.75); 1194 $objWriter->endElement(); 1195 1196 $objWriter->startElement('c:pageSetup'); 1197 $objWriter->writeAttribute('orientation', "portrait"); 1198 $objWriter->endElement(); 1199 1200 $objWriter->endElement(); 1201 } 1202 1203 }
title
Description
Body
title
Description
Body
title
Description
Body
title
Body
Generated: Fri Nov 28 20:29:05 2014 | Cross-referenced by PHPXref 0.7.1 |