source: sourcecode/application/libraries/PHPExcel/Writer/Excel2007/Style.php @ 1

Last change on this file since 1 was 1, checked in by dungnv, 11 years ago
File size: 23.9 KB
Line 
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 */
36class 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}
Note: See TracBrowser for help on using the repository browser.