Total Complexity | 213 |
Total Lines | 1194 |
Duplicated Lines | 4.19 % |
Coverage | 89.48% |
Changes | 0 |
Duplicate code is one of the most pungent code smells. A rule that is often used is to re-structure code once it is duplicated in three or more places.
Common duplication problems, and corresponding solutions are:
Complex classes like Worksheet 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.
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 Worksheet, and based on these observations, apply Extract Interface, too.
1 | <?php |
||
22 | class Worksheet extends WriterPart |
||
23 | { |
||
24 | /** |
||
25 | * Write worksheet to XML format. |
||
26 | * |
||
27 | * @param PhpspreadsheetWorksheet $pSheet |
||
28 | * @param string[] $pStringTable |
||
29 | * @param bool $includeCharts Flag indicating if we should write charts |
||
30 | * |
||
31 | * @throws WriterException |
||
32 | * |
||
33 | * @return string XML Output |
||
34 | */ |
||
35 | 57 | public function writeWorksheet(PhpspreadsheetWorksheet $pSheet, $pStringTable = null, $includeCharts = false) |
|
36 | { |
||
37 | // Create XML writer |
||
38 | 57 | $objWriter = null; |
|
39 | 57 | View Code Duplication | if ($this->getParentWriter()->getUseDiskCaching()) { |
|
|||
40 | $objWriter = new XMLWriter(XMLWriter::STORAGE_DISK, $this->getParentWriter()->getDiskCachingDirectory()); |
||
41 | } else { |
||
42 | 57 | $objWriter = new XMLWriter(XMLWriter::STORAGE_MEMORY); |
|
43 | } |
||
44 | |||
45 | // XML header |
||
46 | 57 | $objWriter->startDocument('1.0', 'UTF-8', 'yes'); |
|
47 | |||
48 | // Worksheet |
||
49 | 57 | $objWriter->startElement('worksheet'); |
|
50 | 57 | $objWriter->writeAttribute('xml:space', 'preserve'); |
|
51 | 57 | $objWriter->writeAttribute('xmlns', 'http://schemas.openxmlformats.org/spreadsheetml/2006/main'); |
|
52 | 57 | $objWriter->writeAttribute('xmlns:r', 'http://schemas.openxmlformats.org/officeDocument/2006/relationships'); |
|
53 | |||
54 | // sheetPr |
||
55 | 57 | $this->writeSheetPr($objWriter, $pSheet); |
|
56 | |||
57 | // Dimension |
||
58 | 57 | $this->writeDimension($objWriter, $pSheet); |
|
59 | |||
60 | // sheetViews |
||
61 | 57 | $this->writeSheetViews($objWriter, $pSheet); |
|
62 | |||
63 | // sheetFormatPr |
||
64 | 57 | $this->writeSheetFormatPr($objWriter, $pSheet); |
|
65 | |||
66 | // cols |
||
67 | 57 | $this->writeCols($objWriter, $pSheet); |
|
68 | |||
69 | // sheetData |
||
70 | 57 | $this->writeSheetData($objWriter, $pSheet, $pStringTable); |
|
1 ignored issue
–
show
|
|||
71 | |||
72 | // sheetProtection |
||
73 | 57 | $this->writeSheetProtection($objWriter, $pSheet); |
|
74 | |||
75 | // protectedRanges |
||
76 | 57 | $this->writeProtectedRanges($objWriter, $pSheet); |
|
77 | |||
78 | // autoFilter |
||
79 | 57 | $this->writeAutoFilter($objWriter, $pSheet); |
|
80 | |||
81 | // mergeCells |
||
82 | 57 | $this->writeMergeCells($objWriter, $pSheet); |
|
83 | |||
84 | // conditionalFormatting |
||
85 | 57 | $this->writeConditionalFormatting($objWriter, $pSheet); |
|
86 | |||
87 | // dataValidations |
||
88 | 57 | $this->writeDataValidations($objWriter, $pSheet); |
|
89 | |||
90 | // hyperlinks |
||
91 | 57 | $this->writeHyperlinks($objWriter, $pSheet); |
|
92 | |||
93 | // Print options |
||
94 | 57 | $this->writePrintOptions($objWriter, $pSheet); |
|
95 | |||
96 | // Page margins |
||
97 | 57 | $this->writePageMargins($objWriter, $pSheet); |
|
98 | |||
99 | // Page setup |
||
100 | 57 | $this->writePageSetup($objWriter, $pSheet); |
|
101 | |||
102 | // Header / footer |
||
103 | 57 | $this->writeHeaderFooter($objWriter, $pSheet); |
|
104 | |||
105 | // Breaks |
||
106 | 57 | $this->writeBreaks($objWriter, $pSheet); |
|
107 | |||
108 | // Drawings and/or Charts |
||
109 | 57 | $this->writeDrawings($objWriter, $pSheet, $includeCharts); |
|
110 | |||
111 | // LegacyDrawing |
||
112 | 57 | $this->writeLegacyDrawing($objWriter, $pSheet); |
|
113 | |||
114 | // LegacyDrawingHF |
||
115 | 57 | $this->writeLegacyDrawingHF($objWriter, $pSheet); |
|
116 | |||
117 | 57 | $objWriter->endElement(); |
|
118 | |||
119 | // Return |
||
120 | 57 | return $objWriter->getData(); |
|
121 | } |
||
122 | |||
123 | /** |
||
124 | * Write SheetPr. |
||
125 | * |
||
126 | * @param XMLWriter $objWriter XML Writer |
||
127 | * @param PhpspreadsheetWorksheet $pSheet Worksheet |
||
128 | * |
||
129 | * @throws WriterException |
||
130 | */ |
||
131 | 57 | private function writeSheetPr(XMLWriter $objWriter, PhpspreadsheetWorksheet $pSheet) |
|
132 | { |
||
133 | // sheetPr |
||
134 | 57 | $objWriter->startElement('sheetPr'); |
|
135 | 57 | if ($pSheet->getParent()->hasMacros()) { |
|
136 | //if the workbook have macros, we need to have codeName for the sheet |
||
137 | if ($pSheet->hasCodeName() == false) { |
||
138 | $pSheet->setCodeName($pSheet->getTitle()); |
||
139 | } |
||
140 | $objWriter->writeAttribute('codeName', $pSheet->getCodeName()); |
||
141 | } |
||
142 | 57 | $autoFilterRange = $pSheet->getAutoFilter()->getRange(); |
|
143 | 57 | if (!empty($autoFilterRange)) { |
|
144 | 3 | $objWriter->writeAttribute('filterMode', 1); |
|
145 | 3 | $pSheet->getAutoFilter()->showHideRows(); |
|
146 | } |
||
147 | |||
148 | // tabColor |
||
149 | 57 | if ($pSheet->isTabColorSet()) { |
|
150 | 6 | $objWriter->startElement('tabColor'); |
|
151 | 6 | $objWriter->writeAttribute('rgb', $pSheet->getTabColor()->getARGB()); |
|
152 | 6 | $objWriter->endElement(); |
|
153 | } |
||
154 | |||
155 | // outlinePr |
||
156 | 57 | $objWriter->startElement('outlinePr'); |
|
157 | 57 | $objWriter->writeAttribute('summaryBelow', ($pSheet->getShowSummaryBelow() ? '1' : '0')); |
|
158 | 57 | $objWriter->writeAttribute('summaryRight', ($pSheet->getShowSummaryRight() ? '1' : '0')); |
|
159 | 57 | $objWriter->endElement(); |
|
160 | |||
161 | // pageSetUpPr |
||
162 | 57 | if ($pSheet->getPageSetup()->getFitToPage()) { |
|
163 | $objWriter->startElement('pageSetUpPr'); |
||
164 | $objWriter->writeAttribute('fitToPage', '1'); |
||
165 | $objWriter->endElement(); |
||
166 | } |
||
167 | |||
168 | 57 | $objWriter->endElement(); |
|
169 | 57 | } |
|
170 | |||
171 | /** |
||
172 | * Write Dimension. |
||
173 | * |
||
174 | * @param XMLWriter $objWriter XML Writer |
||
175 | * @param PhpspreadsheetWorksheet $pSheet Worksheet |
||
176 | * |
||
177 | * @throws WriterException |
||
178 | */ |
||
179 | 57 | private function writeDimension(XMLWriter $objWriter, PhpspreadsheetWorksheet $pSheet) |
|
180 | { |
||
181 | // dimension |
||
182 | 57 | $objWriter->startElement('dimension'); |
|
183 | 57 | $objWriter->writeAttribute('ref', $pSheet->calculateWorksheetDimension()); |
|
184 | 57 | $objWriter->endElement(); |
|
185 | 57 | } |
|
186 | |||
187 | /** |
||
188 | * Write SheetViews. |
||
189 | * |
||
190 | * @param XMLWriter $objWriter XML Writer |
||
191 | * @param PhpspreadsheetWorksheet $pSheet Worksheet |
||
192 | * |
||
193 | * @throws WriterException |
||
194 | */ |
||
195 | 57 | private function writeSheetViews(XMLWriter $objWriter, PhpspreadsheetWorksheet $pSheet) |
|
196 | { |
||
197 | // sheetViews |
||
198 | 57 | $objWriter->startElement('sheetViews'); |
|
199 | |||
200 | // Sheet selected? |
||
201 | 57 | $sheetSelected = false; |
|
202 | 57 | if ($this->getParentWriter()->getSpreadsheet()->getIndex($pSheet) == $this->getParentWriter()->getSpreadsheet()->getActiveSheetIndex()) { |
|
203 | 57 | $sheetSelected = true; |
|
204 | } |
||
205 | |||
206 | // sheetView |
||
207 | 57 | $objWriter->startElement('sheetView'); |
|
208 | 57 | $objWriter->writeAttribute('tabSelected', $sheetSelected ? '1' : '0'); |
|
209 | 57 | $objWriter->writeAttribute('workbookViewId', '0'); |
|
210 | |||
211 | // Zoom scales |
||
212 | 57 | if ($pSheet->getSheetView()->getZoomScale() != 100) { |
|
213 | $objWriter->writeAttribute('zoomScale', $pSheet->getSheetView()->getZoomScale()); |
||
214 | } |
||
215 | 57 | if ($pSheet->getSheetView()->getZoomScaleNormal() != 100) { |
|
216 | $objWriter->writeAttribute('zoomScaleNormal', $pSheet->getSheetView()->getZoomScaleNormal()); |
||
217 | } |
||
218 | |||
219 | // View Layout Type |
||
220 | 57 | if ($pSheet->getSheetView()->getView() !== SheetView::SHEETVIEW_NORMAL) { |
|
221 | 1 | $objWriter->writeAttribute('view', $pSheet->getSheetView()->getView()); |
|
222 | } |
||
223 | |||
224 | // Gridlines |
||
225 | 57 | if ($pSheet->getShowGridlines()) { |
|
226 | 57 | $objWriter->writeAttribute('showGridLines', 'true'); |
|
227 | } else { |
||
228 | $objWriter->writeAttribute('showGridLines', 'false'); |
||
229 | } |
||
230 | |||
231 | // Row and column headers |
||
232 | 57 | if ($pSheet->getShowRowColHeaders()) { |
|
233 | 57 | $objWriter->writeAttribute('showRowColHeaders', '1'); |
|
234 | } else { |
||
235 | $objWriter->writeAttribute('showRowColHeaders', '0'); |
||
236 | } |
||
237 | |||
238 | // Right-to-left |
||
239 | 57 | if ($pSheet->getRightToLeft()) { |
|
240 | $objWriter->writeAttribute('rightToLeft', 'true'); |
||
241 | } |
||
242 | |||
243 | 57 | $activeCell = $pSheet->getActiveCell(); |
|
244 | |||
245 | // Pane |
||
246 | 57 | $pane = ''; |
|
247 | 57 | if ($pSheet->getFreezePane()) { |
|
248 | 4 | list($xSplit, $ySplit) = Coordinate::coordinateFromString($pSheet->getFreezePane()); |
|
249 | 4 | $xSplit = Coordinate::columnIndexFromString($xSplit); |
|
250 | 4 | --$xSplit; |
|
251 | 4 | --$ySplit; |
|
252 | |||
253 | 4 | $topLeftCell = $pSheet->getTopLeftCell(); |
|
254 | 4 | $activeCell = $topLeftCell; |
|
255 | |||
256 | // pane |
||
257 | 4 | $pane = 'topRight'; |
|
258 | 4 | $objWriter->startElement('pane'); |
|
259 | 4 | if ($xSplit > 0) { |
|
260 | 1 | $objWriter->writeAttribute('xSplit', $xSplit); |
|
261 | } |
||
262 | 4 | if ($ySplit > 0) { |
|
263 | 4 | $objWriter->writeAttribute('ySplit', $ySplit); |
|
264 | 4 | $pane = ($xSplit > 0) ? 'bottomRight' : 'bottomLeft'; |
|
265 | } |
||
266 | 4 | $objWriter->writeAttribute('topLeftCell', $topLeftCell); |
|
267 | 4 | $objWriter->writeAttribute('activePane', $pane); |
|
268 | 4 | $objWriter->writeAttribute('state', 'frozen'); |
|
269 | 4 | $objWriter->endElement(); |
|
270 | |||
271 | 4 | if (($xSplit > 0) && ($ySplit > 0)) { |
|
272 | // Write additional selections if more than two panes (ie both an X and a Y split) |
||
273 | 1 | $objWriter->startElement('selection'); |
|
274 | 1 | $objWriter->writeAttribute('pane', 'topRight'); |
|
275 | 1 | $objWriter->endElement(); |
|
276 | 1 | $objWriter->startElement('selection'); |
|
277 | 1 | $objWriter->writeAttribute('pane', 'bottomLeft'); |
|
278 | 1 | $objWriter->endElement(); |
|
279 | } |
||
280 | } |
||
281 | |||
282 | // Selection |
||
283 | // Only need to write selection element if we have a split pane |
||
284 | // We cheat a little by over-riding the active cell selection, setting it to the split cell |
||
285 | 57 | $objWriter->startElement('selection'); |
|
286 | 57 | if ($pane != '') { |
|
287 | 4 | $objWriter->writeAttribute('pane', $pane); |
|
288 | } |
||
289 | 57 | $objWriter->writeAttribute('activeCell', $activeCell); |
|
290 | 57 | $objWriter->writeAttribute('sqref', $activeCell); |
|
291 | 57 | $objWriter->endElement(); |
|
292 | |||
293 | 57 | $objWriter->endElement(); |
|
294 | |||
295 | 57 | $objWriter->endElement(); |
|
296 | 57 | } |
|
297 | |||
298 | /** |
||
299 | * Write SheetFormatPr. |
||
300 | * |
||
301 | * @param XMLWriter $objWriter XML Writer |
||
302 | * @param PhpspreadsheetWorksheet $pSheet Worksheet |
||
303 | * |
||
304 | * @throws WriterException |
||
305 | */ |
||
306 | 57 | private function writeSheetFormatPr(XMLWriter $objWriter, PhpspreadsheetWorksheet $pSheet) |
|
307 | { |
||
308 | // sheetFormatPr |
||
309 | 57 | $objWriter->startElement('sheetFormatPr'); |
|
310 | |||
311 | // Default row height |
||
312 | 57 | if ($pSheet->getDefaultRowDimension()->getRowHeight() >= 0) { |
|
313 | 2 | $objWriter->writeAttribute('customHeight', 'true'); |
|
314 | 2 | $objWriter->writeAttribute('defaultRowHeight', StringHelper::formatNumber($pSheet->getDefaultRowDimension()->getRowHeight())); |
|
315 | } else { |
||
316 | 55 | $objWriter->writeAttribute('defaultRowHeight', '14.4'); |
|
317 | } |
||
318 | |||
319 | // Set Zero Height row |
||
320 | 57 | if ((string) $pSheet->getDefaultRowDimension()->getZeroHeight() == '1' || |
|
321 | 57 | strtolower((string) $pSheet->getDefaultRowDimension()->getZeroHeight()) == 'true') { |
|
322 | $objWriter->writeAttribute('zeroHeight', '1'); |
||
323 | } |
||
324 | |||
325 | // Default column width |
||
326 | 57 | if ($pSheet->getDefaultColumnDimension()->getWidth() >= 0) { |
|
327 | 1 | $objWriter->writeAttribute('defaultColWidth', StringHelper::formatNumber($pSheet->getDefaultColumnDimension()->getWidth())); |
|
328 | } |
||
329 | |||
330 | // Outline level - row |
||
331 | 57 | $outlineLevelRow = 0; |
|
332 | 57 | foreach ($pSheet->getRowDimensions() as $dimension) { |
|
333 | 11 | if ($dimension->getOutlineLevel() > $outlineLevelRow) { |
|
334 | 11 | $outlineLevelRow = $dimension->getOutlineLevel(); |
|
335 | } |
||
336 | } |
||
337 | 57 | $objWriter->writeAttribute('outlineLevelRow', (int) $outlineLevelRow); |
|
338 | |||
339 | // Outline level - column |
||
340 | 57 | $outlineLevelCol = 0; |
|
341 | 57 | foreach ($pSheet->getColumnDimensions() as $dimension) { |
|
342 | 21 | if ($dimension->getOutlineLevel() > $outlineLevelCol) { |
|
343 | 21 | $outlineLevelCol = $dimension->getOutlineLevel(); |
|
344 | } |
||
345 | } |
||
346 | 57 | $objWriter->writeAttribute('outlineLevelCol', (int) $outlineLevelCol); |
|
347 | |||
348 | 57 | $objWriter->endElement(); |
|
349 | 57 | } |
|
350 | |||
351 | /** |
||
352 | * Write Cols. |
||
353 | * |
||
354 | * @param XMLWriter $objWriter XML Writer |
||
355 | * @param PhpspreadsheetWorksheet $pSheet Worksheet |
||
356 | * |
||
357 | * @throws WriterException |
||
358 | */ |
||
359 | 57 | private function writeCols(XMLWriter $objWriter, PhpspreadsheetWorksheet $pSheet) |
|
360 | { |
||
361 | // cols |
||
362 | 57 | if (count($pSheet->getColumnDimensions()) > 0) { |
|
363 | 21 | $objWriter->startElement('cols'); |
|
364 | |||
365 | 21 | $pSheet->calculateColumnWidths(); |
|
366 | |||
367 | // Loop through column dimensions |
||
368 | 21 | foreach ($pSheet->getColumnDimensions() as $colDimension) { |
|
369 | // col |
||
370 | 21 | $objWriter->startElement('col'); |
|
371 | 21 | $objWriter->writeAttribute('min', Coordinate::columnIndexFromString($colDimension->getColumnIndex())); |
|
372 | 21 | $objWriter->writeAttribute('max', Coordinate::columnIndexFromString($colDimension->getColumnIndex())); |
|
373 | |||
374 | 21 | if ($colDimension->getWidth() < 0) { |
|
375 | // No width set, apply default of 10 |
||
376 | 2 | $objWriter->writeAttribute('width', '9.10'); |
|
377 | } else { |
||
378 | // Width set |
||
379 | 21 | $objWriter->writeAttribute('width', StringHelper::formatNumber($colDimension->getWidth())); |
|
380 | } |
||
381 | |||
382 | // Column visibility |
||
383 | 21 | if ($colDimension->getVisible() == false) { |
|
384 | 3 | $objWriter->writeAttribute('hidden', 'true'); |
|
385 | } |
||
386 | |||
387 | // Auto size? |
||
388 | 21 | if ($colDimension->getAutoSize()) { |
|
389 | 8 | $objWriter->writeAttribute('bestFit', 'true'); |
|
390 | } |
||
391 | |||
392 | // Custom width? |
||
393 | 21 | if ($colDimension->getWidth() != $pSheet->getDefaultColumnDimension()->getWidth()) { |
|
394 | 21 | $objWriter->writeAttribute('customWidth', 'true'); |
|
395 | } |
||
396 | |||
397 | // Collapsed |
||
398 | 21 | if ($colDimension->getCollapsed() == true) { |
|
399 | 1 | $objWriter->writeAttribute('collapsed', 'true'); |
|
400 | } |
||
401 | |||
402 | // Outline level |
||
403 | 21 | if ($colDimension->getOutlineLevel() > 0) { |
|
404 | 1 | $objWriter->writeAttribute('outlineLevel', $colDimension->getOutlineLevel()); |
|
405 | } |
||
406 | |||
407 | // Style |
||
408 | 21 | $objWriter->writeAttribute('style', $colDimension->getXfIndex()); |
|
409 | |||
410 | 21 | $objWriter->endElement(); |
|
411 | } |
||
412 | |||
413 | 21 | $objWriter->endElement(); |
|
414 | } |
||
415 | 57 | } |
|
416 | |||
417 | /** |
||
418 | * Write SheetProtection. |
||
419 | * |
||
420 | * @param XMLWriter $objWriter XML Writer |
||
421 | * @param PhpspreadsheetWorksheet $pSheet Worksheet |
||
422 | * |
||
423 | * @throws WriterException |
||
424 | */ |
||
425 | 57 | private function writeSheetProtection(XMLWriter $objWriter, PhpspreadsheetWorksheet $pSheet) |
|
426 | { |
||
427 | // sheetProtection |
||
428 | 57 | $objWriter->startElement('sheetProtection'); |
|
429 | |||
430 | 57 | if ($pSheet->getProtection()->getPassword() != '') { |
|
431 | 1 | $objWriter->writeAttribute('password', $pSheet->getProtection()->getPassword()); |
|
432 | } |
||
433 | |||
434 | 57 | $objWriter->writeAttribute('sheet', ($pSheet->getProtection()->getSheet() ? 'true' : 'false')); |
|
435 | 57 | $objWriter->writeAttribute('objects', ($pSheet->getProtection()->getObjects() ? 'true' : 'false')); |
|
436 | 57 | $objWriter->writeAttribute('scenarios', ($pSheet->getProtection()->getScenarios() ? 'true' : 'false')); |
|
437 | 57 | $objWriter->writeAttribute('formatCells', ($pSheet->getProtection()->getFormatCells() ? 'true' : 'false')); |
|
438 | 57 | $objWriter->writeAttribute('formatColumns', ($pSheet->getProtection()->getFormatColumns() ? 'true' : 'false')); |
|
439 | 57 | $objWriter->writeAttribute('formatRows', ($pSheet->getProtection()->getFormatRows() ? 'true' : 'false')); |
|
440 | 57 | $objWriter->writeAttribute('insertColumns', ($pSheet->getProtection()->getInsertColumns() ? 'true' : 'false')); |
|
441 | 57 | $objWriter->writeAttribute('insertRows', ($pSheet->getProtection()->getInsertRows() ? 'true' : 'false')); |
|
442 | 57 | $objWriter->writeAttribute('insertHyperlinks', ($pSheet->getProtection()->getInsertHyperlinks() ? 'true' : 'false')); |
|
443 | 57 | $objWriter->writeAttribute('deleteColumns', ($pSheet->getProtection()->getDeleteColumns() ? 'true' : 'false')); |
|
444 | 57 | $objWriter->writeAttribute('deleteRows', ($pSheet->getProtection()->getDeleteRows() ? 'true' : 'false')); |
|
445 | 57 | $objWriter->writeAttribute('selectLockedCells', ($pSheet->getProtection()->getSelectLockedCells() ? 'true' : 'false')); |
|
446 | 57 | $objWriter->writeAttribute('sort', ($pSheet->getProtection()->getSort() ? 'true' : 'false')); |
|
447 | 57 | $objWriter->writeAttribute('autoFilter', ($pSheet->getProtection()->getAutoFilter() ? 'true' : 'false')); |
|
448 | 57 | $objWriter->writeAttribute('pivotTables', ($pSheet->getProtection()->getPivotTables() ? 'true' : 'false')); |
|
449 | 57 | $objWriter->writeAttribute('selectUnlockedCells', ($pSheet->getProtection()->getSelectUnlockedCells() ? 'true' : 'false')); |
|
450 | 57 | $objWriter->endElement(); |
|
451 | 57 | } |
|
452 | |||
453 | /** |
||
454 | * Write ConditionalFormatting. |
||
455 | * |
||
456 | * @param XMLWriter $objWriter XML Writer |
||
457 | * @param PhpspreadsheetWorksheet $pSheet Worksheet |
||
458 | * |
||
459 | * @throws WriterException |
||
460 | */ |
||
461 | 57 | private function writeConditionalFormatting(XMLWriter $objWriter, PhpspreadsheetWorksheet $pSheet) |
|
462 | { |
||
463 | // Conditional id |
||
464 | 57 | $id = 1; |
|
465 | |||
466 | // Loop through styles in the current worksheet |
||
467 | 57 | foreach ($pSheet->getConditionalStylesCollection() as $cellCoordinate => $conditionalStyles) { |
|
468 | 2 | foreach ($conditionalStyles as $conditional) { |
|
469 | // WHY was this again? |
||
470 | // if ($this->getParentWriter()->getStylesConditionalHashTable()->getIndexForHashCode($conditional->getHashCode()) == '') { |
||
471 | // continue; |
||
472 | // } |
||
473 | 2 | if ($conditional->getConditionType() != Conditional::CONDITION_NONE) { |
|
474 | // conditionalFormatting |
||
475 | 2 | $objWriter->startElement('conditionalFormatting'); |
|
476 | 2 | $objWriter->writeAttribute('sqref', $cellCoordinate); |
|
477 | |||
478 | // cfRule |
||
479 | 2 | $objWriter->startElement('cfRule'); |
|
480 | 2 | $objWriter->writeAttribute('type', $conditional->getConditionType()); |
|
481 | 2 | $objWriter->writeAttribute('dxfId', $this->getParentWriter()->getStylesConditionalHashTable()->getIndexForHashCode($conditional->getHashCode())); |
|
482 | 2 | $objWriter->writeAttribute('priority', $id++); |
|
483 | |||
484 | 2 | if (($conditional->getConditionType() == Conditional::CONDITION_CELLIS || $conditional->getConditionType() == Conditional::CONDITION_CONTAINSTEXT) |
|
485 | 2 | && $conditional->getOperatorType() != Conditional::OPERATOR_NONE) { |
|
486 | 2 | $objWriter->writeAttribute('operator', $conditional->getOperatorType()); |
|
487 | } |
||
488 | |||
489 | 2 | if ($conditional->getConditionType() == Conditional::CONDITION_CONTAINSTEXT |
|
490 | 2 | && $conditional->getText() !== null) { |
|
491 | $objWriter->writeAttribute('text', $conditional->getText()); |
||
492 | } |
||
493 | |||
494 | 2 | if ($conditional->getConditionType() == Conditional::CONDITION_CONTAINSTEXT |
|
495 | 2 | && $conditional->getOperatorType() == Conditional::OPERATOR_CONTAINSTEXT |
|
496 | 2 | && $conditional->getText() !== null) { |
|
497 | $objWriter->writeElement('formula', 'NOT(ISERROR(SEARCH("' . $conditional->getText() . '",' . $cellCoordinate . ')))'); |
||
498 | 2 | View Code Duplication | } elseif ($conditional->getConditionType() == Conditional::CONDITION_CONTAINSTEXT |
499 | 2 | && $conditional->getOperatorType() == Conditional::OPERATOR_BEGINSWITH |
|
500 | 2 | && $conditional->getText() !== null) { |
|
501 | $objWriter->writeElement('formula', 'LEFT(' . $cellCoordinate . ',' . strlen($conditional->getText()) . ')="' . $conditional->getText() . '"'); |
||
502 | 2 | } elseif ($conditional->getConditionType() == Conditional::CONDITION_CONTAINSTEXT |
|
503 | 2 | && $conditional->getOperatorType() == Conditional::OPERATOR_ENDSWITH |
|
504 | 2 | && $conditional->getText() !== null) { |
|
505 | $objWriter->writeElement('formula', 'RIGHT(' . $cellCoordinate . ',' . strlen($conditional->getText()) . ')="' . $conditional->getText() . '"'); |
||
506 | 2 | View Code Duplication | } elseif ($conditional->getConditionType() == Conditional::CONDITION_CONTAINSTEXT |
507 | 2 | && $conditional->getOperatorType() == Conditional::OPERATOR_NOTCONTAINS |
|
508 | 2 | && $conditional->getText() !== null) { |
|
509 | $objWriter->writeElement('formula', 'ISERROR(SEARCH("' . $conditional->getText() . '",' . $cellCoordinate . '))'); |
||
510 | 2 | } elseif ($conditional->getConditionType() == Conditional::CONDITION_CELLIS |
|
511 | || $conditional->getConditionType() == Conditional::CONDITION_CONTAINSTEXT |
||
512 | 2 | || $conditional->getConditionType() == Conditional::CONDITION_EXPRESSION) { |
|
513 | 2 | foreach ($conditional->getConditions() as $formula) { |
|
514 | // Formula |
||
515 | 2 | $objWriter->writeElement('formula', $formula); |
|
516 | } |
||
517 | } |
||
518 | |||
519 | 2 | $objWriter->endElement(); |
|
520 | |||
521 | 2 | $objWriter->endElement(); |
|
522 | } |
||
523 | } |
||
524 | } |
||
525 | 57 | } |
|
526 | |||
527 | /** |
||
528 | * Write DataValidations. |
||
529 | * |
||
530 | * @param XMLWriter $objWriter XML Writer |
||
531 | * @param PhpspreadsheetWorksheet $pSheet Worksheet |
||
532 | * |
||
533 | * @throws WriterException |
||
534 | */ |
||
535 | 57 | private function writeDataValidations(XMLWriter $objWriter, PhpspreadsheetWorksheet $pSheet) |
|
536 | { |
||
537 | // Datavalidation collection |
||
538 | 57 | $dataValidationCollection = $pSheet->getDataValidationCollection(); |
|
539 | |||
540 | // Write data validations? |
||
541 | 57 | if (!empty($dataValidationCollection)) { |
|
542 | 2 | $dataValidationCollection = Coordinate::mergeRangesInCollection($dataValidationCollection); |
|
543 | 2 | $objWriter->startElement('dataValidations'); |
|
544 | 2 | $objWriter->writeAttribute('count', count($dataValidationCollection)); |
|
545 | |||
546 | 2 | foreach ($dataValidationCollection as $coordinate => $dv) { |
|
547 | 2 | $objWriter->startElement('dataValidation'); |
|
548 | |||
549 | 2 | if ($dv->getType() != '') { |
|
550 | 2 | $objWriter->writeAttribute('type', $dv->getType()); |
|
551 | } |
||
552 | |||
553 | 2 | if ($dv->getErrorStyle() != '') { |
|
554 | 2 | $objWriter->writeAttribute('errorStyle', $dv->getErrorStyle()); |
|
555 | } |
||
556 | |||
557 | 2 | if ($dv->getOperator() != '') { |
|
558 | 2 | $objWriter->writeAttribute('operator', $dv->getOperator()); |
|
559 | } |
||
560 | |||
561 | 2 | $objWriter->writeAttribute('allowBlank', ($dv->getAllowBlank() ? '1' : '0')); |
|
562 | 2 | $objWriter->writeAttribute('showDropDown', (!$dv->getShowDropDown() ? '1' : '0')); |
|
563 | 2 | $objWriter->writeAttribute('showInputMessage', ($dv->getShowInputMessage() ? '1' : '0')); |
|
564 | 2 | $objWriter->writeAttribute('showErrorMessage', ($dv->getShowErrorMessage() ? '1' : '0')); |
|
565 | |||
566 | 2 | if ($dv->getErrorTitle() !== '') { |
|
567 | 2 | $objWriter->writeAttribute('errorTitle', $dv->getErrorTitle()); |
|
568 | } |
||
569 | 2 | if ($dv->getError() !== '') { |
|
570 | 2 | $objWriter->writeAttribute('error', $dv->getError()); |
|
571 | } |
||
572 | 2 | if ($dv->getPromptTitle() !== '') { |
|
573 | 2 | $objWriter->writeAttribute('promptTitle', $dv->getPromptTitle()); |
|
574 | } |
||
575 | 2 | if ($dv->getPrompt() !== '') { |
|
576 | 2 | $objWriter->writeAttribute('prompt', $dv->getPrompt()); |
|
577 | } |
||
578 | |||
579 | 2 | $objWriter->writeAttribute('sqref', $coordinate); |
|
580 | |||
581 | 2 | if ($dv->getFormula1() !== '') { |
|
582 | 2 | $objWriter->writeElement('formula1', $dv->getFormula1()); |
|
583 | } |
||
584 | 2 | if ($dv->getFormula2() !== '') { |
|
585 | 1 | $objWriter->writeElement('formula2', $dv->getFormula2()); |
|
586 | } |
||
587 | |||
588 | 2 | $objWriter->endElement(); |
|
589 | } |
||
590 | |||
591 | 2 | $objWriter->endElement(); |
|
592 | } |
||
593 | 57 | } |
|
594 | |||
595 | /** |
||
596 | * Write Hyperlinks. |
||
597 | * |
||
598 | * @param XMLWriter $objWriter XML Writer |
||
599 | * @param PhpspreadsheetWorksheet $pSheet Worksheet |
||
600 | * |
||
601 | * @throws WriterException |
||
602 | */ |
||
603 | 57 | private function writeHyperlinks(XMLWriter $objWriter, PhpspreadsheetWorksheet $pSheet) |
|
604 | { |
||
605 | // Hyperlink collection |
||
606 | 57 | $hyperlinkCollection = $pSheet->getHyperlinkCollection(); |
|
607 | |||
608 | // Relation ID |
||
609 | 57 | $relationId = 1; |
|
610 | |||
611 | // Write hyperlinks? |
||
612 | 57 | if (!empty($hyperlinkCollection)) { |
|
613 | 10 | $objWriter->startElement('hyperlinks'); |
|
614 | |||
615 | 10 | foreach ($hyperlinkCollection as $coordinate => $hyperlink) { |
|
616 | 10 | $objWriter->startElement('hyperlink'); |
|
617 | |||
618 | 10 | $objWriter->writeAttribute('ref', $coordinate); |
|
619 | 10 | if (!$hyperlink->isInternal()) { |
|
620 | 10 | $objWriter->writeAttribute('r:id', 'rId_hyperlink_' . $relationId); |
|
621 | 10 | ++$relationId; |
|
622 | } else { |
||
623 | 7 | $objWriter->writeAttribute('location', str_replace('sheet://', '', $hyperlink->getUrl())); |
|
624 | } |
||
625 | |||
626 | 10 | if ($hyperlink->getTooltip() != '') { |
|
627 | 6 | $objWriter->writeAttribute('tooltip', $hyperlink->getTooltip()); |
|
628 | } |
||
629 | |||
630 | 10 | $objWriter->endElement(); |
|
631 | } |
||
632 | |||
633 | 10 | $objWriter->endElement(); |
|
634 | } |
||
635 | 57 | } |
|
636 | |||
637 | /** |
||
638 | * Write ProtectedRanges. |
||
639 | * |
||
640 | * @param XMLWriter $objWriter XML Writer |
||
641 | * @param PhpspreadsheetWorksheet $pSheet Worksheet |
||
642 | * |
||
643 | * @throws WriterException |
||
644 | */ |
||
645 | 57 | private function writeProtectedRanges(XMLWriter $objWriter, PhpspreadsheetWorksheet $pSheet) |
|
646 | { |
||
647 | 57 | if (count($pSheet->getProtectedCells()) > 0) { |
|
648 | // protectedRanges |
||
649 | 6 | $objWriter->startElement('protectedRanges'); |
|
650 | |||
651 | // Loop protectedRanges |
||
652 | 6 | foreach ($pSheet->getProtectedCells() as $protectedCell => $passwordHash) { |
|
653 | // protectedRange |
||
654 | 6 | $objWriter->startElement('protectedRange'); |
|
655 | 6 | $objWriter->writeAttribute('name', 'p' . md5($protectedCell)); |
|
656 | 6 | $objWriter->writeAttribute('sqref', $protectedCell); |
|
657 | 6 | if (!empty($passwordHash)) { |
|
658 | 6 | $objWriter->writeAttribute('password', $passwordHash); |
|
659 | } |
||
660 | 6 | $objWriter->endElement(); |
|
661 | } |
||
662 | |||
663 | 6 | $objWriter->endElement(); |
|
664 | } |
||
665 | 57 | } |
|
666 | |||
667 | /** |
||
668 | * Write MergeCells. |
||
669 | * |
||
670 | * @param XMLWriter $objWriter XML Writer |
||
671 | * @param PhpspreadsheetWorksheet $pSheet Worksheet |
||
672 | * |
||
673 | * @throws WriterException |
||
674 | */ |
||
675 | 57 | private function writeMergeCells(XMLWriter $objWriter, PhpspreadsheetWorksheet $pSheet) |
|
676 | { |
||
677 | 57 | if (count($pSheet->getMergeCells()) > 0) { |
|
678 | // mergeCells |
||
679 | 12 | $objWriter->startElement('mergeCells'); |
|
680 | |||
681 | // Loop mergeCells |
||
682 | 12 | foreach ($pSheet->getMergeCells() as $mergeCell) { |
|
683 | // mergeCell |
||
684 | 12 | $objWriter->startElement('mergeCell'); |
|
685 | 12 | $objWriter->writeAttribute('ref', $mergeCell); |
|
686 | 12 | $objWriter->endElement(); |
|
687 | } |
||
688 | |||
689 | 12 | $objWriter->endElement(); |
|
690 | } |
||
691 | 57 | } |
|
692 | |||
693 | /** |
||
694 | * Write PrintOptions. |
||
695 | * |
||
696 | * @param XMLWriter $objWriter XML Writer |
||
697 | * @param PhpspreadsheetWorksheet $pSheet Worksheet |
||
698 | * |
||
699 | * @throws WriterException |
||
700 | */ |
||
701 | 57 | private function writePrintOptions(XMLWriter $objWriter, PhpspreadsheetWorksheet $pSheet) |
|
702 | { |
||
703 | // printOptions |
||
704 | 57 | $objWriter->startElement('printOptions'); |
|
705 | |||
706 | 57 | $objWriter->writeAttribute('gridLines', ($pSheet->getPrintGridlines() ? 'true' : 'false')); |
|
707 | 57 | $objWriter->writeAttribute('gridLinesSet', 'true'); |
|
708 | |||
709 | 57 | if ($pSheet->getPageSetup()->getHorizontalCentered()) { |
|
710 | $objWriter->writeAttribute('horizontalCentered', 'true'); |
||
711 | } |
||
712 | |||
713 | 57 | if ($pSheet->getPageSetup()->getVerticalCentered()) { |
|
714 | $objWriter->writeAttribute('verticalCentered', 'true'); |
||
715 | } |
||
716 | |||
717 | 57 | $objWriter->endElement(); |
|
718 | 57 | } |
|
719 | |||
720 | /** |
||
721 | * Write PageMargins. |
||
722 | * |
||
723 | * @param XMLWriter $objWriter XML Writer |
||
724 | * @param PhpspreadsheetWorksheet $pSheet Worksheet |
||
725 | * |
||
726 | * @throws WriterException |
||
727 | */ |
||
728 | 57 | private function writePageMargins(XMLWriter $objWriter, PhpspreadsheetWorksheet $pSheet) |
|
729 | { |
||
730 | // pageMargins |
||
731 | 57 | $objWriter->startElement('pageMargins'); |
|
732 | 57 | $objWriter->writeAttribute('left', StringHelper::formatNumber($pSheet->getPageMargins()->getLeft())); |
|
733 | 57 | $objWriter->writeAttribute('right', StringHelper::formatNumber($pSheet->getPageMargins()->getRight())); |
|
734 | 57 | $objWriter->writeAttribute('top', StringHelper::formatNumber($pSheet->getPageMargins()->getTop())); |
|
735 | 57 | $objWriter->writeAttribute('bottom', StringHelper::formatNumber($pSheet->getPageMargins()->getBottom())); |
|
736 | 57 | $objWriter->writeAttribute('header', StringHelper::formatNumber($pSheet->getPageMargins()->getHeader())); |
|
737 | 57 | $objWriter->writeAttribute('footer', StringHelper::formatNumber($pSheet->getPageMargins()->getFooter())); |
|
738 | 57 | $objWriter->endElement(); |
|
739 | 57 | } |
|
740 | |||
741 | /** |
||
742 | * Write AutoFilter. |
||
743 | * |
||
744 | * @param XMLWriter $objWriter XML Writer |
||
745 | * @param PhpspreadsheetWorksheet $pSheet Worksheet |
||
746 | * |
||
747 | * @throws WriterException |
||
748 | */ |
||
749 | 57 | private function writeAutoFilter(XMLWriter $objWriter, PhpspreadsheetWorksheet $pSheet) |
|
750 | { |
||
751 | 57 | $autoFilterRange = $pSheet->getAutoFilter()->getRange(); |
|
752 | 57 | if (!empty($autoFilterRange)) { |
|
753 | // autoFilter |
||
754 | 3 | $objWriter->startElement('autoFilter'); |
|
755 | |||
756 | // Strip any worksheet reference from the filter coordinates |
||
757 | 3 | $range = Coordinate::splitRange($autoFilterRange); |
|
758 | 3 | $range = $range[0]; |
|
759 | // Strip any worksheet ref |
||
760 | 3 | View Code Duplication | if (strpos($range[0], '!') !== false) { |
761 | list($ws, $range[0]) = explode('!', $range[0]); |
||
762 | } |
||
763 | 3 | $range = implode(':', $range); |
|
764 | |||
765 | 3 | $objWriter->writeAttribute('ref', str_replace('$', '', $range)); |
|
766 | |||
767 | 3 | $columns = $pSheet->getAutoFilter()->getColumns(); |
|
768 | 3 | if (count($columns) > 0) { |
|
769 | 2 | foreach ($columns as $columnID => $column) { |
|
770 | 2 | $rules = $column->getRules(); |
|
771 | 2 | if (count($rules) > 0) { |
|
772 | 2 | $objWriter->startElement('filterColumn'); |
|
773 | 2 | $objWriter->writeAttribute('colId', $pSheet->getAutoFilter()->getColumnOffset($columnID)); |
|
774 | |||
775 | 2 | $objWriter->startElement($column->getFilterType()); |
|
776 | 2 | if ($column->getJoin() == Column::AUTOFILTER_COLUMN_JOIN_AND) { |
|
777 | 1 | $objWriter->writeAttribute('and', 1); |
|
778 | } |
||
779 | |||
780 | 2 | foreach ($rules as $rule) { |
|
781 | 2 | if (($column->getFilterType() === Column::AUTOFILTER_FILTERTYPE_FILTER) && |
|
782 | 2 | ($rule->getOperator() === Rule::AUTOFILTER_COLUMN_RULE_EQUAL) && |
|
783 | 2 | ($rule->getValue() === '')) { |
|
784 | // Filter rule for Blanks |
||
785 | 1 | $objWriter->writeAttribute('blank', 1); |
|
786 | 2 | } elseif ($rule->getRuleType() === Rule::AUTOFILTER_RULETYPE_DYNAMICFILTER) { |
|
787 | // Dynamic Filter Rule |
||
788 | 1 | $objWriter->writeAttribute('type', $rule->getGrouping()); |
|
789 | 1 | $val = $column->getAttribute('val'); |
|
790 | 1 | if ($val !== null) { |
|
791 | 1 | $objWriter->writeAttribute('val', $val); |
|
792 | } |
||
793 | 1 | $maxVal = $column->getAttribute('maxVal'); |
|
794 | 1 | if ($maxVal !== null) { |
|
795 | 1 | $objWriter->writeAttribute('maxVal', $maxVal); |
|
796 | } |
||
797 | 2 | } elseif ($rule->getRuleType() === Rule::AUTOFILTER_RULETYPE_TOPTENFILTER) { |
|
798 | // Top 10 Filter Rule |
||
799 | $objWriter->writeAttribute('val', $rule->getValue()); |
||
800 | $objWriter->writeAttribute('percent', (($rule->getOperator() === Rule::AUTOFILTER_COLUMN_RULE_TOPTEN_PERCENT) ? '1' : '0')); |
||
801 | $objWriter->writeAttribute('top', (($rule->getGrouping() === Rule::AUTOFILTER_COLUMN_RULE_TOPTEN_TOP) ? '1' : '0')); |
||
802 | } else { |
||
803 | // Filter, DateGroupItem or CustomFilter |
||
804 | 2 | $objWriter->startElement($rule->getRuleType()); |
|
805 | |||
806 | 2 | if ($rule->getOperator() !== Rule::AUTOFILTER_COLUMN_RULE_EQUAL) { |
|
807 | 1 | $objWriter->writeAttribute('operator', $rule->getOperator()); |
|
808 | } |
||
809 | 2 | if ($rule->getRuleType() === Rule::AUTOFILTER_RULETYPE_DATEGROUP) { |
|
810 | // Date Group filters |
||
811 | 1 | foreach ($rule->getValue() as $key => $value) { |
|
812 | 1 | if ($value > '') { |
|
813 | 1 | $objWriter->writeAttribute($key, $value); |
|
814 | } |
||
815 | } |
||
816 | 1 | $objWriter->writeAttribute('dateTimeGrouping', $rule->getGrouping()); |
|
817 | } else { |
||
818 | 2 | $objWriter->writeAttribute('val', $rule->getValue()); |
|
819 | } |
||
820 | |||
821 | 2 | $objWriter->endElement(); |
|
822 | } |
||
823 | } |
||
824 | |||
825 | 2 | $objWriter->endElement(); |
|
826 | |||
827 | 2 | $objWriter->endElement(); |
|
828 | } |
||
829 | } |
||
830 | } |
||
831 | 3 | $objWriter->endElement(); |
|
832 | } |
||
833 | 57 | } |
|
834 | |||
835 | /** |
||
836 | * Write PageSetup. |
||
837 | * |
||
838 | * @param XMLWriter $objWriter XML Writer |
||
839 | * @param PhpspreadsheetWorksheet $pSheet Worksheet |
||
840 | * |
||
841 | * @throws WriterException |
||
842 | */ |
||
843 | 57 | private function writePageSetup(XMLWriter $objWriter, PhpspreadsheetWorksheet $pSheet) |
|
869 | 57 | } |
|
870 | |||
871 | /** |
||
872 | * Write Header / Footer. |
||
873 | * |
||
874 | * @param XMLWriter $objWriter XML Writer |
||
875 | * @param PhpspreadsheetWorksheet $pSheet Worksheet |
||
876 | * |
||
877 | * @throws WriterException |
||
878 | */ |
||
879 | 57 | private function writeHeaderFooter(XMLWriter $objWriter, PhpspreadsheetWorksheet $pSheet) |
|
880 | { |
||
881 | // headerFooter |
||
882 | 57 | $objWriter->startElement('headerFooter'); |
|
883 | 57 | $objWriter->writeAttribute('differentOddEven', ($pSheet->getHeaderFooter()->getDifferentOddEven() ? 'true' : 'false')); |
|
884 | 57 | $objWriter->writeAttribute('differentFirst', ($pSheet->getHeaderFooter()->getDifferentFirst() ? 'true' : 'false')); |
|
885 | 57 | $objWriter->writeAttribute('scaleWithDoc', ($pSheet->getHeaderFooter()->getScaleWithDocument() ? 'true' : 'false')); |
|
886 | 57 | $objWriter->writeAttribute('alignWithMargins', ($pSheet->getHeaderFooter()->getAlignWithMargins() ? 'true' : 'false')); |
|
887 | |||
888 | 57 | $objWriter->writeElement('oddHeader', $pSheet->getHeaderFooter()->getOddHeader()); |
|
889 | 57 | $objWriter->writeElement('oddFooter', $pSheet->getHeaderFooter()->getOddFooter()); |
|
890 | 57 | $objWriter->writeElement('evenHeader', $pSheet->getHeaderFooter()->getEvenHeader()); |
|
891 | 57 | $objWriter->writeElement('evenFooter', $pSheet->getHeaderFooter()->getEvenFooter()); |
|
892 | 57 | $objWriter->writeElement('firstHeader', $pSheet->getHeaderFooter()->getFirstHeader()); |
|
893 | 57 | $objWriter->writeElement('firstFooter', $pSheet->getHeaderFooter()->getFirstFooter()); |
|
894 | 57 | $objWriter->endElement(); |
|
895 | 57 | } |
|
896 | |||
897 | /** |
||
898 | * Write Breaks. |
||
899 | * |
||
900 | * @param XMLWriter $objWriter XML Writer |
||
901 | * @param PhpspreadsheetWorksheet $pSheet Worksheet |
||
902 | * |
||
903 | * @throws WriterException |
||
904 | */ |
||
905 | 57 | private function writeBreaks(XMLWriter $objWriter, PhpspreadsheetWorksheet $pSheet) |
|
906 | { |
||
907 | // Get row and column breaks |
||
908 | 57 | $aRowBreaks = []; |
|
909 | 57 | $aColumnBreaks = []; |
|
910 | 57 | foreach ($pSheet->getBreaks() as $cell => $breakType) { |
|
911 | 1 | if ($breakType == PhpspreadsheetWorksheet::BREAK_ROW) { |
|
912 | 1 | $aRowBreaks[] = $cell; |
|
913 | } elseif ($breakType == PhpspreadsheetWorksheet::BREAK_COLUMN) { |
||
914 | 1 | $aColumnBreaks[] = $cell; |
|
915 | } |
||
916 | } |
||
917 | |||
918 | // rowBreaks |
||
919 | 57 | View Code Duplication | if (!empty($aRowBreaks)) { |
920 | 1 | $objWriter->startElement('rowBreaks'); |
|
921 | 1 | $objWriter->writeAttribute('count', count($aRowBreaks)); |
|
922 | 1 | $objWriter->writeAttribute('manualBreakCount', count($aRowBreaks)); |
|
923 | |||
924 | 1 | foreach ($aRowBreaks as $cell) { |
|
925 | 1 | $coords = Coordinate::coordinateFromString($cell); |
|
926 | |||
927 | 1 | $objWriter->startElement('brk'); |
|
928 | 1 | $objWriter->writeAttribute('id', $coords[1]); |
|
929 | 1 | $objWriter->writeAttribute('man', '1'); |
|
930 | 1 | $objWriter->endElement(); |
|
931 | } |
||
932 | |||
933 | 1 | $objWriter->endElement(); |
|
934 | } |
||
935 | |||
936 | // Second, write column breaks |
||
937 | 57 | View Code Duplication | if (!empty($aColumnBreaks)) { |
938 | $objWriter->startElement('colBreaks'); |
||
939 | $objWriter->writeAttribute('count', count($aColumnBreaks)); |
||
940 | $objWriter->writeAttribute('manualBreakCount', count($aColumnBreaks)); |
||
941 | |||
942 | foreach ($aColumnBreaks as $cell) { |
||
943 | $coords = Coordinate::coordinateFromString($cell); |
||
944 | |||
945 | $objWriter->startElement('brk'); |
||
946 | $objWriter->writeAttribute('id', Coordinate::columnIndexFromString($coords[0]) - 1); |
||
947 | $objWriter->writeAttribute('man', '1'); |
||
948 | $objWriter->endElement(); |
||
949 | } |
||
950 | |||
951 | $objWriter->endElement(); |
||
952 | } |
||
953 | 57 | } |
|
954 | |||
955 | /** |
||
956 | * Write SheetData. |
||
957 | * |
||
958 | * @param XMLWriter $objWriter XML Writer |
||
959 | * @param PhpspreadsheetWorksheet $pSheet Worksheet |
||
960 | * @param string[] $pStringTable String table |
||
961 | * |
||
962 | * @throws WriterException |
||
963 | */ |
||
964 | 57 | private function writeSheetData(XMLWriter $objWriter, PhpspreadsheetWorksheet $pSheet, array $pStringTable) |
|
1040 | 57 | } |
|
1041 | |||
1042 | /** |
||
1043 | * Write Cell. |
||
1044 | * |
||
1045 | * @param XMLWriter $objWriter XML Writer |
||
1046 | * @param PhpspreadsheetWorksheet $pSheet Worksheet |
||
1047 | * @param Cell $pCellAddress Cell Address |
||
1048 | * @param string[] $pFlippedStringTable String table (flipped), for faster index searching |
||
1049 | * |
||
1050 | * @throws WriterException |
||
1051 | */ |
||
1052 | 56 | private function writeCell(XMLWriter $objWriter, PhpspreadsheetWorksheet $pSheet, $pCellAddress, array $pFlippedStringTable) |
|
1160 | 56 | } |
|
1161 | |||
1162 | /** |
||
1163 | * Write Drawings. |
||
1164 | * |
||
1165 | * @param XMLWriter $objWriter XML Writer |
||
1166 | * @param PhpspreadsheetWorksheet $pSheet Worksheet |
||
1167 | * @param bool $includeCharts Flag indicating if we should include drawing details for charts |
||
1168 | * |
||
1169 | * @throws WriterException |
||
1170 | */ |
||
1171 | 57 | private function writeDrawings(XMLWriter $objWriter = null, PhpspreadsheetWorksheet $pSheet = null, $includeCharts = false) |
|
1172 | { |
||
1173 | 57 | $chartCount = ($includeCharts) ? $pSheet->getChartCollection()->count() : 0; |
|
1 ignored issue
–
show
|
|||
1174 | // If sheet contains drawings, add the relationships |
||
1175 | 57 | if (($pSheet->getDrawingCollection()->count() > 0) || |
|
1176 | 57 | ($chartCount > 0)) { |
|
1177 | 22 | $objWriter->startElement('drawing'); |
|
1 ignored issue
–
show
|
|||
1178 | 22 | $objWriter->writeAttribute('r:id', 'rId1'); |
|
1179 | 22 | $objWriter->endElement(); |
|
1180 | } |
||
1181 | 57 | } |
|
1182 | |||
1183 | /** |
||
1184 | * Write LegacyDrawing. |
||
1185 | * |
||
1186 | * @param XMLWriter $objWriter XML Writer |
||
1187 | * @param PhpspreadsheetWorksheet $pSheet Worksheet |
||
1188 | * |
||
1189 | * @throws WriterException |
||
1190 | */ |
||
1191 | 57 | private function writeLegacyDrawing(XMLWriter $objWriter, PhpspreadsheetWorksheet $pSheet) |
|
1192 | { |
||
1193 | // If sheet contains comments, add the relationships |
||
1194 | 57 | if (count($pSheet->getComments()) > 0) { |
|
1195 | 9 | $objWriter->startElement('legacyDrawing'); |
|
1196 | 9 | $objWriter->writeAttribute('r:id', 'rId_comments_vml1'); |
|
1197 | 9 | $objWriter->endElement(); |
|
1198 | } |
||
1199 | 57 | } |
|
1200 | |||
1201 | /** |
||
1202 | * Write LegacyDrawingHF. |
||
1203 | * |
||
1204 | * @param XMLWriter $objWriter XML Writer |
||
1205 | * @param PhpspreadsheetWorksheet $pSheet Worksheet |
||
1206 | * |
||
1207 | * @throws WriterException |
||
1208 | */ |
||
1209 | 57 | private function writeLegacyDrawingHF(XMLWriter $objWriter, PhpspreadsheetWorksheet $pSheet) |
|
1216 | } |
||
1217 | 57 | } |
|
1218 | } |
||
1219 |
Duplicated code is one of the most pungent code smells. If you need to duplicate the same code in three or more different places, we strongly encourage you to look into extracting the code into a single class or operation.
You can also find more detailed suggestions in the “Code” section of your repository.