1 | <?php |
---|
2 | /** |
---|
3 | * PHPExcel |
---|
4 | * |
---|
5 | * Copyright (c) 2006 - 2014 PHPExcel |
---|
6 | * |
---|
7 | * This library is free software; you can redistribute it and/or |
---|
8 | * modify it under the terms of the GNU Lesser General Public |
---|
9 | * License as published by the Free Software Foundation; either |
---|
10 | * version 2.1 of the License, or (at your option) any later version. |
---|
11 | * |
---|
12 | * This library is distributed in the hope that it will be useful, |
---|
13 | * but WITHOUT ANY WARRANTY; without even the implied warranty of |
---|
14 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU |
---|
15 | * Lesser General Public License for more details. |
---|
16 | * |
---|
17 | * You should have received a copy of the GNU Lesser General Public |
---|
18 | * License along with this library; if not, write to the Free Software |
---|
19 | * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA |
---|
20 | * |
---|
21 | * @category PHPExcel |
---|
22 | * @package PHPExcel_Writer_Excel2007 |
---|
23 | * @copyright Copyright (c) 2006 - 2014 PHPExcel (http://www.codeplex.com/PHPExcel) |
---|
24 | * @license http://www.gnu.org/licenses/old-licenses/lgpl-2.1.txt LGPL |
---|
25 | * @version 1.8.0, 2014-03-02 |
---|
26 | */ |
---|
27 | |
---|
28 | |
---|
29 | /** |
---|
30 | * PHPExcel_Writer_Excel2007_Style |
---|
31 | * |
---|
32 | * @category PHPExcel |
---|
33 | * @package PHPExcel_Writer_Excel2007 |
---|
34 | * @copyright Copyright (c) 2006 - 2014 PHPExcel (http://www.codeplex.com/PHPExcel) |
---|
35 | */ |
---|
36 | class PHPExcel_Writer_Excel2007_Style extends PHPExcel_Writer_Excel2007_WriterPart |
---|
37 | { |
---|
38 | /** |
---|
39 | * Write styles to XML format |
---|
40 | * |
---|
41 | * @param PHPExcel $pPHPExcel |
---|
42 | * @return string XML Output |
---|
43 | * @throws PHPExcel_Writer_Exception |
---|
44 | */ |
---|
45 | public function writeStyles(PHPExcel $pPHPExcel = null) |
---|
46 | { |
---|
47 | // Create XML writer |
---|
48 | $objWriter = null; |
---|
49 | if ($this->getParentWriter()->getUseDiskCaching()) { |
---|
50 | $objWriter = new PHPExcel_Shared_XMLWriter(PHPExcel_Shared_XMLWriter::STORAGE_DISK, $this->getParentWriter()->getDiskCachingDirectory()); |
---|
51 | } else { |
---|
52 | $objWriter = new PHPExcel_Shared_XMLWriter(PHPExcel_Shared_XMLWriter::STORAGE_MEMORY); |
---|
53 | } |
---|
54 | |
---|
55 | // XML header |
---|
56 | $objWriter->startDocument('1.0','UTF-8','yes'); |
---|
57 | |
---|
58 | // styleSheet |
---|
59 | $objWriter->startElement('styleSheet'); |
---|
60 | $objWriter->writeAttribute('xml:space', 'preserve'); |
---|
61 | $objWriter->writeAttribute('xmlns', 'http://schemas.openxmlformats.org/spreadsheetml/2006/main'); |
---|
62 | |
---|
63 | // numFmts |
---|
64 | $objWriter->startElement('numFmts'); |
---|
65 | $objWriter->writeAttribute('count', $this->getParentWriter()->getNumFmtHashTable()->count()); |
---|
66 | |
---|
67 | // numFmt |
---|
68 | for ($i = 0; $i < $this->getParentWriter()->getNumFmtHashTable()->count(); ++$i) { |
---|
69 | $this->_writeNumFmt($objWriter, $this->getParentWriter()->getNumFmtHashTable()->getByIndex($i), $i); |
---|
70 | } |
---|
71 | |
---|
72 | $objWriter->endElement(); |
---|
73 | |
---|
74 | // fonts |
---|
75 | $objWriter->startElement('fonts'); |
---|
76 | $objWriter->writeAttribute('count', $this->getParentWriter()->getFontHashTable()->count()); |
---|
77 | |
---|
78 | // font |
---|
79 | for ($i = 0; $i < $this->getParentWriter()->getFontHashTable()->count(); ++$i) { |
---|
80 | $this->_writeFont($objWriter, $this->getParentWriter()->getFontHashTable()->getByIndex($i)); |
---|
81 | } |
---|
82 | |
---|
83 | $objWriter->endElement(); |
---|
84 | |
---|
85 | // fills |
---|
86 | $objWriter->startElement('fills'); |
---|
87 | $objWriter->writeAttribute('count', $this->getParentWriter()->getFillHashTable()->count()); |
---|
88 | |
---|
89 | // fill |
---|
90 | for ($i = 0; $i < $this->getParentWriter()->getFillHashTable()->count(); ++$i) { |
---|
91 | $this->_writeFill($objWriter, $this->getParentWriter()->getFillHashTable()->getByIndex($i)); |
---|
92 | } |
---|
93 | |
---|
94 | $objWriter->endElement(); |
---|
95 | |
---|
96 | // borders |
---|
97 | $objWriter->startElement('borders'); |
---|
98 | $objWriter->writeAttribute('count', $this->getParentWriter()->getBordersHashTable()->count()); |
---|
99 | |
---|
100 | // border |
---|
101 | for ($i = 0; $i < $this->getParentWriter()->getBordersHashTable()->count(); ++$i) { |
---|
102 | $this->_writeBorder($objWriter, $this->getParentWriter()->getBordersHashTable()->getByIndex($i)); |
---|
103 | } |
---|
104 | |
---|
105 | $objWriter->endElement(); |
---|
106 | |
---|
107 | // cellStyleXfs |
---|
108 | $objWriter->startElement('cellStyleXfs'); |
---|
109 | $objWriter->writeAttribute('count', 1); |
---|
110 | |
---|
111 | // xf |
---|
112 | $objWriter->startElement('xf'); |
---|
113 | $objWriter->writeAttribute('numFmtId', 0); |
---|
114 | $objWriter->writeAttribute('fontId', 0); |
---|
115 | $objWriter->writeAttribute('fillId', 0); |
---|
116 | $objWriter->writeAttribute('borderId', 0); |
---|
117 | $objWriter->endElement(); |
---|
118 | |
---|
119 | $objWriter->endElement(); |
---|
120 | |
---|
121 | // cellXfs |
---|
122 | $objWriter->startElement('cellXfs'); |
---|
123 | $objWriter->writeAttribute('count', count($pPHPExcel->getCellXfCollection())); |
---|
124 | |
---|
125 | // xf |
---|
126 | foreach ($pPHPExcel->getCellXfCollection() as $cellXf) { |
---|
127 | $this->_writeCellStyleXf($objWriter, $cellXf, $pPHPExcel); |
---|
128 | } |
---|
129 | |
---|
130 | $objWriter->endElement(); |
---|
131 | |
---|
132 | // cellStyles |
---|
133 | $objWriter->startElement('cellStyles'); |
---|
134 | $objWriter->writeAttribute('count', 1); |
---|
135 | |
---|
136 | // cellStyle |
---|
137 | $objWriter->startElement('cellStyle'); |
---|
138 | $objWriter->writeAttribute('name', 'Normal'); |
---|
139 | $objWriter->writeAttribute('xfId', 0); |
---|
140 | $objWriter->writeAttribute('builtinId', 0); |
---|
141 | $objWriter->endElement(); |
---|
142 | |
---|
143 | $objWriter->endElement(); |
---|
144 | |
---|
145 | // dxfs |
---|
146 | $objWriter->startElement('dxfs'); |
---|
147 | $objWriter->writeAttribute('count', $this->getParentWriter()->getStylesConditionalHashTable()->count()); |
---|
148 | |
---|
149 | // dxf |
---|
150 | for ($i = 0; $i < $this->getParentWriter()->getStylesConditionalHashTable()->count(); ++$i) { |
---|
151 | $this->_writeCellStyleDxf($objWriter, $this->getParentWriter()->getStylesConditionalHashTable()->getByIndex($i)->getStyle()); |
---|
152 | } |
---|
153 | |
---|
154 | $objWriter->endElement(); |
---|
155 | |
---|
156 | // tableStyles |
---|
157 | $objWriter->startElement('tableStyles'); |
---|
158 | $objWriter->writeAttribute('defaultTableStyle', 'TableStyleMedium9'); |
---|
159 | $objWriter->writeAttribute('defaultPivotStyle', 'PivotTableStyle1'); |
---|
160 | $objWriter->endElement(); |
---|
161 | |
---|
162 | $objWriter->endElement(); |
---|
163 | |
---|
164 | // Return |
---|
165 | return $objWriter->getData(); |
---|
166 | } |
---|
167 | |
---|
168 | /** |
---|
169 | * Write Fill |
---|
170 | * |
---|
171 | * @param PHPExcel_Shared_XMLWriter $objWriter XML Writer |
---|
172 | * @param PHPExcel_Style_Fill $pFill Fill style |
---|
173 | * @throws PHPExcel_Writer_Exception |
---|
174 | */ |
---|
175 | private function _writeFill(PHPExcel_Shared_XMLWriter $objWriter = null, PHPExcel_Style_Fill $pFill = null) |
---|
176 | { |
---|
177 | // Check if this is a pattern type or gradient type |
---|
178 | if ($pFill->getFillType() === PHPExcel_Style_Fill::FILL_GRADIENT_LINEAR || |
---|
179 | $pFill->getFillType() === PHPExcel_Style_Fill::FILL_GRADIENT_PATH) { |
---|
180 | // Gradient fill |
---|
181 | $this->_writeGradientFill($objWriter, $pFill); |
---|
182 | } elseif($pFill->getFillType() !== NULL) { |
---|
183 | // Pattern fill |
---|
184 | $this->_writePatternFill($objWriter, $pFill); |
---|
185 | } |
---|
186 | } |
---|
187 | |
---|
188 | /** |
---|
189 | * Write Gradient Fill |
---|
190 | * |
---|
191 | * @param PHPExcel_Shared_XMLWriter $objWriter XML Writer |
---|
192 | * @param PHPExcel_Style_Fill $pFill Fill style |
---|
193 | * @throws PHPExcel_Writer_Exception |
---|
194 | */ |
---|
195 | private function _writeGradientFill(PHPExcel_Shared_XMLWriter $objWriter = null, PHPExcel_Style_Fill $pFill = null) |
---|
196 | { |
---|
197 | // fill |
---|
198 | $objWriter->startElement('fill'); |
---|
199 | |
---|
200 | // gradientFill |
---|
201 | $objWriter->startElement('gradientFill'); |
---|
202 | $objWriter->writeAttribute('type', $pFill->getFillType()); |
---|
203 | $objWriter->writeAttribute('degree', $pFill->getRotation()); |
---|
204 | |
---|
205 | // stop |
---|
206 | $objWriter->startElement('stop'); |
---|
207 | $objWriter->writeAttribute('position', '0'); |
---|
208 | |
---|
209 | // color |
---|
210 | $objWriter->startElement('color'); |
---|
211 | $objWriter->writeAttribute('rgb', $pFill->getStartColor()->getARGB()); |
---|
212 | $objWriter->endElement(); |
---|
213 | |
---|
214 | $objWriter->endElement(); |
---|
215 | |
---|
216 | // stop |
---|
217 | $objWriter->startElement('stop'); |
---|
218 | $objWriter->writeAttribute('position', '1'); |
---|
219 | |
---|
220 | // color |
---|
221 | $objWriter->startElement('color'); |
---|
222 | $objWriter->writeAttribute('rgb', $pFill->getEndColor()->getARGB()); |
---|
223 | $objWriter->endElement(); |
---|
224 | |
---|
225 | $objWriter->endElement(); |
---|
226 | |
---|
227 | $objWriter->endElement(); |
---|
228 | |
---|
229 | $objWriter->endElement(); |
---|
230 | } |
---|
231 | |
---|
232 | /** |
---|
233 | * Write Pattern Fill |
---|
234 | * |
---|
235 | * @param PHPExcel_Shared_XMLWriter $objWriter XML Writer |
---|
236 | * @param PHPExcel_Style_Fill $pFill Fill style |
---|
237 | * @throws PHPExcel_Writer_Exception |
---|
238 | */ |
---|
239 | private function _writePatternFill(PHPExcel_Shared_XMLWriter $objWriter = null, PHPExcel_Style_Fill $pFill = null) |
---|
240 | { |
---|
241 | // fill |
---|
242 | $objWriter->startElement('fill'); |
---|
243 | |
---|
244 | // patternFill |
---|
245 | $objWriter->startElement('patternFill'); |
---|
246 | $objWriter->writeAttribute('patternType', $pFill->getFillType()); |
---|
247 | |
---|
248 | if ($pFill->getFillType() !== PHPExcel_Style_Fill::FILL_NONE) { |
---|
249 | // fgColor |
---|
250 | if ($pFill->getStartColor()->getARGB()) { |
---|
251 | $objWriter->startElement('fgColor'); |
---|
252 | $objWriter->writeAttribute('rgb', $pFill->getStartColor()->getARGB()); |
---|
253 | $objWriter->endElement(); |
---|
254 | } |
---|
255 | } |
---|
256 | if ($pFill->getFillType() !== PHPExcel_Style_Fill::FILL_NONE) { |
---|
257 | // bgColor |
---|
258 | if ($pFill->getEndColor()->getARGB()) { |
---|
259 | $objWriter->startElement('bgColor'); |
---|
260 | $objWriter->writeAttribute('rgb', $pFill->getEndColor()->getARGB()); |
---|
261 | $objWriter->endElement(); |
---|
262 | } |
---|
263 | } |
---|
264 | |
---|
265 | $objWriter->endElement(); |
---|
266 | |
---|
267 | $objWriter->endElement(); |
---|
268 | } |
---|
269 | |
---|
270 | /** |
---|
271 | * Write Font |
---|
272 | * |
---|
273 | * @param PHPExcel_Shared_XMLWriter $objWriter XML Writer |
---|
274 | * @param PHPExcel_Style_Font $pFont Font style |
---|
275 | * @throws PHPExcel_Writer_Exception |
---|
276 | */ |
---|
277 | private function _writeFont(PHPExcel_Shared_XMLWriter $objWriter = null, PHPExcel_Style_Font $pFont = null) |
---|
278 | { |
---|
279 | // font |
---|
280 | $objWriter->startElement('font'); |
---|
281 | // Weird! The order of these elements actually makes a difference when opening Excel2007 |
---|
282 | // files in Excel2003 with the compatibility pack. It's not documented behaviour, |
---|
283 | // and makes for a real WTF! |
---|
284 | |
---|
285 | // Bold. We explicitly write this element also when false (like MS Office Excel 2007 does |
---|
286 | // for conditional formatting). Otherwise it will apparently not be picked up in conditional |
---|
287 | // formatting style dialog |
---|
288 | if ($pFont->getBold() !== NULL) { |
---|
289 | $objWriter->startElement('b'); |
---|
290 | $objWriter->writeAttribute('val', $pFont->getBold() ? '1' : '0'); |
---|
291 | $objWriter->endElement(); |
---|
292 | } |
---|
293 | |
---|
294 | // Italic |
---|
295 | if ($pFont->getItalic() !== NULL) { |
---|
296 | $objWriter->startElement('i'); |
---|
297 | $objWriter->writeAttribute('val', $pFont->getItalic() ? '1' : '0'); |
---|
298 | $objWriter->endElement(); |
---|
299 | } |
---|
300 | |
---|
301 | // Strikethrough |
---|
302 | if ($pFont->getStrikethrough() !== NULL) { |
---|
303 | $objWriter->startElement('strike'); |
---|
304 | $objWriter->writeAttribute('val', $pFont->getStrikethrough() ? '1' : '0'); |
---|
305 | $objWriter->endElement(); |
---|
306 | } |
---|
307 | |
---|
308 | // Underline |
---|
309 | if ($pFont->getUnderline() !== NULL) { |
---|
310 | $objWriter->startElement('u'); |
---|
311 | $objWriter->writeAttribute('val', $pFont->getUnderline()); |
---|
312 | $objWriter->endElement(); |
---|
313 | } |
---|
314 | |
---|
315 | // Superscript / subscript |
---|
316 | if ($pFont->getSuperScript() === TRUE || $pFont->getSubScript() === TRUE) { |
---|
317 | $objWriter->startElement('vertAlign'); |
---|
318 | if ($pFont->getSuperScript() === TRUE) { |
---|
319 | $objWriter->writeAttribute('val', 'superscript'); |
---|
320 | } else if ($pFont->getSubScript() === TRUE) { |
---|
321 | $objWriter->writeAttribute('val', 'subscript'); |
---|
322 | } |
---|
323 | $objWriter->endElement(); |
---|
324 | } |
---|
325 | |
---|
326 | // Size |
---|
327 | if ($pFont->getSize() !== NULL) { |
---|
328 | $objWriter->startElement('sz'); |
---|
329 | $objWriter->writeAttribute('val', $pFont->getSize()); |
---|
330 | $objWriter->endElement(); |
---|
331 | } |
---|
332 | |
---|
333 | // Foreground color |
---|
334 | if ($pFont->getColor()->getARGB() !== NULL) { |
---|
335 | $objWriter->startElement('color'); |
---|
336 | $objWriter->writeAttribute('rgb', $pFont->getColor()->getARGB()); |
---|
337 | $objWriter->endElement(); |
---|
338 | } |
---|
339 | |
---|
340 | // Name |
---|
341 | if ($pFont->getName() !== NULL) { |
---|
342 | $objWriter->startElement('name'); |
---|
343 | $objWriter->writeAttribute('val', $pFont->getName()); |
---|
344 | $objWriter->endElement(); |
---|
345 | } |
---|
346 | |
---|
347 | $objWriter->endElement(); |
---|
348 | } |
---|
349 | |
---|
350 | /** |
---|
351 | * Write Border |
---|
352 | * |
---|
353 | * @param PHPExcel_Shared_XMLWriter $objWriter XML Writer |
---|
354 | * @param PHPExcel_Style_Borders $pBorders Borders style |
---|
355 | * @throws PHPExcel_Writer_Exception |
---|
356 | */ |
---|
357 | private function _writeBorder(PHPExcel_Shared_XMLWriter $objWriter = null, PHPExcel_Style_Borders $pBorders = null) |
---|
358 | { |
---|
359 | // Write border |
---|
360 | $objWriter->startElement('border'); |
---|
361 | // Diagonal? |
---|
362 | switch ($pBorders->getDiagonalDirection()) { |
---|
363 | case PHPExcel_Style_Borders::DIAGONAL_UP: |
---|
364 | $objWriter->writeAttribute('diagonalUp', 'true'); |
---|
365 | $objWriter->writeAttribute('diagonalDown', 'false'); |
---|
366 | break; |
---|
367 | case PHPExcel_Style_Borders::DIAGONAL_DOWN: |
---|
368 | $objWriter->writeAttribute('diagonalUp', 'false'); |
---|
369 | $objWriter->writeAttribute('diagonalDown', 'true'); |
---|
370 | break; |
---|
371 | case PHPExcel_Style_Borders::DIAGONAL_BOTH: |
---|
372 | $objWriter->writeAttribute('diagonalUp', 'true'); |
---|
373 | $objWriter->writeAttribute('diagonalDown', 'true'); |
---|
374 | break; |
---|
375 | } |
---|
376 | |
---|
377 | // BorderPr |
---|
378 | $this->_writeBorderPr($objWriter, 'left', $pBorders->getLeft()); |
---|
379 | $this->_writeBorderPr($objWriter, 'right', $pBorders->getRight()); |
---|
380 | $this->_writeBorderPr($objWriter, 'top', $pBorders->getTop()); |
---|
381 | $this->_writeBorderPr($objWriter, 'bottom', $pBorders->getBottom()); |
---|
382 | $this->_writeBorderPr($objWriter, 'diagonal', $pBorders->getDiagonal()); |
---|
383 | $objWriter->endElement(); |
---|
384 | } |
---|
385 | |
---|
386 | /** |
---|
387 | * Write Cell Style Xf |
---|
388 | * |
---|
389 | * @param PHPExcel_Shared_XMLWriter $objWriter XML Writer |
---|
390 | * @param PHPExcel_Style $pStyle Style |
---|
391 | * @param PHPExcel $pPHPExcel Workbook |
---|
392 | * @throws PHPExcel_Writer_Exception |
---|
393 | */ |
---|
394 | private function _writeCellStyleXf(PHPExcel_Shared_XMLWriter $objWriter = null, PHPExcel_Style $pStyle = null, PHPExcel $pPHPExcel = null) |
---|
395 | { |
---|
396 | // xf |
---|
397 | $objWriter->startElement('xf'); |
---|
398 | $objWriter->writeAttribute('xfId', 0); |
---|
399 | $objWriter->writeAttribute('fontId', (int)$this->getParentWriter()->getFontHashTable()->getIndexForHashCode($pStyle->getFont()->getHashCode())); |
---|
400 | if ($pStyle->getQuotePrefix()) { |
---|
401 | $objWriter->writeAttribute('quotePrefix', 1); |
---|
402 | } |
---|
403 | |
---|
404 | if ($pStyle->getNumberFormat()->getBuiltInFormatCode() === false) { |
---|
405 | $objWriter->writeAttribute('numFmtId', (int)($this->getParentWriter()->getNumFmtHashTable()->getIndexForHashCode($pStyle->getNumberFormat()->getHashCode()) + 164) ); |
---|
406 | } else { |
---|
407 | $objWriter->writeAttribute('numFmtId', (int)$pStyle->getNumberFormat()->getBuiltInFormatCode()); |
---|
408 | } |
---|
409 | |
---|
410 | $objWriter->writeAttribute('fillId', (int)$this->getParentWriter()->getFillHashTable()->getIndexForHashCode($pStyle->getFill()->getHashCode())); |
---|
411 | $objWriter->writeAttribute('borderId', (int)$this->getParentWriter()->getBordersHashTable()->getIndexForHashCode($pStyle->getBorders()->getHashCode())); |
---|
412 | |
---|
413 | // Apply styles? |
---|
414 | $objWriter->writeAttribute('applyFont', ($pPHPExcel->getDefaultStyle()->getFont()->getHashCode() != $pStyle->getFont()->getHashCode()) ? '1' : '0'); |
---|
415 | $objWriter->writeAttribute('applyNumberFormat', ($pPHPExcel->getDefaultStyle()->getNumberFormat()->getHashCode() != $pStyle->getNumberFormat()->getHashCode()) ? '1' : '0'); |
---|
416 | $objWriter->writeAttribute('applyFill', ($pPHPExcel->getDefaultStyle()->getFill()->getHashCode() != $pStyle->getFill()->getHashCode()) ? '1' : '0'); |
---|
417 | $objWriter->writeAttribute('applyBorder', ($pPHPExcel->getDefaultStyle()->getBorders()->getHashCode() != $pStyle->getBorders()->getHashCode()) ? '1' : '0'); |
---|
418 | $objWriter->writeAttribute('applyAlignment', ($pPHPExcel->getDefaultStyle()->getAlignment()->getHashCode() != $pStyle->getAlignment()->getHashCode()) ? '1' : '0'); |
---|
419 | if ($pStyle->getProtection()->getLocked() != PHPExcel_Style_Protection::PROTECTION_INHERIT || $pStyle->getProtection()->getHidden() != PHPExcel_Style_Protection::PROTECTION_INHERIT) { |
---|
420 | $objWriter->writeAttribute('applyProtection', 'true'); |
---|
421 | } |
---|
422 | |
---|
423 | // alignment |
---|
424 | $objWriter->startElement('alignment'); |
---|
425 | $objWriter->writeAttribute('horizontal', $pStyle->getAlignment()->getHorizontal()); |
---|
426 | $objWriter->writeAttribute('vertical', $pStyle->getAlignment()->getVertical()); |
---|
427 | |
---|
428 | $textRotation = 0; |
---|
429 | if ($pStyle->getAlignment()->getTextRotation() >= 0) { |
---|
430 | $textRotation = $pStyle->getAlignment()->getTextRotation(); |
---|
431 | } else if ($pStyle->getAlignment()->getTextRotation() < 0) { |
---|
432 | $textRotation = 90 - $pStyle->getAlignment()->getTextRotation(); |
---|
433 | } |
---|
434 | $objWriter->writeAttribute('textRotation', $textRotation); |
---|
435 | |
---|
436 | $objWriter->writeAttribute('wrapText', ($pStyle->getAlignment()->getWrapText() ? 'true' : 'false')); |
---|
437 | $objWriter->writeAttribute('shrinkToFit', ($pStyle->getAlignment()->getShrinkToFit() ? 'true' : 'false')); |
---|
438 | |
---|
439 | if ($pStyle->getAlignment()->getIndent() > 0) { |
---|
440 | $objWriter->writeAttribute('indent', $pStyle->getAlignment()->getIndent()); |
---|
441 | } |
---|
442 | $objWriter->endElement(); |
---|
443 | |
---|
444 | // protection |
---|
445 | if ($pStyle->getProtection()->getLocked() != PHPExcel_Style_Protection::PROTECTION_INHERIT || $pStyle->getProtection()->getHidden() != PHPExcel_Style_Protection::PROTECTION_INHERIT) { |
---|
446 | $objWriter->startElement('protection'); |
---|
447 | if ($pStyle->getProtection()->getLocked() != PHPExcel_Style_Protection::PROTECTION_INHERIT) { |
---|
448 | $objWriter->writeAttribute('locked', ($pStyle->getProtection()->getLocked() == PHPExcel_Style_Protection::PROTECTION_PROTECTED ? 'true' : 'false')); |
---|
449 | } |
---|
450 | if ($pStyle->getProtection()->getHidden() != PHPExcel_Style_Protection::PROTECTION_INHERIT) { |
---|
451 | $objWriter->writeAttribute('hidden', ($pStyle->getProtection()->getHidden() == PHPExcel_Style_Protection::PROTECTION_PROTECTED ? 'true' : 'false')); |
---|
452 | } |
---|
453 | $objWriter->endElement(); |
---|
454 | } |
---|
455 | |
---|
456 | $objWriter->endElement(); |
---|
457 | } |
---|
458 | |
---|
459 | /** |
---|
460 | * Write Cell Style Dxf |
---|
461 | * |
---|
462 | * @param PHPExcel_Shared_XMLWriter $objWriter XML Writer |
---|
463 | * @param PHPExcel_Style $pStyle Style |
---|
464 | * @throws PHPExcel_Writer_Exception |
---|
465 | */ |
---|
466 | private function _writeCellStyleDxf(PHPExcel_Shared_XMLWriter $objWriter = null, PHPExcel_Style $pStyle = null) |
---|
467 | { |
---|
468 | // dxf |
---|
469 | $objWriter->startElement('dxf'); |
---|
470 | |
---|
471 | // font |
---|
472 | $this->_writeFont($objWriter, $pStyle->getFont()); |
---|
473 | |
---|
474 | // numFmt |
---|
475 | $this->_writeNumFmt($objWriter, $pStyle->getNumberFormat()); |
---|
476 | |
---|
477 | // fill |
---|
478 | $this->_writeFill($objWriter, $pStyle->getFill()); |
---|
479 | |
---|
480 | // alignment |
---|
481 | $objWriter->startElement('alignment'); |
---|
482 | if ($pStyle->getAlignment()->getHorizontal() !== NULL) { |
---|
483 | $objWriter->writeAttribute('horizontal', $pStyle->getAlignment()->getHorizontal()); |
---|
484 | } |
---|
485 | if ($pStyle->getAlignment()->getVertical() !== NULL) { |
---|
486 | $objWriter->writeAttribute('vertical', $pStyle->getAlignment()->getVertical()); |
---|
487 | } |
---|
488 | |
---|
489 | if ($pStyle->getAlignment()->getTextRotation() !== NULL) { |
---|
490 | $textRotation = 0; |
---|
491 | if ($pStyle->getAlignment()->getTextRotation() >= 0) { |
---|
492 | $textRotation = $pStyle->getAlignment()->getTextRotation(); |
---|
493 | } else if ($pStyle->getAlignment()->getTextRotation() < 0) { |
---|
494 | $textRotation = 90 - $pStyle->getAlignment()->getTextRotation(); |
---|
495 | } |
---|
496 | $objWriter->writeAttribute('textRotation', $textRotation); |
---|
497 | } |
---|
498 | $objWriter->endElement(); |
---|
499 | |
---|
500 | // border |
---|
501 | $this->_writeBorder($objWriter, $pStyle->getBorders()); |
---|
502 | |
---|
503 | // protection |
---|
504 | if (($pStyle->getProtection()->getLocked() !== NULL) || |
---|
505 | ($pStyle->getProtection()->getHidden() !== NULL)) { |
---|
506 | if ($pStyle->getProtection()->getLocked() !== PHPExcel_Style_Protection::PROTECTION_INHERIT || |
---|
507 | $pStyle->getProtection()->getHidden() !== PHPExcel_Style_Protection::PROTECTION_INHERIT) { |
---|
508 | $objWriter->startElement('protection'); |
---|
509 | if (($pStyle->getProtection()->getLocked() !== NULL) && |
---|
510 | ($pStyle->getProtection()->getLocked() !== PHPExcel_Style_Protection::PROTECTION_INHERIT)) { |
---|
511 | $objWriter->writeAttribute('locked', ($pStyle->getProtection()->getLocked() == PHPExcel_Style_Protection::PROTECTION_PROTECTED ? 'true' : 'false')); |
---|
512 | } |
---|
513 | if (($pStyle->getProtection()->getHidden() !== NULL) && |
---|
514 | ($pStyle->getProtection()->getHidden() !== PHPExcel_Style_Protection::PROTECTION_INHERIT)) { |
---|
515 | $objWriter->writeAttribute('hidden', ($pStyle->getProtection()->getHidden() == PHPExcel_Style_Protection::PROTECTION_PROTECTED ? 'true' : 'false')); |
---|
516 | } |
---|
517 | $objWriter->endElement(); |
---|
518 | } |
---|
519 | } |
---|
520 | |
---|
521 | $objWriter->endElement(); |
---|
522 | } |
---|
523 | |
---|
524 | /** |
---|
525 | * Write BorderPr |
---|
526 | * |
---|
527 | * @param PHPExcel_Shared_XMLWriter $objWriter XML Writer |
---|
528 | * @param string $pName Element name |
---|
529 | * @param PHPExcel_Style_Border $pBorder Border style |
---|
530 | * @throws PHPExcel_Writer_Exception |
---|
531 | */ |
---|
532 | private function _writeBorderPr(PHPExcel_Shared_XMLWriter $objWriter = null, $pName = 'left', PHPExcel_Style_Border $pBorder = null) |
---|
533 | { |
---|
534 | // Write BorderPr |
---|
535 | if ($pBorder->getBorderStyle() != PHPExcel_Style_Border::BORDER_NONE) { |
---|
536 | $objWriter->startElement($pName); |
---|
537 | $objWriter->writeAttribute('style', $pBorder->getBorderStyle()); |
---|
538 | |
---|
539 | // color |
---|
540 | $objWriter->startElement('color'); |
---|
541 | $objWriter->writeAttribute('rgb', $pBorder->getColor()->getARGB()); |
---|
542 | $objWriter->endElement(); |
---|
543 | |
---|
544 | $objWriter->endElement(); |
---|
545 | } |
---|
546 | } |
---|
547 | |
---|
548 | /** |
---|
549 | * Write NumberFormat |
---|
550 | * |
---|
551 | * @param PHPExcel_Shared_XMLWriter $objWriter XML Writer |
---|
552 | * @param PHPExcel_Style_NumberFormat $pNumberFormat Number Format |
---|
553 | * @param int $pId Number Format identifier |
---|
554 | * @throws PHPExcel_Writer_Exception |
---|
555 | */ |
---|
556 | private function _writeNumFmt(PHPExcel_Shared_XMLWriter $objWriter = null, PHPExcel_Style_NumberFormat $pNumberFormat = null, $pId = 0) |
---|
557 | { |
---|
558 | // Translate formatcode |
---|
559 | $formatCode = $pNumberFormat->getFormatCode(); |
---|
560 | |
---|
561 | // numFmt |
---|
562 | if ($formatCode !== NULL) { |
---|
563 | $objWriter->startElement('numFmt'); |
---|
564 | $objWriter->writeAttribute('numFmtId', ($pId + 164)); |
---|
565 | $objWriter->writeAttribute('formatCode', $formatCode); |
---|
566 | $objWriter->endElement(); |
---|
567 | } |
---|
568 | } |
---|
569 | |
---|
570 | /** |
---|
571 | * Get an array of all styles |
---|
572 | * |
---|
573 | * @param PHPExcel $pPHPExcel |
---|
574 | * @return PHPExcel_Style[] All styles in PHPExcel |
---|
575 | * @throws PHPExcel_Writer_Exception |
---|
576 | */ |
---|
577 | public function allStyles(PHPExcel $pPHPExcel = null) |
---|
578 | { |
---|
579 | $aStyles = $pPHPExcel->getCellXfCollection(); |
---|
580 | |
---|
581 | return $aStyles; |
---|
582 | } |
---|
583 | |
---|
584 | /** |
---|
585 | * Get an array of all conditional styles |
---|
586 | * |
---|
587 | * @param PHPExcel $pPHPExcel |
---|
588 | * @return PHPExcel_Style_Conditional[] All conditional styles in PHPExcel |
---|
589 | * @throws PHPExcel_Writer_Exception |
---|
590 | */ |
---|
591 | public function allConditionalStyles(PHPExcel $pPHPExcel = null) |
---|
592 | { |
---|
593 | // Get an array of all styles |
---|
594 | $aStyles = array(); |
---|
595 | |
---|
596 | $sheetCount = $pPHPExcel->getSheetCount(); |
---|
597 | for ($i = 0; $i < $sheetCount; ++$i) { |
---|
598 | foreach ($pPHPExcel->getSheet($i)->getConditionalStylesCollection() as $conditionalStyles) { |
---|
599 | foreach ($conditionalStyles as $conditionalStyle) { |
---|
600 | $aStyles[] = $conditionalStyle; |
---|
601 | } |
---|
602 | } |
---|
603 | } |
---|
604 | |
---|
605 | return $aStyles; |
---|
606 | } |
---|
607 | |
---|
608 | /** |
---|
609 | * Get an array of all fills |
---|
610 | * |
---|
611 | * @param PHPExcel $pPHPExcel |
---|
612 | * @return PHPExcel_Style_Fill[] All fills in PHPExcel |
---|
613 | * @throws PHPExcel_Writer_Exception |
---|
614 | */ |
---|
615 | public function allFills(PHPExcel $pPHPExcel = null) |
---|
616 | { |
---|
617 | // Get an array of unique fills |
---|
618 | $aFills = array(); |
---|
619 | |
---|
620 | // Two first fills are predefined |
---|
621 | $fill0 = new PHPExcel_Style_Fill(); |
---|
622 | $fill0->setFillType(PHPExcel_Style_Fill::FILL_NONE); |
---|
623 | $aFills[] = $fill0; |
---|
624 | |
---|
625 | $fill1 = new PHPExcel_Style_Fill(); |
---|
626 | $fill1->setFillType(PHPExcel_Style_Fill::FILL_PATTERN_GRAY125); |
---|
627 | $aFills[] = $fill1; |
---|
628 | // The remaining fills |
---|
629 | $aStyles = $this->allStyles($pPHPExcel); |
---|
630 | foreach ($aStyles as $style) { |
---|
631 | if (!array_key_exists($style->getFill()->getHashCode(), $aFills)) { |
---|
632 | $aFills[ $style->getFill()->getHashCode() ] = $style->getFill(); |
---|
633 | } |
---|
634 | } |
---|
635 | |
---|
636 | return $aFills; |
---|
637 | } |
---|
638 | |
---|
639 | /** |
---|
640 | * Get an array of all fonts |
---|
641 | * |
---|
642 | * @param PHPExcel $pPHPExcel |
---|
643 | * @return PHPExcel_Style_Font[] All fonts in PHPExcel |
---|
644 | * @throws PHPExcel_Writer_Exception |
---|
645 | */ |
---|
646 | public function allFonts(PHPExcel $pPHPExcel = null) |
---|
647 | { |
---|
648 | // Get an array of unique fonts |
---|
649 | $aFonts = array(); |
---|
650 | $aStyles = $this->allStyles($pPHPExcel); |
---|
651 | |
---|
652 | foreach ($aStyles as $style) { |
---|
653 | if (!array_key_exists($style->getFont()->getHashCode(), $aFonts)) { |
---|
654 | $aFonts[ $style->getFont()->getHashCode() ] = $style->getFont(); |
---|
655 | } |
---|
656 | } |
---|
657 | |
---|
658 | return $aFonts; |
---|
659 | } |
---|
660 | |
---|
661 | /** |
---|
662 | * Get an array of all borders |
---|
663 | * |
---|
664 | * @param PHPExcel $pPHPExcel |
---|
665 | * @return PHPExcel_Style_Borders[] All borders in PHPExcel |
---|
666 | * @throws PHPExcel_Writer_Exception |
---|
667 | */ |
---|
668 | public function allBorders(PHPExcel $pPHPExcel = null) |
---|
669 | { |
---|
670 | // Get an array of unique borders |
---|
671 | $aBorders = array(); |
---|
672 | $aStyles = $this->allStyles($pPHPExcel); |
---|
673 | |
---|
674 | foreach ($aStyles as $style) { |
---|
675 | if (!array_key_exists($style->getBorders()->getHashCode(), $aBorders)) { |
---|
676 | $aBorders[ $style->getBorders()->getHashCode() ] = $style->getBorders(); |
---|
677 | } |
---|
678 | } |
---|
679 | |
---|
680 | return $aBorders; |
---|
681 | } |
---|
682 | |
---|
683 | /** |
---|
684 | * Get an array of all number formats |
---|
685 | * |
---|
686 | * @param PHPExcel $pPHPExcel |
---|
687 | * @return PHPExcel_Style_NumberFormat[] All number formats in PHPExcel |
---|
688 | * @throws PHPExcel_Writer_Exception |
---|
689 | */ |
---|
690 | public function allNumberFormats(PHPExcel $pPHPExcel = null) |
---|
691 | { |
---|
692 | // Get an array of unique number formats |
---|
693 | $aNumFmts = array(); |
---|
694 | $aStyles = $this->allStyles($pPHPExcel); |
---|
695 | |
---|
696 | foreach ($aStyles as $style) { |
---|
697 | if ($style->getNumberFormat()->getBuiltInFormatCode() === false && !array_key_exists($style->getNumberFormat()->getHashCode(), $aNumFmts)) { |
---|
698 | $aNumFmts[ $style->getNumberFormat()->getHashCode() ] = $style->getNumberFormat(); |
---|
699 | } |
---|
700 | } |
---|
701 | |
---|
702 | return $aNumFmts; |
---|
703 | } |
---|
704 | } |
---|