Complex classes like PptCharts often do a lot of different things. To break such a class down, we need to identify a cohesive component within that class. A common approach to find such a component is to look for fields/methods that share the same prefixes, or suffixes. You can also have a look at the cohesion graph to spot any un-connected, or weakly-connected components.
Once you have determined the fields that belong together, you can apply the Extract Class refactoring. If the component makes sense as a sub-class, Extract Subclass is also a candidate, and is often faster.
While breaking up the class, it is a good idea to analyze how other classes use PptCharts, and based on these observations, apply Extract Interface, too.
1 | <?php |
||
23 | class PptCharts extends AbstractDecoratorWriter |
||
24 | { |
||
25 | /** |
||
26 | * @return \PhpOffice\Common\Adapter\Zip\ZipInterface |
||
27 | * @throws \Exception |
||
28 | */ |
||
29 | 113 | public function render() |
|
50 | |||
51 | |||
52 | /** |
||
53 | * Write chart to XML format |
||
54 | * |
||
55 | * @param \PhpOffice\PhpPresentation\Shape\Chart $chart |
||
56 | * @return string XML Output |
||
57 | * @throws \Exception |
||
58 | */ |
||
59 | 35 | public function writeChart(Chart $chart) |
|
60 | { |
||
61 | // Create XML writer |
||
62 | 35 | $objWriter = new XMLWriter(XMLWriter::STORAGE_MEMORY); |
|
63 | |||
64 | // XML header |
||
65 | 35 | $objWriter->startDocument('1.0', 'UTF-8', 'yes'); |
|
66 | |||
67 | // c:chartSpace |
||
68 | 35 | $objWriter->startElement('c:chartSpace'); |
|
69 | 35 | $objWriter->writeAttribute('xmlns:c', 'http://schemas.openxmlformats.org/drawingml/2006/chart'); |
|
70 | 35 | $objWriter->writeAttribute('xmlns:a', 'http://schemas.openxmlformats.org/drawingml/2006/main'); |
|
71 | 35 | $objWriter->writeAttribute('xmlns:r', 'http://schemas.openxmlformats.org/officeDocument/2006/relationships'); |
|
72 | |||
73 | // c:date1904 |
||
74 | 35 | $objWriter->startElement('c:date1904'); |
|
75 | 35 | $objWriter->writeAttribute('val', '1'); |
|
76 | 35 | $objWriter->endElement(); |
|
77 | |||
78 | // c:lang |
||
79 | 35 | $objWriter->startElement('c:lang'); |
|
80 | 35 | $objWriter->writeAttribute('val', 'en-US'); |
|
81 | 35 | $objWriter->endElement(); |
|
82 | |||
83 | // c:chart |
||
84 | 35 | $objWriter->startElement('c:chart'); |
|
85 | |||
86 | // Title? |
||
87 | 35 | if ($chart->getTitle()->isVisible()) { |
|
88 | // Write title |
||
89 | 34 | $this->writeTitle($objWriter, $chart->getTitle()); |
|
90 | } |
||
91 | |||
92 | // c:autoTitleDeleted |
||
93 | 35 | $objWriter->startElement('c:autoTitleDeleted'); |
|
94 | 35 | $objWriter->writeAttribute('val', $chart->getTitle()->isVisible() ? '0' : '1'); |
|
95 | 35 | $objWriter->endElement(); |
|
96 | |||
97 | // c:view3D |
||
98 | 35 | $objWriter->startElement('c:view3D'); |
|
99 | |||
100 | // c:rotX |
||
101 | 35 | $objWriter->startElement('c:rotX'); |
|
102 | 35 | $objWriter->writeAttribute('val', $chart->getView3D()->getRotationX()); |
|
103 | 35 | $objWriter->endElement(); |
|
104 | |||
105 | // c:hPercent |
||
106 | 35 | $hPercent = $chart->getView3D()->getHeightPercent(); |
|
107 | 35 | $objWriter->writeElementIf($hPercent != null, 'c:hPercent', 'val', $hPercent . '%'); |
|
108 | |||
109 | // c:rotY |
||
110 | 35 | $objWriter->startElement('c:rotY'); |
|
111 | 35 | $objWriter->writeAttribute('val', $chart->getView3D()->getRotationY()); |
|
112 | 35 | $objWriter->endElement(); |
|
113 | |||
114 | // c:depthPercent |
||
115 | 35 | $objWriter->startElement('c:depthPercent'); |
|
116 | 35 | $objWriter->writeAttribute('val', $chart->getView3D()->getDepthPercent()); |
|
117 | 35 | $objWriter->endElement(); |
|
118 | |||
119 | // c:rAngAx |
||
120 | 35 | $objWriter->startElement('c:rAngAx'); |
|
121 | 35 | $objWriter->writeAttribute('val', $chart->getView3D()->hasRightAngleAxes() ? '1' : '0'); |
|
122 | 35 | $objWriter->endElement(); |
|
123 | |||
124 | // c:perspective |
||
125 | 35 | $objWriter->startElement('c:perspective'); |
|
126 | 35 | $objWriter->writeAttribute('val', $chart->getView3D()->getPerspective()); |
|
127 | 35 | $objWriter->endElement(); |
|
128 | |||
129 | 35 | $objWriter->endElement(); |
|
130 | |||
131 | // Write plot area |
||
132 | 35 | $this->writePlotArea($objWriter, $chart->getPlotArea(), $chart); |
|
133 | |||
134 | // Legend? |
||
135 | 34 | if ($chart->getLegend()->isVisible()) { |
|
136 | // Write legend |
||
137 | 34 | $this->writeLegend($objWriter, $chart->getLegend()); |
|
138 | } |
||
139 | |||
140 | // c:plotVisOnly |
||
141 | 34 | $objWriter->startElement('c:plotVisOnly'); |
|
142 | 34 | $objWriter->writeAttribute('val', '1'); |
|
143 | 34 | $objWriter->endElement(); |
|
144 | |||
145 | 34 | $objWriter->endElement(); |
|
146 | |||
147 | // c:spPr |
||
148 | 34 | $objWriter->startElement('c:spPr'); |
|
149 | |||
150 | // Fill |
||
151 | 34 | $this->writeFill($objWriter, $chart->getFill()); |
|
152 | |||
153 | // Border |
||
154 | 34 | if ($chart->getBorder()->getLineStyle() != Border::LINE_NONE) { |
|
155 | 1 | $this->writeBorder($objWriter, $chart->getBorder(), ''); |
|
156 | } |
||
157 | |||
158 | // Shadow |
||
159 | 34 | if ($chart->getShadow()->isVisible()) { |
|
160 | // a:effectLst |
||
161 | 1 | $objWriter->startElement('a:effectLst'); |
|
162 | |||
163 | // a:outerShdw |
||
164 | 1 | $objWriter->startElement('a:outerShdw'); |
|
165 | 1 | $objWriter->writeAttribute('blurRad', CommonDrawing::pixelsToEmu($chart->getShadow()->getBlurRadius())); |
|
166 | 1 | $objWriter->writeAttribute('dist', CommonDrawing::pixelsToEmu($chart->getShadow()->getDistance())); |
|
167 | 1 | $objWriter->writeAttribute('dir', CommonDrawing::degreesToAngle($chart->getShadow()->getDirection())); |
|
168 | 1 | $objWriter->writeAttribute('algn', $chart->getShadow()->getAlignment()); |
|
169 | 1 | $objWriter->writeAttribute('rotWithShape', '0'); |
|
170 | |||
171 | 1 | $this->writeColor($objWriter, $chart->getShadow()->getColor(), $chart->getShadow()->getAlpha()); |
|
172 | |||
173 | 1 | $objWriter->endElement(); |
|
174 | |||
175 | 1 | $objWriter->endElement(); |
|
176 | } |
||
177 | |||
178 | 34 | $objWriter->endElement(); |
|
179 | |||
180 | // External data? |
||
181 | 34 | if ($chart->hasIncludedSpreadsheet()) { |
|
182 | // c:externalData |
||
183 | $objWriter->startElement('c:externalData'); |
||
184 | $objWriter->writeAttribute('r:id', 'rId1'); |
||
185 | |||
186 | // c:autoUpdate |
||
187 | $objWriter->startElement('c:autoUpdate'); |
||
188 | $objWriter->writeAttribute('val', '0'); |
||
189 | $objWriter->endElement(); |
||
190 | |||
191 | $objWriter->endElement(); |
||
192 | } |
||
193 | |||
194 | 34 | $objWriter->endElement(); |
|
195 | |||
196 | // Return |
||
197 | 34 | return $objWriter->getData(); |
|
198 | } |
||
199 | |||
200 | /** |
||
201 | * Write chart to XML format |
||
202 | * |
||
203 | * @param PhpPresentation $presentation |
||
204 | * @param \PhpOffice\PhpPresentation\Shape\Chart $chart |
||
205 | * @param string $tempName |
||
206 | * @return string String output |
||
207 | * @throws \Exception |
||
208 | */ |
||
209 | public function writeSpreadsheet(PhpPresentation $presentation, $chart, $tempName) |
||
210 | { |
||
211 | // Need output? |
||
212 | if (!$chart->hasIncludedSpreadsheet()) { |
||
213 | throw new \Exception('No spreadsheet output is required for the given chart.'); |
||
214 | } |
||
215 | |||
216 | // Verify PHPExcel |
||
217 | if (!class_exists('PHPExcel')) { |
||
218 | throw new \Exception('PHPExcel has not been loaded. Include PHPExcel.php in your script, e.g. require_once \'PHPExcel.php\'.'); |
||
219 | } |
||
220 | |||
221 | // Create new spreadsheet |
||
222 | $workbook = new \PHPExcel(); |
||
223 | |||
224 | // Set properties |
||
225 | $title = $chart->getTitle()->getText(); |
||
226 | if (strlen($title) == 0) { |
||
227 | $title = 'Chart'; |
||
228 | } |
||
229 | $workbook->getProperties()->setCreator($presentation->getDocumentProperties()->getCreator())->setLastModifiedBy($presentation->getDocumentProperties()->getLastModifiedBy())->setTitle($title); |
||
230 | |||
231 | // Add chart data |
||
232 | $sheet = $workbook->setActiveSheetIndex(0); |
||
233 | $sheet->setTitle('Sheet1'); |
||
234 | |||
235 | // Write series |
||
236 | $seriesIndex = 0; |
||
237 | foreach ($chart->getPlotArea()->getType()->getSeries() as $series) { |
||
238 | // Title |
||
239 | $sheet->setCellValueByColumnAndRow(1 + $seriesIndex, 1, $series->getTitle()); |
||
240 | |||
241 | // X-axis |
||
242 | $axisXData = array_keys($series->getValues()); |
||
243 | $numAxisXData = count($axisXData); |
||
244 | for ($i = 0; $i < $numAxisXData; $i++) { |
||
245 | $sheet->setCellValueByColumnAndRow(0, $i + 2, $axisXData[$i]); |
||
246 | } |
||
247 | |||
248 | // Y-axis |
||
249 | $axisYData = array_values($series->getValues()); |
||
250 | $numAxisYData = count($axisYData); |
||
251 | for ($i = 0; $i < $numAxisYData; $i++) { |
||
252 | $sheet->setCellValueByColumnAndRow(1 + $seriesIndex, $i + 2, $axisYData[$i]); |
||
253 | } |
||
254 | |||
255 | ++$seriesIndex; |
||
256 | } |
||
257 | |||
258 | // Save to string |
||
259 | $writer = \PHPExcel_IOFactory::createWriter($workbook, 'Excel2007'); |
||
260 | $writer->save($tempName); |
||
261 | |||
262 | // Load file in memory |
||
263 | $returnValue = file_get_contents($tempName); |
||
264 | if (@unlink($tempName) === false) { |
||
265 | throw new \Exception('The file ' . $tempName . ' could not removed.'); |
||
266 | } |
||
267 | |||
268 | return $returnValue; |
||
269 | } |
||
270 | |||
271 | /** |
||
272 | * Write element with value attribute |
||
273 | * |
||
274 | * @param \PhpOffice\Common\XMLWriter $objWriter XML Writer |
||
275 | * @param string $elementName |
||
276 | * @param string $value |
||
277 | */ |
||
278 | 30 | protected function writeElementWithValAttribute($objWriter, $elementName, $value) |
|
284 | |||
285 | /** |
||
286 | * Write single value or reference |
||
287 | * |
||
288 | * @param \PhpOffice\Common\XMLWriter $objWriter XML Writer |
||
289 | * @param boolean $isReference |
||
290 | * @param mixed $value |
||
291 | * @param string $reference |
||
292 | */ |
||
293 | 30 | protected function writeSingleValueOrReference($objWriter, $isReference, $value, $reference) |
|
294 | { |
||
295 | 30 | if (!$isReference) { |
|
296 | // Value |
||
297 | 30 | $objWriter->writeElement('c:v', $value); |
|
298 | 30 | return; |
|
299 | } |
||
300 | |||
301 | // Reference and cache |
||
302 | $objWriter->startElement('c:strRef'); |
||
303 | $objWriter->writeElement('c:f', $reference); |
||
304 | $objWriter->startElement('c:strCache'); |
||
305 | $objWriter->startElement('c:ptCount'); |
||
306 | $objWriter->writeAttribute('val', '1'); |
||
307 | $objWriter->endElement(); |
||
308 | |||
309 | $objWriter->startElement('c:pt'); |
||
310 | $objWriter->writeAttribute('idx', '0'); |
||
311 | $objWriter->writeElement('c:v', $value); |
||
312 | $objWriter->endElement(); |
||
313 | $objWriter->endElement(); |
||
314 | $objWriter->endElement(); |
||
315 | } |
||
316 | |||
317 | /** |
||
318 | * Write series value or reference |
||
319 | * |
||
320 | * @param \PhpOffice\Common\XMLWriter $objWriter XML Writer |
||
321 | * @param boolean $isReference |
||
322 | * @param mixed $values |
||
323 | * @param string $reference |
||
324 | */ |
||
325 | 30 | protected function writeMultipleValuesOrReference($objWriter, $isReference, $values, $reference) |
|
326 | { |
||
327 | // c:strLit / c:numLit |
||
328 | // c:strRef / c:numRef |
||
329 | 30 | $referenceType = ($isReference ? 'Ref' : 'Lit'); |
|
330 | 30 | $dataType = 'str'; |
|
331 | 30 | if (is_int($values[0]) || is_float($values[0])) { |
|
332 | 30 | $dataType = 'num'; |
|
333 | } |
||
334 | 30 | $objWriter->startElement('c:' . $dataType . $referenceType); |
|
335 | |||
336 | 30 | $numValues = count($values); |
|
337 | 30 | if (!$isReference) { |
|
338 | // Value |
||
339 | |||
340 | // c:ptCount |
||
341 | 30 | $objWriter->startElement('c:ptCount'); |
|
342 | 30 | $objWriter->writeAttribute('val', count($values)); |
|
343 | 30 | $objWriter->endElement(); |
|
344 | |||
345 | // Add points |
||
346 | 30 | for ($i = 0; $i < $numValues; $i++) { |
|
347 | // c:pt |
||
348 | 30 | $objWriter->startElement('c:pt'); |
|
349 | 30 | $objWriter->writeAttribute('idx', $i); |
|
350 | 30 | $objWriter->writeElement('c:v', $values[$i]); |
|
351 | 30 | $objWriter->endElement(); |
|
352 | } |
||
353 | } else { |
||
354 | // Reference |
||
355 | $objWriter->writeElement('c:f', $reference); |
||
356 | $objWriter->startElement('c:' . $dataType . 'Cache'); |
||
357 | |||
358 | // c:ptCount |
||
359 | $objWriter->startElement('c:ptCount'); |
||
360 | $objWriter->writeAttribute('val', count($values)); |
||
361 | $objWriter->endElement(); |
||
362 | |||
363 | // Add points |
||
364 | for ($i = 0; $i < $numValues; $i++) { |
||
365 | // c:pt |
||
366 | $objWriter->startElement('c:pt'); |
||
367 | $objWriter->writeAttribute('idx', $i); |
||
368 | $objWriter->writeElement('c:v', $values[$i]); |
||
369 | $objWriter->endElement(); |
||
370 | } |
||
371 | |||
372 | $objWriter->endElement(); |
||
373 | } |
||
374 | |||
375 | 30 | $objWriter->endElement(); |
|
376 | 30 | } |
|
377 | |||
378 | /** |
||
379 | * Write Title |
||
380 | * |
||
381 | * @param \PhpOffice\Common\XMLWriter $objWriter XML Writer |
||
382 | * @param \PhpOffice\PhpPresentation\Shape\Chart\Title $subject |
||
383 | * @throws \Exception |
||
384 | */ |
||
385 | 34 | protected function writeTitle(XMLWriter $objWriter, Title $subject) |
|
476 | |||
477 | /** |
||
478 | * Write Plot Area |
||
479 | * |
||
480 | * @param \PhpOffice\Common\XMLWriter $objWriter XML Writer |
||
481 | * @param \PhpOffice\PhpPresentation\Shape\Chart\PlotArea $subject |
||
482 | * @param \PhpOffice\PhpPresentation\Shape\Chart $chart |
||
483 | * @throws \Exception |
||
484 | */ |
||
485 | 35 | protected function writePlotArea(XMLWriter $objWriter, PlotArea $subject, Chart $chart) |
|
486 | { |
||
487 | // c:plotArea |
||
488 | 35 | $objWriter->startElement('c:plotArea'); |
|
489 | |||
490 | // Write layout |
||
491 | 35 | $this->writeLayout($objWriter, $subject); |
|
492 | |||
493 | // Write chart |
||
494 | 35 | $chartType = $subject->getType(); |
|
495 | 35 | if ($chartType instanceof Area) { |
|
496 | 1 | $this->writeTypeArea($objWriter, $chartType, $chart->hasIncludedSpreadsheet()); |
|
497 | } elseif ($chartType instanceof Bar) { |
||
498 | 3 | $this->writeTypeBar($objWriter, $chartType, $chart->hasIncludedSpreadsheet()); |
|
499 | } elseif ($chartType instanceof Bar3D) { |
||
500 | 4 | $this->writeTypeBar3D($objWriter, $chartType, $chart->hasIncludedSpreadsheet()); |
|
501 | } elseif ($chartType instanceof Pie) { |
||
502 | 2 | $this->writeTypePie($objWriter, $chartType, $chart->hasIncludedSpreadsheet()); |
|
503 | } elseif ($chartType instanceof Pie3D) { |
||
504 | 4 | $this->writeTypePie3D($objWriter, $chartType, $chart->hasIncludedSpreadsheet()); |
|
505 | } elseif ($chartType instanceof Line) { |
||
506 | 15 | $this->writeTypeLine($objWriter, $chartType, $chart->hasIncludedSpreadsheet()); |
|
507 | } elseif ($chartType instanceof Scatter) { |
||
508 | 5 | $this->writeTypeScatter($objWriter, $chartType, $chart->hasIncludedSpreadsheet()); |
|
509 | } else { |
||
510 | 1 | throw new \Exception('The chart type provided could not be rendered.'); |
|
511 | } |
||
512 | |||
513 | // Write X axis? |
||
514 | 34 | if ($chartType->hasAxisX()) { |
|
515 | 28 | $this->writeAxis($objWriter, $subject->getAxisX(), Chart\Axis::AXIS_X, $chartType); |
|
516 | } |
||
517 | |||
518 | // Write Y axis? |
||
519 | 34 | if ($chartType->hasAxisY()) { |
|
520 | 28 | $this->writeAxis($objWriter, $subject->getAxisY(), Chart\Axis::AXIS_Y, $chartType); |
|
521 | } |
||
522 | |||
523 | 34 | $objWriter->endElement(); |
|
524 | 34 | } |
|
525 | |||
526 | /** |
||
527 | * Write Legend |
||
528 | * |
||
529 | * @param \PhpOffice\Common\XMLWriter $objWriter XML Writer |
||
530 | * @param \PhpOffice\PhpPresentation\Shape\Chart\Legend $subject |
||
531 | * @throws \Exception |
||
532 | */ |
||
533 | 34 | protected function writeLegend(XMLWriter $objWriter, Legend $subject) |
|
624 | |||
625 | /** |
||
626 | * Write Layout |
||
627 | * |
||
628 | * @param \PhpOffice\Common\XMLWriter $objWriter XML Writer |
||
629 | * @param mixed $subject |
||
630 | * @throws \Exception |
||
631 | */ |
||
632 | 35 | protected function writeLayout(XMLWriter $objWriter, $subject) |
|
633 | { |
||
634 | // c:layout |
||
635 | 35 | $objWriter->startElement('c:layout'); |
|
636 | |||
637 | // c:manualLayout |
||
638 | 35 | $objWriter->startElement('c:manualLayout'); |
|
639 | // c:xMode |
||
640 | 35 | $objWriter->startElement('c:xMode'); |
|
641 | 35 | $objWriter->writeAttribute('val', 'edge'); |
|
642 | 35 | $objWriter->endElement(); |
|
643 | |||
644 | // c:yMode |
||
645 | 35 | $objWriter->startElement('c:yMode'); |
|
646 | 35 | $objWriter->writeAttribute('val', 'edge'); |
|
647 | 35 | $objWriter->endElement(); |
|
648 | |||
649 | 35 | if ($subject->getOffsetX() != 0) { |
|
650 | // c:x |
||
651 | 34 | $objWriter->startElement('c:x'); |
|
652 | 34 | $objWriter->writeAttribute('val', $subject->getOffsetX()); |
|
653 | 34 | $objWriter->endElement(); |
|
654 | } |
||
655 | |||
656 | 35 | if ($subject->getOffsetY() != 0) { |
|
657 | // c:y |
||
658 | 34 | $objWriter->startElement('c:y'); |
|
659 | 34 | $objWriter->writeAttribute('val', $subject->getOffsetY()); |
|
660 | 34 | $objWriter->endElement(); |
|
661 | } |
||
662 | |||
663 | 35 | if ($subject->getWidth() != 0) { |
|
664 | // c:w |
||
665 | $objWriter->startElement('c:w'); |
||
666 | $objWriter->writeAttribute('val', $subject->getWidth()); |
||
667 | $objWriter->endElement(); |
||
668 | } |
||
669 | |||
670 | 35 | if ($subject->getHeight() != 0) { |
|
671 | // c:h |
||
672 | $objWriter->startElement('c:h'); |
||
673 | $objWriter->writeAttribute('val', $subject->getHeight()); |
||
674 | $objWriter->endElement(); |
||
675 | } |
||
676 | |||
677 | 35 | $objWriter->endElement(); |
|
678 | 35 | $objWriter->endElement(); |
|
679 | 35 | } |
|
680 | |||
681 | /** |
||
682 | * Write Type Area |
||
683 | * |
||
684 | * @param \PhpOffice\Common\XMLWriter $objWriter XML Writer |
||
685 | * @param \PhpOffice\PhpPresentation\Shape\Chart\Type\Area $subject |
||
686 | * @param boolean $includeSheet |
||
687 | * @throws \Exception |
||
688 | */ |
||
689 | 1 | protected function writeTypeArea(XMLWriter $objWriter, Area $subject, $includeSheet = false) |
|
690 | { |
||
691 | // c:lineChart |
||
692 | 1 | $objWriter->startElement('c:areaChart'); |
|
693 | |||
694 | // c:grouping |
||
695 | 1 | $objWriter->startElement('c:grouping'); |
|
696 | 1 | $objWriter->writeAttribute('val', 'standard'); |
|
697 | 1 | $objWriter->endElement(); |
|
698 | |||
699 | // Write series |
||
700 | 1 | $seriesIndex = 0; |
|
701 | 1 | foreach ($subject->getSeries() as $series) { |
|
702 | // c:ser |
||
703 | 1 | $objWriter->startElement('c:ser'); |
|
704 | |||
705 | // c:ser > c:idx |
||
706 | 1 | $objWriter->startElement('c:idx'); |
|
707 | 1 | $objWriter->writeAttribute('val', $seriesIndex); |
|
708 | 1 | $objWriter->endElement(); |
|
709 | |||
710 | // c:ser > c:order |
||
711 | 1 | $objWriter->startElement('c:order'); |
|
712 | 1 | $objWriter->writeAttribute('val', $seriesIndex); |
|
713 | 1 | $objWriter->endElement(); |
|
714 | |||
715 | // c:ser > c:tx |
||
716 | 1 | $objWriter->startElement('c:tx'); |
|
717 | 1 | $coords = ($includeSheet ? 'Sheet1!$' . \PHPExcel_Cell::stringFromColumnIndex(1 + $seriesIndex) . '$1' : ''); |
|
718 | 1 | $this->writeSingleValueOrReference($objWriter, $includeSheet, $series->getTitle(), $coords); |
|
719 | 1 | $objWriter->endElement(); |
|
720 | |||
721 | // c:ser > c:dLbls |
||
722 | // @link : https://msdn.microsoft.com/en-us/library/documentformat.openxml.drawing.charts.areachartseries.aspx |
||
723 | 1 | $objWriter->startElement('c:dLbls'); |
|
724 | |||
725 | // c:ser > c:dLbls > c:showVal |
||
726 | 1 | $this->writeElementWithValAttribute($objWriter, 'c:showVal', $series->hasShowValue() ? '1' : '0'); |
|
727 | |||
728 | // c:ser > c:dLbls > c:showCatName |
||
729 | 1 | $this->writeElementWithValAttribute($objWriter, 'c:showCatName', $series->hasShowCategoryName() ? '1' : '0'); |
|
730 | |||
731 | // c:ser > c:dLbls > c:showSerName |
||
732 | 1 | $this->writeElementWithValAttribute($objWriter, 'c:showSerName', $series->hasShowSeriesName() ? '1' : '0'); |
|
733 | |||
734 | // c:ser > c:dLbls > c:showPercent |
||
735 | 1 | $this->writeElementWithValAttribute($objWriter, 'c:showPercent', $series->hasShowPercentage() ? '1' : '0'); |
|
736 | |||
737 | // c:ser > ##c:dLbls |
||
738 | 1 | $objWriter->endElement(); |
|
739 | |||
740 | 1 | if ($series->getFill()->getFillType() != Fill::FILL_NONE) { |
|
741 | // c:spPr |
||
742 | $objWriter->startElement('c:spPr'); |
||
743 | // Write fill |
||
744 | $this->writeFill($objWriter, $series->getFill()); |
||
745 | // ## c:spPr |
||
746 | $objWriter->endElement(); |
||
747 | } |
||
748 | |||
749 | // Write X axis data |
||
750 | 1 | $axisXData = array_keys($series->getValues()); |
|
751 | |||
752 | // c:cat |
||
753 | 1 | $objWriter->startElement('c:cat'); |
|
754 | 1 | $this->writeMultipleValuesOrReference($objWriter, $includeSheet, $axisXData, 'Sheet1!$A$2:$A$' . (1 + count($axisXData))); |
|
755 | 1 | $objWriter->endElement(); |
|
756 | |||
757 | // Write Y axis data |
||
758 | 1 | $axisYData = array_values($series->getValues()); |
|
759 | |||
760 | // c:val |
||
761 | 1 | $objWriter->startElement('c:val'); |
|
762 | 1 | $coords = ($includeSheet ? 'Sheet1!$' . \PHPExcel_Cell::stringFromColumnIndex($seriesIndex + 1) . '$2:$' . \PHPExcel_Cell::stringFromColumnIndex($seriesIndex + 1) . '$' . (1 + count($axisYData)) : ''); |
|
763 | 1 | $this->writeMultipleValuesOrReference($objWriter, $includeSheet, $axisYData, $coords); |
|
764 | 1 | $objWriter->endElement(); |
|
765 | |||
766 | 1 | $objWriter->endElement(); |
|
767 | |||
768 | 1 | ++$seriesIndex; |
|
769 | } |
||
770 | |||
771 | // c:axId |
||
772 | 1 | $objWriter->startElement('c:axId'); |
|
773 | 1 | $objWriter->writeAttribute('val', '52743552'); |
|
774 | 1 | $objWriter->endElement(); |
|
775 | |||
776 | // c:axId |
||
777 | 1 | $objWriter->startElement('c:axId'); |
|
778 | 1 | $objWriter->writeAttribute('val', '52749440'); |
|
779 | 1 | $objWriter->endElement(); |
|
780 | |||
781 | 1 | $objWriter->endElement(); |
|
782 | 1 | } |
|
783 | |||
784 | /** |
||
785 | * Write Type Bar |
||
786 | * |
||
787 | * @param \PhpOffice\Common\XMLWriter $objWriter XML Writer |
||
788 | * @param \PhpOffice\PhpPresentation\Shape\Chart\Type\Bar $subject |
||
789 | * @param boolean $includeSheet |
||
790 | * @throws \Exception |
||
791 | */ |
||
792 | 3 | protected function writeTypeBar(XMLWriter $objWriter, Bar $subject, $includeSheet = false) |
|
793 | { |
||
794 | // c:bar3DChart |
||
795 | 3 | $objWriter->startElement('c:barChart'); |
|
796 | |||
797 | // c:barDir |
||
798 | 3 | $objWriter->startElement('c:barDir'); |
|
799 | 3 | $objWriter->writeAttribute('val', $subject->getBarDirection()); |
|
800 | 3 | $objWriter->endElement(); |
|
801 | |||
802 | // c:grouping |
||
803 | 3 | $objWriter->startElement('c:grouping'); |
|
804 | 3 | $objWriter->writeAttribute('val', $subject->getBarGrouping()); |
|
805 | 3 | $objWriter->endElement(); |
|
806 | |||
807 | // Write series |
||
808 | 3 | $seriesIndex = 0; |
|
809 | 3 | foreach ($subject->getSeries() as $series) { |
|
810 | // c:ser |
||
811 | 3 | $objWriter->startElement('c:ser'); |
|
812 | |||
813 | // c:idx |
||
814 | 3 | $objWriter->startElement('c:idx'); |
|
815 | 3 | $objWriter->writeAttribute('val', $seriesIndex); |
|
816 | 3 | $objWriter->endElement(); |
|
817 | |||
818 | // c:order |
||
819 | 3 | $objWriter->startElement('c:order'); |
|
820 | 3 | $objWriter->writeAttribute('val', $seriesIndex); |
|
821 | 3 | $objWriter->endElement(); |
|
822 | |||
823 | // c:tx |
||
824 | 3 | $objWriter->startElement('c:tx'); |
|
825 | 3 | $coords = ($includeSheet ? 'Sheet1!$' . \PHPExcel_Cell::stringFromColumnIndex(1 + $seriesIndex) . '$1' : ''); |
|
826 | 3 | $this->writeSingleValueOrReference($objWriter, $includeSheet, $series->getTitle(), $coords); |
|
827 | 3 | $objWriter->endElement(); |
|
828 | |||
829 | // Fills for points? |
||
830 | 3 | $dataPointFills = $series->getDataPointFills(); |
|
831 | 3 | foreach ($dataPointFills as $key => $value) { |
|
832 | // c:dPt |
||
833 | 1 | $objWriter->startElement('c:dPt'); |
|
834 | |||
835 | // c:idx |
||
836 | 1 | $this->writeElementWithValAttribute($objWriter, 'c:idx', $key); |
|
837 | |||
838 | 1 | if ($value->getFillType() != Fill::FILL_NONE) { |
|
839 | // c:spPr |
||
840 | 1 | $objWriter->startElement('c:spPr'); |
|
841 | // Write fill |
||
842 | 1 | $this->writeFill($objWriter, $value); |
|
843 | // ## c:spPr |
||
844 | 1 | $objWriter->endElement(); |
|
845 | } |
||
846 | |||
847 | // ## c:dPt |
||
848 | 1 | $objWriter->endElement(); |
|
849 | } |
||
850 | |||
851 | // c:dLbls |
||
852 | 3 | $objWriter->startElement('c:dLbls'); |
|
853 | |||
854 | 3 | if ($series->hasDlblNumFormat()) { |
|
855 | //c:numFmt |
||
856 | $objWriter->startElement('c:numFmt'); |
||
857 | $objWriter->writeAttribute('formatCode', $series->getDlblNumFormat()); |
||
858 | $objWriter->writeAttribute('sourceLinked', '0'); |
||
859 | $objWriter->endElement(); |
||
860 | } |
||
861 | |||
862 | // c:txPr |
||
863 | 3 | $objWriter->startElement('c:txPr'); |
|
864 | |||
865 | // a:bodyPr |
||
866 | 3 | $objWriter->writeElement('a:bodyPr', null); |
|
867 | |||
868 | // a:lstStyle |
||
869 | 3 | $objWriter->writeElement('a:lstStyle', null); |
|
870 | |||
871 | // a:p |
||
872 | 3 | $objWriter->startElement('a:p'); |
|
873 | |||
874 | // a:pPr |
||
875 | 3 | $objWriter->startElement('a:pPr'); |
|
876 | |||
877 | // a:defRPr |
||
878 | 3 | $objWriter->startElement('a:defRPr'); |
|
879 | |||
880 | 3 | $objWriter->writeAttribute('b', ($series->getFont()->isBold() ? 'true' : 'false')); |
|
881 | 3 | $objWriter->writeAttribute('i', ($series->getFont()->isItalic() ? 'true' : 'false')); |
|
882 | 3 | $objWriter->writeAttribute('strike', ($series->getFont()->isStrikethrough() ? 'sngStrike' : 'noStrike')); |
|
883 | 3 | $objWriter->writeAttribute('sz', ($series->getFont()->getSize() * 100)); |
|
884 | 3 | $objWriter->writeAttribute('u', $series->getFont()->getUnderline()); |
|
885 | 3 | $objWriter->writeAttributeIf($series->getFont()->isSuperScript(), 'baseline', '30000'); |
|
886 | 3 | $objWriter->writeAttributeIf($series->getFont()->isSubScript(), 'baseline', '-25000'); |
|
887 | |||
888 | // Font - a:solidFill |
||
889 | 3 | $objWriter->startElement('a:solidFill'); |
|
890 | |||
891 | 3 | $this->writeColor($objWriter, $series->getFont()->getColor()); |
|
892 | |||
893 | 3 | $objWriter->endElement(); |
|
894 | |||
895 | // Font - a:latin |
||
896 | 3 | $objWriter->startElement('a:latin'); |
|
897 | 3 | $objWriter->writeAttribute('typeface', $series->getFont()->getName()); |
|
898 | 3 | $objWriter->endElement(); |
|
899 | |||
900 | 3 | $objWriter->endElement(); |
|
901 | |||
902 | 3 | $objWriter->endElement(); |
|
903 | |||
904 | // a:endParaRPr |
||
905 | 3 | $objWriter->startElement('a:endParaRPr'); |
|
906 | 3 | $objWriter->writeAttribute('lang', 'en-US'); |
|
907 | 3 | $objWriter->writeAttribute('dirty', '0'); |
|
908 | 3 | $objWriter->endElement(); |
|
909 | |||
910 | 3 | $objWriter->endElement(); |
|
911 | |||
912 | 3 | $objWriter->endElement(); |
|
913 | |||
914 | // c:dLblPos |
||
915 | 3 | $this->writeElementWithValAttribute($objWriter, 'c:dLblPos', $series->getLabelPosition()); |
|
916 | |||
917 | // c:showVal |
||
918 | 3 | $this->writeElementWithValAttribute($objWriter, 'c:showVal', $series->hasShowValue() ? '1' : '0'); |
|
919 | |||
920 | // c:showCatName |
||
921 | 3 | $this->writeElementWithValAttribute($objWriter, 'c:showCatName', $series->hasShowCategoryName() ? '1' : '0'); |
|
922 | |||
923 | // c:showSerName |
||
924 | 3 | $this->writeElementWithValAttribute($objWriter, 'c:showSerName', $series->hasShowSeriesName() ? '1' : '0'); |
|
925 | |||
926 | // c:showPercent |
||
927 | 3 | $this->writeElementWithValAttribute($objWriter, 'c:showPercent', $series->hasShowPercentage() ? '1' : '0'); |
|
928 | |||
929 | // c:showLeaderLines |
||
930 | 3 | $this->writeElementWithValAttribute($objWriter, 'c:showLeaderLines', $series->hasShowLeaderLines() ? '1' : '0'); |
|
931 | |||
932 | // c:separator |
||
933 | 3 | $objWriter->writeElementIf($series->hasShowSeparator(), 'c:separator', 'val', $series->getSeparator()); |
|
934 | |||
935 | 3 | $objWriter->endElement(); |
|
936 | |||
937 | // c:spPr |
||
938 | 3 | if ($series->getFill()->getFillType() != Fill::FILL_NONE) { |
|
939 | // c:spPr |
||
940 | $objWriter->startElement('c:spPr'); |
||
941 | // Write fill |
||
942 | $this->writeFill($objWriter, $series->getFill()); |
||
943 | // ## c:spPr |
||
944 | $objWriter->endElement(); |
||
945 | } |
||
946 | |||
947 | // Write X axis data |
||
948 | 3 | $axisXData = array_keys($series->getValues()); |
|
949 | |||
950 | // c:cat |
||
951 | 3 | $objWriter->startElement('c:cat'); |
|
952 | 3 | $this->writeMultipleValuesOrReference($objWriter, $includeSheet, $axisXData, 'Sheet1!$A$2:$A$' . (1 + count($axisXData))); |
|
953 | 3 | $objWriter->endElement(); |
|
954 | |||
955 | // Write Y axis data |
||
956 | 3 | $axisYData = array_values($series->getValues()); |
|
957 | |||
958 | // c:val |
||
959 | 3 | $objWriter->startElement('c:val'); |
|
960 | 3 | $coords = ($includeSheet ? 'Sheet1!$' . \PHPExcel_Cell::stringFromColumnIndex($seriesIndex + 1) . '$2:$' . \PHPExcel_Cell::stringFromColumnIndex($seriesIndex + 1) . '$' . (1 + count($axisYData)) : ''); |
|
961 | 3 | $this->writeMultipleValuesOrReference($objWriter, $includeSheet, $axisYData, $coords); |
|
962 | 3 | $objWriter->endElement(); |
|
963 | |||
964 | 3 | $objWriter->endElement(); |
|
965 | |||
966 | 3 | ++$seriesIndex; |
|
967 | } |
||
968 | |||
969 | // c:overlap |
||
970 | 3 | $objWriter->startElement('c:overlap'); |
|
971 | 3 | if ($subject->getBarGrouping() == Bar::GROUPING_CLUSTERED) { |
|
972 | 3 | $objWriter->writeAttribute('val', '0'); |
|
973 | } elseif ($subject->getBarGrouping() == Bar::GROUPING_STACKED || $subject->getBarGrouping() == Bar::GROUPING_PERCENTSTACKED) { |
||
974 | $objWriter->writeAttribute('val', '100'); |
||
975 | } |
||
976 | 3 | $objWriter->endElement(); |
|
977 | |||
978 | // c:gapWidth |
||
979 | 3 | $objWriter->startElement('c:gapWidth'); |
|
980 | 3 | $objWriter->writeAttribute('val', $subject->getGapWidthPercent()); |
|
981 | 3 | $objWriter->endElement(); |
|
982 | |||
983 | // c:shape |
||
984 | 3 | $objWriter->startElement('c:shape'); |
|
985 | 3 | $objWriter->writeAttribute('val', 'box'); |
|
986 | 3 | $objWriter->endElement(); |
|
987 | |||
988 | // c:axId |
||
989 | 3 | $objWriter->startElement('c:axId'); |
|
990 | 3 | $objWriter->writeAttribute('val', '52743552'); |
|
991 | 3 | $objWriter->endElement(); |
|
992 | |||
993 | // c:axId |
||
994 | 3 | $objWriter->startElement('c:axId'); |
|
995 | 3 | $objWriter->writeAttribute('val', '52749440'); |
|
996 | 3 | $objWriter->endElement(); |
|
997 | |||
998 | // c:axId |
||
999 | 3 | $objWriter->startElement('c:axId'); |
|
1000 | 3 | $objWriter->writeAttribute('val', '0'); |
|
1001 | 3 | $objWriter->endElement(); |
|
1002 | |||
1003 | 3 | $objWriter->endElement(); |
|
1004 | 3 | } |
|
1005 | |||
1006 | /** |
||
1007 | * Write Type Bar3D |
||
1008 | * |
||
1009 | * @param \PhpOffice\Common\XMLWriter $objWriter XML Writer |
||
1010 | * @param \PhpOffice\PhpPresentation\Shape\Chart\Type\Bar3D $subject |
||
1011 | * @param boolean $includeSheet |
||
1012 | * @throws \Exception |
||
1013 | */ |
||
1014 | 4 | protected function writeTypeBar3D(XMLWriter $objWriter, Bar3D $subject, $includeSheet = false) |
|
1015 | { |
||
1016 | // c:bar3DChart |
||
1017 | 4 | $objWriter->startElement('c:bar3DChart'); |
|
1018 | |||
1019 | // c:barDir |
||
1020 | 4 | $objWriter->startElement('c:barDir'); |
|
1021 | 4 | $objWriter->writeAttribute('val', $subject->getBarDirection()); |
|
1022 | 4 | $objWriter->endElement(); |
|
1023 | |||
1024 | // c:grouping |
||
1025 | 4 | $objWriter->startElement('c:grouping'); |
|
1026 | 4 | $objWriter->writeAttribute('val', $subject->getBarGrouping()); |
|
1027 | 4 | $objWriter->endElement(); |
|
1028 | |||
1029 | // Write series |
||
1030 | 4 | $seriesIndex = 0; |
|
1031 | 4 | foreach ($subject->getSeries() as $series) { |
|
1032 | // c:ser |
||
1033 | 4 | $objWriter->startElement('c:ser'); |
|
1034 | |||
1035 | // c:idx |
||
1036 | 4 | $objWriter->startElement('c:idx'); |
|
1037 | 4 | $objWriter->writeAttribute('val', $seriesIndex); |
|
1038 | 4 | $objWriter->endElement(); |
|
1039 | |||
1040 | // c:order |
||
1041 | 4 | $objWriter->startElement('c:order'); |
|
1042 | 4 | $objWriter->writeAttribute('val', $seriesIndex); |
|
1043 | 4 | $objWriter->endElement(); |
|
1044 | |||
1045 | // c:tx |
||
1046 | 4 | $objWriter->startElement('c:tx'); |
|
1047 | 4 | $coords = ($includeSheet ? 'Sheet1!$' . \PHPExcel_Cell::stringFromColumnIndex(1 + $seriesIndex) . '$1' : ''); |
|
1048 | 4 | $this->writeSingleValueOrReference($objWriter, $includeSheet, $series->getTitle(), $coords); |
|
1049 | 4 | $objWriter->endElement(); |
|
1050 | |||
1051 | // Fills for points? |
||
1052 | 4 | $dataPointFills = $series->getDataPointFills(); |
|
1053 | 4 | foreach ($dataPointFills as $key => $value) { |
|
1054 | // c:dPt |
||
1055 | 1 | $objWriter->startElement('c:dPt'); |
|
1056 | |||
1057 | // c:idx |
||
1058 | 1 | $this->writeElementWithValAttribute($objWriter, 'c:idx', $key); |
|
1059 | |||
1060 | 1 | if ($value->getFillType() != Fill::FILL_NONE) { |
|
1061 | // c:spPr |
||
1062 | 1 | $objWriter->startElement('c:spPr'); |
|
1063 | // Write fill |
||
1064 | 1 | $this->writeFill($objWriter, $value); |
|
1065 | // ## c:spPr |
||
1066 | 1 | $objWriter->endElement(); |
|
1067 | } |
||
1068 | |||
1069 | // ## c:dPt |
||
1070 | 1 | $objWriter->endElement(); |
|
1071 | } |
||
1072 | |||
1073 | // c:dLbls |
||
1074 | 4 | $objWriter->startElement('c:dLbls'); |
|
1075 | |||
1076 | // c:txPr |
||
1077 | 4 | $objWriter->startElement('c:txPr'); |
|
1078 | |||
1079 | // a:bodyPr |
||
1080 | 4 | $objWriter->writeElement('a:bodyPr', null); |
|
1081 | |||
1082 | // a:lstStyle |
||
1083 | 4 | $objWriter->writeElement('a:lstStyle', null); |
|
1084 | |||
1085 | // a:p |
||
1086 | 4 | $objWriter->startElement('a:p'); |
|
1087 | |||
1088 | // a:pPr |
||
1089 | 4 | $objWriter->startElement('a:pPr'); |
|
1090 | |||
1091 | // a:defRPr |
||
1092 | 4 | $objWriter->startElement('a:defRPr'); |
|
1093 | |||
1094 | 4 | $objWriter->writeAttribute('b', ($series->getFont()->isBold() ? 'true' : 'false')); |
|
1095 | 4 | $objWriter->writeAttribute('i', ($series->getFont()->isItalic() ? 'true' : 'false')); |
|
1096 | 4 | $objWriter->writeAttribute('strike', ($series->getFont()->isStrikethrough() ? 'sngStrike' : 'noStrike')); |
|
1097 | 4 | $objWriter->writeAttribute('sz', ($series->getFont()->getSize() * 100)); |
|
1098 | 4 | $objWriter->writeAttribute('u', $series->getFont()->getUnderline()); |
|
1099 | 4 | $objWriter->writeAttributeIf($series->getFont()->isSuperScript(), 'baseline', '30000'); |
|
1100 | 4 | $objWriter->writeAttributeIf($series->getFont()->isSubScript(), 'baseline', '-25000'); |
|
1101 | |||
1102 | // Font - a:solidFill |
||
1103 | 4 | $objWriter->startElement('a:solidFill'); |
|
1104 | |||
1105 | 4 | $this->writeColor($objWriter, $series->getFont()->getColor()); |
|
1106 | |||
1107 | 4 | $objWriter->endElement(); |
|
1108 | |||
1109 | // Font - a:latin |
||
1110 | 4 | $objWriter->startElement('a:latin'); |
|
1111 | 4 | $objWriter->writeAttribute('typeface', $series->getFont()->getName()); |
|
1112 | 4 | $objWriter->endElement(); |
|
1113 | |||
1114 | 4 | $objWriter->endElement(); |
|
1115 | |||
1116 | 4 | $objWriter->endElement(); |
|
1117 | |||
1118 | // a:endParaRPr |
||
1119 | 4 | $objWriter->startElement('a:endParaRPr'); |
|
1120 | 4 | $objWriter->writeAttribute('lang', 'en-US'); |
|
1121 | 4 | $objWriter->writeAttribute('dirty', '0'); |
|
1122 | 4 | $objWriter->endElement(); |
|
1123 | |||
1124 | 4 | $objWriter->endElement(); |
|
1125 | |||
1126 | 4 | $objWriter->endElement(); |
|
1127 | |||
1128 | // c:showVal |
||
1129 | 4 | $this->writeElementWithValAttribute($objWriter, 'c:showVal', $series->hasShowValue() ? '1' : '0'); |
|
1130 | |||
1131 | // c:showCatName |
||
1132 | 4 | $this->writeElementWithValAttribute($objWriter, 'c:showCatName', $series->hasShowCategoryName() ? '1' : '0'); |
|
1133 | |||
1134 | // c:showSerName |
||
1135 | 4 | $this->writeElementWithValAttribute($objWriter, 'c:showSerName', $series->hasShowSeriesName() ? '1' : '0'); |
|
1136 | |||
1137 | // c:showPercent |
||
1138 | 4 | $this->writeElementWithValAttribute($objWriter, 'c:showPercent', $series->hasShowPercentage() ? '1' : '0'); |
|
1139 | |||
1140 | // c:showLeaderLines |
||
1141 | 4 | $this->writeElementWithValAttribute($objWriter, 'c:showLeaderLines', $series->hasShowLeaderLines() ? '1' : '0'); |
|
1142 | |||
1143 | // c:separator |
||
1144 | 4 | $objWriter->writeElementIf($series->hasShowSeparator(), 'c:separator', 'val', $series->getSeparator()); |
|
1145 | |||
1146 | 4 | $objWriter->endElement(); |
|
1147 | |||
1148 | // c:spPr |
||
1149 | 4 | if ($series->getFill()->getFillType() != Fill::FILL_NONE) { |
|
1150 | // c:spPr |
||
1151 | $objWriter->startElement('c:spPr'); |
||
1152 | // Write fill |
||
1153 | $this->writeFill($objWriter, $series->getFill()); |
||
1154 | // ## c:spPr |
||
1155 | $objWriter->endElement(); |
||
1156 | } |
||
1157 | |||
1158 | // Write X axis data |
||
1159 | 4 | $axisXData = array_keys($series->getValues()); |
|
1160 | |||
1161 | // c:cat |
||
1162 | 4 | $objWriter->startElement('c:cat'); |
|
1163 | 4 | $this->writeMultipleValuesOrReference($objWriter, $includeSheet, $axisXData, 'Sheet1!$A$2:$A$' . (1 + count($axisXData))); |
|
1164 | 4 | $objWriter->endElement(); |
|
1165 | |||
1166 | // Write Y axis data |
||
1167 | 4 | $axisYData = array_values($series->getValues()); |
|
1168 | |||
1169 | // c:val |
||
1170 | 4 | $objWriter->startElement('c:val'); |
|
1171 | 4 | $coords = ($includeSheet ? 'Sheet1!$' . \PHPExcel_Cell::stringFromColumnIndex($seriesIndex + 1) . '$2:$' . \PHPExcel_Cell::stringFromColumnIndex($seriesIndex + 1) . '$' . (1 + count($axisYData)) : ''); |
|
1172 | 4 | $this->writeMultipleValuesOrReference($objWriter, $includeSheet, $axisYData, $coords); |
|
1173 | 4 | $objWriter->endElement(); |
|
1174 | |||
1175 | 4 | $objWriter->endElement(); |
|
1176 | |||
1177 | 4 | ++$seriesIndex; |
|
1178 | } |
||
1179 | |||
1180 | // c:gapWidth |
||
1181 | 4 | $objWriter->startElement('c:gapWidth'); |
|
1182 | 4 | $objWriter->writeAttribute('val', $subject->getGapWidthPercent()); |
|
1183 | 4 | $objWriter->endElement(); |
|
1184 | |||
1185 | // c:shape |
||
1186 | 4 | $objWriter->startElement('c:shape'); |
|
1187 | 4 | $objWriter->writeAttribute('val', 'box'); |
|
1188 | 4 | $objWriter->endElement(); |
|
1189 | |||
1190 | // c:axId |
||
1191 | 4 | $objWriter->startElement('c:axId'); |
|
1192 | 4 | $objWriter->writeAttribute('val', '52743552'); |
|
1193 | 4 | $objWriter->endElement(); |
|
1194 | |||
1195 | // c:axId |
||
1196 | 4 | $objWriter->startElement('c:axId'); |
|
1197 | 4 | $objWriter->writeAttribute('val', '52749440'); |
|
1198 | 4 | $objWriter->endElement(); |
|
1199 | |||
1200 | // c:axId |
||
1201 | 4 | $objWriter->startElement('c:axId'); |
|
1202 | 4 | $objWriter->writeAttribute('val', '0'); |
|
1203 | 4 | $objWriter->endElement(); |
|
1204 | |||
1205 | 4 | $objWriter->endElement(); |
|
1206 | 4 | } |
|
1207 | |||
1208 | /** |
||
1209 | * Write Type Pie |
||
1210 | * |
||
1211 | * @param \PhpOffice\Common\XMLWriter $objWriter XML Writer |
||
1212 | * @param \PhpOffice\PhpPresentation\Shape\Chart\Type\Pie $subject |
||
1213 | * @param boolean $includeSheet |
||
1214 | * @throws \Exception |
||
1215 | */ |
||
1216 | 2 | protected function writeTypePie(XMLWriter $objWriter, Pie $subject, $includeSheet = false) |
|
1217 | { |
||
1218 | // c:pieChart |
||
1219 | 2 | $objWriter->startElement('c:pieChart'); |
|
1220 | |||
1221 | // c:varyColors |
||
1222 | 2 | $objWriter->startElement('c:varyColors'); |
|
1223 | 2 | $objWriter->writeAttribute('val', '1'); |
|
1224 | 2 | $objWriter->endElement(); |
|
1225 | |||
1226 | // Write series |
||
1227 | 2 | $seriesIndex = 0; |
|
1228 | 2 | foreach ($subject->getSeries() as $series) { |
|
1229 | // c:ser |
||
1230 | 2 | $objWriter->startElement('c:ser'); |
|
1231 | |||
1232 | // c:idx |
||
1233 | 2 | $objWriter->startElement('c:idx'); |
|
1234 | 2 | $objWriter->writeAttribute('val', $seriesIndex); |
|
1235 | 2 | $objWriter->endElement(); |
|
1236 | |||
1237 | // c:order |
||
1238 | 2 | $objWriter->startElement('c:order'); |
|
1239 | 2 | $objWriter->writeAttribute('val', $seriesIndex); |
|
1240 | 2 | $objWriter->endElement(); |
|
1241 | |||
1242 | // c:tx |
||
1243 | 2 | $objWriter->startElement('c:tx'); |
|
1244 | 2 | $coords = ($includeSheet ? 'Sheet1!$' . \PHPExcel_Cell::stringFromColumnIndex(1 + $seriesIndex) . '$1' : ''); |
|
1245 | 2 | $this->writeSingleValueOrReference($objWriter, $includeSheet, $series->getTitle(), $coords); |
|
1246 | 2 | $objWriter->endElement(); |
|
1247 | |||
1248 | // Fills for points? |
||
1249 | 2 | $dataPointFills = $series->getDataPointFills(); |
|
1250 | 2 | foreach ($dataPointFills as $key => $value) { |
|
1251 | // c:dPt |
||
1252 | 1 | $objWriter->startElement('c:dPt'); |
|
1253 | |||
1254 | // c:idx |
||
1255 | 1 | $this->writeElementWithValAttribute($objWriter, 'c:idx', $key); |
|
1256 | |||
1257 | // c:spPr |
||
1258 | 1 | $objWriter->startElement('c:spPr'); |
|
1259 | |||
1260 | // Write fill |
||
1261 | 1 | $this->writeFill($objWriter, $value); |
|
1262 | |||
1263 | 1 | $objWriter->endElement(); |
|
1264 | |||
1265 | 1 | $objWriter->endElement(); |
|
1266 | } |
||
1267 | |||
1268 | // c:dLbls |
||
1269 | 2 | $objWriter->startElement('c:dLbls'); |
|
1270 | |||
1271 | 2 | if ($series->hasDlblNumFormat()) { |
|
1272 | //c:numFmt |
||
1273 | $objWriter->startElement('c:numFmt'); |
||
1274 | $objWriter->writeAttribute('formatCode', $series->getDlblNumFormat()); |
||
1275 | $objWriter->writeAttribute('sourceLinked', '0'); |
||
1276 | $objWriter->endElement(); |
||
1277 | } |
||
1278 | |||
1279 | // c:txPr |
||
1280 | 2 | $objWriter->startElement('c:txPr'); |
|
1281 | |||
1282 | // a:bodyPr |
||
1283 | 2 | $objWriter->writeElement('a:bodyPr', null); |
|
1284 | |||
1285 | // a:lstStyle |
||
1286 | 2 | $objWriter->writeElement('a:lstStyle', null); |
|
1287 | |||
1288 | // a:p |
||
1289 | 2 | $objWriter->startElement('a:p'); |
|
1290 | |||
1291 | // a:pPr |
||
1292 | 2 | $objWriter->startElement('a:pPr'); |
|
1293 | |||
1294 | // a:defRPr |
||
1295 | 2 | $objWriter->startElement('a:defRPr'); |
|
1296 | |||
1297 | 2 | $objWriter->writeAttribute('b', ($series->getFont()->isBold() ? 'true' : 'false')); |
|
1298 | 2 | $objWriter->writeAttribute('i', ($series->getFont()->isItalic() ? 'true' : 'false')); |
|
1299 | 2 | $objWriter->writeAttribute('strike', ($series->getFont()->isStrikethrough() ? 'sngStrike' : 'noStrike')); |
|
1300 | 2 | $objWriter->writeAttribute('sz', ($series->getFont()->getSize() * 100)); |
|
1301 | 2 | $objWriter->writeAttribute('u', $series->getFont()->getUnderline()); |
|
1302 | 2 | $objWriter->writeAttributeIf($series->getFont()->isSuperScript(), 'baseline', '30000'); |
|
1303 | 2 | $objWriter->writeAttributeIf($series->getFont()->isSubScript(), 'baseline', '-25000'); |
|
1304 | |||
1305 | // Font - a:solidFill |
||
1306 | 2 | $objWriter->startElement('a:solidFill'); |
|
1307 | |||
1308 | 2 | $this->writeColor($objWriter, $series->getFont()->getColor()); |
|
1309 | |||
1310 | 2 | $objWriter->endElement(); |
|
1311 | |||
1312 | // Font - a:latin |
||
1313 | 2 | $objWriter->startElement('a:latin'); |
|
1314 | 2 | $objWriter->writeAttribute('typeface', $series->getFont()->getName()); |
|
1315 | 2 | $objWriter->endElement(); |
|
1316 | |||
1317 | 2 | $objWriter->endElement(); |
|
1318 | |||
1319 | 2 | $objWriter->endElement(); |
|
1320 | |||
1321 | // a:endParaRPr |
||
1322 | 2 | $objWriter->startElement('a:endParaRPr'); |
|
1323 | 2 | $objWriter->writeAttribute('lang', 'en-US'); |
|
1324 | 2 | $objWriter->writeAttribute('dirty', '0'); |
|
1325 | 2 | $objWriter->endElement(); |
|
1326 | |||
1327 | 2 | $objWriter->endElement(); |
|
1328 | |||
1329 | 2 | $objWriter->endElement(); |
|
1330 | |||
1331 | // c:dLblPos |
||
1332 | 2 | $this->writeElementWithValAttribute($objWriter, 'c:dLblPos', $series->getLabelPosition()); |
|
1333 | |||
1334 | // c:showLegendKey |
||
1335 | 2 | $this->writeElementWithValAttribute($objWriter, 'c:showLegendKey', $series->hasShowLegendKey() ? '1' : '0'); |
|
1336 | |||
1337 | // c:showVal |
||
1338 | 2 | $this->writeElementWithValAttribute($objWriter, 'c:showVal', $series->hasShowValue() ? '1' : '0'); |
|
1339 | |||
1340 | // c:showCatName |
||
1341 | 2 | $this->writeElementWithValAttribute($objWriter, 'c:showCatName', $series->hasShowCategoryName() ? '1' : '0'); |
|
1342 | |||
1343 | // c:showSerName |
||
1344 | 2 | $this->writeElementWithValAttribute($objWriter, 'c:showSerName', $series->hasShowSeriesName() ? '1' : '0'); |
|
1345 | |||
1346 | // c:showPercent |
||
1347 | 2 | $this->writeElementWithValAttribute($objWriter, 'c:showPercent', $series->hasShowPercentage() ? '1' : '0'); |
|
1348 | |||
1349 | // c:showLeaderLines |
||
1350 | 2 | $this->writeElementWithValAttribute($objWriter, 'c:showLeaderLines', $series->hasShowLeaderLines() ? '1' : '0'); |
|
1351 | |||
1352 | // c:separator |
||
1353 | 2 | $objWriter->writeElementIf($series->hasShowSeparator(), 'c:separator', 'val', $series->getSeparator()); |
|
1354 | |||
1355 | 2 | $objWriter->endElement(); |
|
1356 | |||
1357 | // Write X axis data |
||
1358 | 2 | $axisXData = array_keys($series->getValues()); |
|
1359 | |||
1360 | // c:cat |
||
1361 | 2 | $objWriter->startElement('c:cat'); |
|
1362 | 2 | $this->writeMultipleValuesOrReference($objWriter, $includeSheet, $axisXData, 'Sheet1!$A$2:$A$' . (1 + count($axisXData))); |
|
1363 | 2 | $objWriter->endElement(); |
|
1364 | |||
1365 | // Write Y axis data |
||
1366 | 2 | $axisYData = array_values($series->getValues()); |
|
1367 | |||
1368 | // c:val |
||
1369 | 2 | $objWriter->startElement('c:val'); |
|
1370 | 2 | $coords = ($includeSheet ? 'Sheet1!$' . \PHPExcel_Cell::stringFromColumnIndex($seriesIndex + 1) . '$2:$' . \PHPExcel_Cell::stringFromColumnIndex($seriesIndex + 1) . '$' . (1 + count($axisYData)) : ''); |
|
1371 | 2 | $this->writeMultipleValuesOrReference($objWriter, $includeSheet, $axisYData, $coords); |
|
1372 | 2 | $objWriter->endElement(); |
|
1373 | |||
1374 | 2 | $objWriter->endElement(); |
|
1375 | |||
1376 | 2 | ++$seriesIndex; |
|
1377 | } |
||
1378 | |||
1379 | 2 | $objWriter->endElement(); |
|
1380 | 2 | } |
|
1381 | |||
1382 | /** |
||
1383 | * Write Type Pie3D |
||
1384 | * |
||
1385 | * @param \PhpOffice\Common\XMLWriter $objWriter XML Writer |
||
1386 | * @param \PhpOffice\PhpPresentation\Shape\Chart\Type\Pie3D $subject |
||
1387 | * @param boolean $includeSheet |
||
1388 | * @throws \Exception |
||
1389 | */ |
||
1390 | 4 | protected function writeTypePie3D(XMLWriter $objWriter, Pie3D $subject, $includeSheet = false) |
|
1549 | |||
1550 | /** |
||
1551 | * Write Type Line |
||
1552 | * |
||
1553 | * @param \PhpOffice\Common\XMLWriter $objWriter XML Writer |
||
1554 | * @param \PhpOffice\PhpPresentation\Shape\Chart\Type\Line $subject |
||
1555 | * @param boolean $includeSheet |
||
1556 | * @throws \Exception |
||
1557 | */ |
||
1558 | 15 | protected function writeTypeLine(XMLWriter $objWriter, Line $subject, $includeSheet = false) |
|
1722 | |||
1723 | /** |
||
1724 | * Write Type Scatter |
||
1725 | * |
||
1726 | * @param \PhpOffice\Common\XMLWriter $objWriter XML Writer |
||
1727 | * @param \PhpOffice\PhpPresentation\Shape\Chart\Type\Scatter $subject |
||
1728 | * @param boolean $includeSheet |
||
1729 | * @throws \Exception |
||
1730 | */ |
||
1731 | 5 | protected function writeTypeScatter(XMLWriter $objWriter, Scatter $subject, $includeSheet = false) |
|
1897 | |||
1898 | /** |
||
1899 | * Write chart relationships to XML format |
||
1900 | * |
||
1901 | * @param \PhpOffice\PhpPresentation\Shape\Chart $pChart |
||
1902 | * @return string XML Output |
||
1903 | * @throws \Exception |
||
1904 | */ |
||
1905 | public function writeChartRelationships(Chart $pChart) |
||
1906 | { |
||
1907 | // Create XML writer |
||
1908 | $objWriter = new XMLWriter(XMLWriter::STORAGE_MEMORY); |
||
1909 | |||
1910 | // XML header |
||
1911 | $objWriter->startDocument('1.0', 'UTF-8', 'yes'); |
||
1912 | |||
1913 | // Relationships |
||
1914 | $objWriter->startElement('Relationships'); |
||
1915 | $objWriter->writeAttribute('xmlns', 'http://schemas.openxmlformats.org/package/2006/relationships'); |
||
1916 | |||
1917 | // Write spreadsheet relationship? |
||
1918 | if ($pChart->hasIncludedSpreadsheet()) { |
||
1919 | $this->writeRelationship($objWriter, 1, 'http://schemas.openxmlformats.org/officeDocument/2006/relationships/package', '../embeddings/' . $pChart->getIndexedFilename() . '.xlsx'); |
||
1920 | } |
||
1921 | |||
1922 | $objWriter->endElement(); |
||
1923 | |||
1924 | // Return |
||
1925 | return $objWriter->getData(); |
||
1926 | } |
||
1927 | |||
1928 | /** |
||
1929 | * @param XMLWriter $objWriter |
||
1930 | * @param Chart\Marker $oMarker |
||
1931 | */ |
||
1932 | 16 | protected function writeSeriesMarker(XMLWriter $objWriter, Chart\Marker $oMarker) |
|
1962 | |||
1963 | /** |
||
1964 | * @param XMLWriter $objWriter |
||
1965 | * @param Chart\Axis $oAxis |
||
1966 | * @param $typeAxis |
||
1967 | * @param Chart\Type\AbstractType $typeChart |
||
1968 | */ |
||
1969 | 28 | protected function writeAxis(XMLWriter $objWriter, Chart\Axis $oAxis, $typeAxis, Chart\Type\AbstractType $typeChart) |
|
1970 | { |
||
1971 | 28 | if ($typeAxis != Chart\Axis::AXIS_X && $typeAxis != Chart\Axis::AXIS_Y) { |
|
1972 | return; |
||
1973 | } |
||
1974 | |||
1975 | 28 | if ($typeAxis == Chart\Axis::AXIS_X) { |
|
1976 | 28 | $mainElement = 'c:catAx'; |
|
1977 | 28 | $axIdVal = '52743552'; |
|
1978 | 28 | $axPosVal = 'b'; |
|
1979 | 28 | $crossAxVal = '52749440'; |
|
1980 | } else { |
||
1981 | 28 | $mainElement = 'c:valAx'; |
|
1982 | 28 | $axIdVal = '52749440'; |
|
1983 | 28 | $axPosVal = 'l'; |
|
1984 | 28 | $crossAxVal = '52743552'; |
|
1985 | } |
||
1986 | |||
1987 | // $mainElement |
||
1988 | 28 | $objWriter->startElement($mainElement); |
|
1989 | |||
1990 | // $mainElement > c:axId |
||
1991 | 28 | $objWriter->startElement('c:axId'); |
|
1992 | 28 | $objWriter->writeAttribute('val', $axIdVal); |
|
1993 | 28 | $objWriter->endElement(); |
|
1994 | |||
1995 | // $mainElement > c:scaling |
||
1996 | 28 | $objWriter->startElement('c:scaling'); |
|
1997 | |||
1998 | // $mainElement > c:scaling > c:orientation |
||
1999 | 28 | $objWriter->startElement('c:orientation'); |
|
2000 | 28 | $objWriter->writeAttribute('val', 'minMax'); |
|
2001 | 28 | $objWriter->endElement(); |
|
2002 | |||
2003 | 28 | if ($oAxis->getMaxBounds() != null) { |
|
|
|||
2004 | 1 | $objWriter->startElement('c:max'); |
|
2005 | 1 | $objWriter->writeAttribute('val', $oAxis->getMaxBounds()); |
|
2006 | 1 | $objWriter->endElement(); |
|
2007 | } |
||
2008 | |||
2009 | 28 | if ($oAxis->getMinBounds() != null) { |
|
2010 | 1 | $objWriter->startElement('c:min'); |
|
2011 | 1 | $objWriter->writeAttribute('val', $oAxis->getMinBounds()); |
|
2012 | 1 | $objWriter->endElement(); |
|
2013 | } |
||
2014 | |||
2015 | // $mainElement > ##c:scaling |
||
2016 | 28 | $objWriter->endElement(); |
|
2017 | |||
2018 | // $mainElement > c:delete |
||
2019 | 28 | $objWriter->startElement('c:delete'); |
|
2020 | 28 | $objWriter->writeAttribute('val', $oAxis->isVisible() ? '0' : '1'); |
|
2021 | 28 | $objWriter->endElement(); |
|
2022 | |||
2023 | // $mainElement > c:axPos |
||
2024 | 28 | $objWriter->startElement('c:axPos'); |
|
2025 | 28 | $objWriter->writeAttribute('val', $axPosVal); |
|
2026 | 28 | $objWriter->endElement(); |
|
2027 | |||
2028 | 28 | $oMajorGridlines = $oAxis->getMajorGridlines(); |
|
2029 | 28 | if ($oMajorGridlines instanceof Gridlines) { |
|
2030 | 1 | $objWriter->startElement('c:majorGridlines'); |
|
2031 | |||
2032 | 1 | $this->writeAxisGridlines($objWriter, $oMajorGridlines); |
|
2033 | |||
2034 | 1 | $objWriter->endElement(); |
|
2035 | } |
||
2036 | |||
2037 | 28 | $oMinorGridlines = $oAxis->getMinorGridlines(); |
|
2038 | 28 | if ($oMinorGridlines instanceof Gridlines) { |
|
2039 | 1 | $objWriter->startElement('c:minorGridlines'); |
|
2040 | |||
2041 | 1 | $this->writeAxisGridlines($objWriter, $oMinorGridlines); |
|
2042 | |||
2043 | 1 | $objWriter->endElement(); |
|
2044 | } |
||
2045 | |||
2046 | 28 | if ($oAxis->getTitle() != '') { |
|
2047 | // c:title |
||
2048 | 28 | $objWriter->startElement('c:title'); |
|
2049 | |||
2050 | // c:tx |
||
2051 | 28 | $objWriter->startElement('c:tx'); |
|
2052 | |||
2053 | // c:rich |
||
2054 | 28 | $objWriter->startElement('c:rich'); |
|
2055 | |||
2056 | // a:bodyPr |
||
2057 | 28 | $objWriter->writeElement('a:bodyPr', null); |
|
2058 | |||
2059 | // a:lstStyle |
||
2060 | 28 | $objWriter->writeElement('a:lstStyle', null); |
|
2061 | |||
2062 | // a:p |
||
2063 | 28 | $objWriter->startElement('a:p'); |
|
2064 | |||
2065 | // a:pPr |
||
2066 | 28 | $objWriter->startElement('a:pPr'); |
|
2067 | |||
2068 | // a:defRPr |
||
2069 | 28 | $objWriter->startElement('a:defRPr'); |
|
2070 | |||
2071 | 28 | $objWriter->writeAttribute('b', ($oAxis->getFont()->isBold() ? 'true' : 'false')); |
|
2072 | 28 | $objWriter->writeAttribute('i', ($oAxis->getFont()->isItalic() ? 'true' : 'false')); |
|
2073 | 28 | $objWriter->writeAttribute('strike', ($oAxis->getFont()->isStrikethrough() ? 'sngStrike' : 'noStrike')); |
|
2074 | 28 | $objWriter->writeAttribute('sz', ($oAxis->getFont()->getSize() * 100)); |
|
2075 | 28 | $objWriter->writeAttribute('u', $oAxis->getFont()->getUnderline()); |
|
2076 | 28 | $objWriter->writeAttributeIf($oAxis->getFont()->isSuperScript(), 'baseline', '30000'); |
|
2077 | 28 | $objWriter->writeAttributeIf($oAxis->getFont()->isSubScript(), 'baseline', '-25000'); |
|
2078 | |||
2079 | // Font - a:solidFill |
||
2080 | 28 | $objWriter->startElement('a:solidFill'); |
|
2081 | 28 | $this->writeColor($objWriter, $oAxis->getFont()->getColor()); |
|
2082 | 28 | $objWriter->endElement(); |
|
2083 | |||
2084 | // Font - a:latin |
||
2085 | 28 | $objWriter->startElement('a:latin'); |
|
2086 | 28 | $objWriter->writeAttribute('typeface', $oAxis->getFont()->getName()); |
|
2087 | 28 | $objWriter->endElement(); |
|
2088 | |||
2089 | 28 | $objWriter->endElement(); |
|
2090 | |||
2091 | // ## a:pPr |
||
2092 | 28 | $objWriter->endElement(); |
|
2093 | |||
2094 | // a:r |
||
2095 | 28 | $objWriter->startElement('a:r'); |
|
2096 | |||
2097 | // a:rPr |
||
2098 | 28 | $objWriter->startElement('a:rPr'); |
|
2099 | 28 | $objWriter->writeAttribute('lang', 'en-US'); |
|
2100 | 28 | $objWriter->writeAttribute('dirty', '0'); |
|
2101 | 28 | $objWriter->endElement(); |
|
2102 | |||
2103 | // a:t |
||
2104 | 28 | $objWriter->writeElement('a:t', $oAxis->getTitle()); |
|
2105 | |||
2106 | // ## a:r |
||
2107 | 28 | $objWriter->endElement(); |
|
2108 | |||
2109 | // a:endParaRPr |
||
2110 | 28 | $objWriter->startElement('a:endParaRPr'); |
|
2111 | 28 | $objWriter->writeAttribute('lang', 'en-US'); |
|
2112 | 28 | $objWriter->writeAttribute('dirty', '0'); |
|
2113 | 28 | $objWriter->endElement(); |
|
2114 | |||
2115 | // ## a:p |
||
2116 | 28 | $objWriter->endElement(); |
|
2117 | |||
2118 | // ## c:rich |
||
2119 | 28 | $objWriter->endElement(); |
|
2120 | |||
2121 | // ## c:tx |
||
2122 | 28 | $objWriter->endElement(); |
|
2123 | |||
2124 | // ## c:title |
||
2125 | 28 | $objWriter->endElement(); |
|
2126 | } |
||
2127 | |||
2128 | // c:numFmt |
||
2129 | 28 | $objWriter->startElement('c:numFmt'); |
|
2130 | 28 | $objWriter->writeAttribute('formatCode', $oAxis->getFormatCode()); |
|
2131 | 28 | $objWriter->writeAttribute('sourceLinked', '1'); |
|
2132 | 28 | $objWriter->endElement(); |
|
2133 | |||
2134 | // c:majorTickMark |
||
2135 | 28 | $objWriter->startElement('c:majorTickMark'); |
|
2136 | 28 | $objWriter->writeAttribute('val', $oAxis->getMajorTickMark()); |
|
2137 | 28 | $objWriter->endElement(); |
|
2138 | |||
2139 | // c:minorTickMark |
||
2140 | 28 | $objWriter->startElement('c:minorTickMark'); |
|
2141 | 28 | $objWriter->writeAttribute('val', $oAxis->getMinorTickMark()); |
|
2142 | 28 | $objWriter->endElement(); |
|
2143 | |||
2144 | // c:tickLblPos |
||
2145 | 28 | $objWriter->startElement('c:tickLblPos'); |
|
2146 | 28 | $objWriter->writeAttribute('val', 'nextTo'); |
|
2147 | 28 | $objWriter->endElement(); |
|
2148 | |||
2149 | // c:spPr |
||
2150 | 28 | $objWriter->startElement('c:spPr'); |
|
2151 | // Outline |
||
2152 | 28 | $this->writeOutline($objWriter, $oAxis->getOutline()); |
|
2153 | // ##c:spPr |
||
2154 | 28 | $objWriter->endElement(); |
|
2155 | |||
2156 | // c:crossAx |
||
2157 | 28 | $objWriter->startElement('c:crossAx'); |
|
2158 | 28 | $objWriter->writeAttribute('val', $crossAxVal); |
|
2159 | 28 | $objWriter->endElement(); |
|
2160 | |||
2161 | // c:crosses |
||
2162 | 28 | $objWriter->startElement('c:crosses'); |
|
2163 | 28 | $objWriter->writeAttribute('val', 'autoZero'); |
|
2164 | 28 | $objWriter->endElement(); |
|
2165 | |||
2166 | 28 | if ($typeAxis == Chart\Axis::AXIS_X) { |
|
2167 | // c:lblAlgn |
||
2168 | 28 | $objWriter->startElement('c:lblAlgn'); |
|
2169 | 28 | $objWriter->writeAttribute('val', 'ctr'); |
|
2170 | 28 | $objWriter->endElement(); |
|
2171 | |||
2172 | // c:lblOffset |
||
2173 | 28 | $objWriter->startElement('c:lblOffset'); |
|
2174 | 28 | $objWriter->writeAttribute('val', '100%'); |
|
2175 | 28 | $objWriter->endElement(); |
|
2176 | } |
||
2177 | |||
2178 | 28 | if ($typeAxis == Chart\Axis::AXIS_Y) { |
|
2179 | // c:crossBetween |
||
2180 | 28 | $objWriter->startElement('c:crossBetween'); |
|
2181 | // midCat : Position Axis On Tick Marks |
||
2182 | // between : Between Tick Marks |
||
2183 | 28 | if ($typeChart instanceof Area) { |
|
2184 | 1 | $objWriter->writeAttribute('val', 'midCat'); |
|
2185 | } else { |
||
2186 | 27 | $objWriter->writeAttribute('val', 'between'); |
|
2187 | } |
||
2188 | 28 | $objWriter->endElement(); |
|
2189 | |||
2190 | // c:majorUnit |
||
2191 | 28 | if ($oAxis->getMajorUnit() != null) { |
|
2192 | 1 | $objWriter->startElement('c:majorUnit'); |
|
2193 | 1 | $objWriter->writeAttribute('val', $oAxis->getMajorUnit()); |
|
2194 | 1 | $objWriter->endElement(); |
|
2195 | } |
||
2196 | |||
2197 | // c:minorUnit |
||
2198 | 28 | if ($oAxis->getMinorUnit() != null) { |
|
2199 | 1 | $objWriter->startElement('c:minorUnit'); |
|
2200 | 1 | $objWriter->writeAttribute('val', $oAxis->getMinorUnit()); |
|
2201 | 1 | $objWriter->endElement(); |
|
2202 | } |
||
2203 | } |
||
2204 | |||
2205 | 28 | $objWriter->endElement(); |
|
2206 | 28 | } |
|
2207 | |||
2208 | /** |
||
2209 | * @param XMLWriter $objWriter |
||
2210 | * @param Gridlines $oGridlines |
||
2211 | */ |
||
2212 | 1 | protected function writeAxisGridlines(XMLWriter $objWriter, Gridlines $oGridlines) |
|
2223 | } |
||
2224 |