PluginProbe
Visualizer – Tables & Charts Manager with Built-in AI Generator / 3.0.3
Visualizer – Tables & Charts Manager with Built-in AI Generator v3.0.3
4.0.8 4.0.7 4.0.6 4.0.5 4.0.4 4.0.3 3.0.5 3.0.6 3.0.7 3.0.8 3.0.9 3.1.0 3.1.1 3.1.2 3.1.3 3.10.0 3.10.1 3.10.10 3.10.11 3.10.12 3.10.13 3.10.14 3.10.15 3.10.2 3.10.3 All 149 releases
visualizer / vendor / phpoffice / phpexcel / Classes / PHPExcel / Writer / OpenDocument / Content.php

Content.php in Visualizer – Tables & Charts Manager with Built-in AI Generator 3.0.3, at vendor/phpoffice/phpexcel/Classes/PHPExcel/Writer/OpenDocument/Content.php

273 lines 12.6 KB
No matching file
Up and down to move Enter to open Esc to close
Raw Download Zip
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_OpenDocument
23 * @copyright Copyright (c) 2006 - 2014 PHPExcel (http://www.codeplex.com/PHPExcel)
24 * @license http://www.gnu.org/licenses/old-licenses/lgpl-2.1.txt LGPL
25 * @version ##VERSION##, ##DATE##
26 */
27
28
29 /**
30 * PHPExcel_Writer_OpenDocument_Content
31 *
32 * @category PHPExcel
33 * @package PHPExcel_Writer_OpenDocument
34 * @copyright Copyright (c) 2006 - 2014 PHPExcel (http://www.codeplex.com/PHPExcel)
35 * @author Alexander Pervakov <frost-nzcr4@jagmort.com>
36 */
37 class PHPExcel_Writer_OpenDocument_Content extends PHPExcel_Writer_OpenDocument_WriterPart
38 {
39 const NUMBER_COLS_REPEATED_MAX = 1024;
40 const NUMBER_ROWS_REPEATED_MAX = 1048576;
41
42 /**
43 * Write content.xml to XML format
44 *
45 * @param PHPExcel $pPHPExcel
46 * @return string XML Output
47 * @throws PHPExcel_Writer_Exception
48 */
49 public function write(PHPExcel $pPHPExcel = null)
50 {
51 if (!$pPHPExcel) {
52 $pPHPExcel = $this->getParentWriter()->getPHPExcel(); /* @var $pPHPExcel PHPExcel */
53 }
54
55 $objWriter = null;
56 if ($this->getParentWriter()->getUseDiskCaching()) {
57 $objWriter = new PHPExcel_Shared_XMLWriter(PHPExcel_Shared_XMLWriter::STORAGE_DISK, $this->getParentWriter()->getDiskCachingDirectory());
58 } else {
59 $objWriter = new PHPExcel_Shared_XMLWriter(PHPExcel_Shared_XMLWriter::STORAGE_MEMORY);
60 }
61
62 // XML header
63 $objWriter->startDocument('1.0', 'UTF-8');
64
65 // Content
66 $objWriter->startElement('office:document-content');
67 $objWriter->writeAttribute('xmlns:office', 'urn:oasis:names:tc:opendocument:xmlns:office:1.0');
68 $objWriter->writeAttribute('xmlns:style', 'urn:oasis:names:tc:opendocument:xmlns:style:1.0');
69 $objWriter->writeAttribute('xmlns:text', 'urn:oasis:names:tc:opendocument:xmlns:text:1.0');
70 $objWriter->writeAttribute('xmlns:table', 'urn:oasis:names:tc:opendocument:xmlns:table:1.0');
71 $objWriter->writeAttribute('xmlns:draw', 'urn:oasis:names:tc:opendocument:xmlns:drawing:1.0');
72 $objWriter->writeAttribute('xmlns:fo', 'urn:oasis:names:tc:opendocument:xmlns:xsl-fo-compatible:1.0');
73 $objWriter->writeAttribute('xmlns:xlink', 'http://www.w3.org/1999/xlink');
74 $objWriter->writeAttribute('xmlns:dc', 'http://purl.org/dc/elements/1.1/');
75 $objWriter->writeAttribute('xmlns:meta', 'urn:oasis:names:tc:opendocument:xmlns:meta:1.0');
76 $objWriter->writeAttribute('xmlns:number', 'urn:oasis:names:tc:opendocument:xmlns:datastyle:1.0');
77 $objWriter->writeAttribute('xmlns:presentation', 'urn:oasis:names:tc:opendocument:xmlns:presentation:1.0');
78 $objWriter->writeAttribute('xmlns:svg', 'urn:oasis:names:tc:opendocument:xmlns:svg-compatible:1.0');
79 $objWriter->writeAttribute('xmlns:chart', 'urn:oasis:names:tc:opendocument:xmlns:chart:1.0');
80 $objWriter->writeAttribute('xmlns:dr3d', 'urn:oasis:names:tc:opendocument:xmlns:dr3d:1.0');
81 $objWriter->writeAttribute('xmlns:math', 'http://www.w3.org/1998/Math/MathML');
82 $objWriter->writeAttribute('xmlns:form', 'urn:oasis:names:tc:opendocument:xmlns:form:1.0');
83 $objWriter->writeAttribute('xmlns:script', 'urn:oasis:names:tc:opendocument:xmlns:script:1.0');
84 $objWriter->writeAttribute('xmlns:ooo', 'http://openoffice.org/2004/office');
85 $objWriter->writeAttribute('xmlns:ooow', 'http://openoffice.org/2004/writer');
86 $objWriter->writeAttribute('xmlns:oooc', 'http://openoffice.org/2004/calc');
87 $objWriter->writeAttribute('xmlns:dom', 'http://www.w3.org/2001/xml-events');
88 $objWriter->writeAttribute('xmlns:xforms', 'http://www.w3.org/2002/xforms');
89 $objWriter->writeAttribute('xmlns:xsd', 'http://www.w3.org/2001/XMLSchema');
90 $objWriter->writeAttribute('xmlns:xsi', 'http://www.w3.org/2001/XMLSchema-instance');
91 $objWriter->writeAttribute('xmlns:rpt', 'http://openoffice.org/2005/report');
92 $objWriter->writeAttribute('xmlns:of', 'urn:oasis:names:tc:opendocument:xmlns:of:1.2');
93 $objWriter->writeAttribute('xmlns:xhtml', 'http://www.w3.org/1999/xhtml');
94 $objWriter->writeAttribute('xmlns:grddl', 'http://www.w3.org/2003/g/data-view#');
95 $objWriter->writeAttribute('xmlns:tableooo', 'http://openoffice.org/2009/table');
96 $objWriter->writeAttribute('xmlns:field', 'urn:openoffice:names:experimental:ooo-ms-interop:xmlns:field:1.0');
97 $objWriter->writeAttribute('xmlns:formx', 'urn:openoffice:names:experimental:ooxml-odf-interop:xmlns:form:1.0');
98 $objWriter->writeAttribute('xmlns:css3t', 'http://www.w3.org/TR/css3-text/');
99 $objWriter->writeAttribute('office:version', '1.2');
100
101 $objWriter->writeElement('office:scripts');
102 $objWriter->writeElement('office:font-face-decls');
103 $objWriter->writeElement('office:automatic-styles');
104
105 $objWriter->startElement('office:body');
106 $objWriter->startElement('office:spreadsheet');
107 $objWriter->writeElement('table:calculation-settings');
108 $this->_writeSheets($objWriter);
109 $objWriter->writeElement('table:named-expressions');
110 $objWriter->endElement();
111 $objWriter->endElement();
112 $objWriter->endElement();
113
114 return $objWriter->getData();
115 }
116
117 /**
118 * Write sheets
119 *
120 * @param PHPExcel_Shared_XMLWriter $objWriter
121 */
122 private function _writeSheets(PHPExcel_Shared_XMLWriter $objWriter)
123 {
124 $pPHPExcel = $this->getParentWriter()->getPHPExcel(); /* @var $pPHPExcel PHPExcel */
125
126 $sheet_count = $pPHPExcel->getSheetCount();
127 for ($i = 0; $i < $sheet_count; $i++) {
128 //$this->getWriterPart('Worksheet')->writeWorksheet());
129 $objWriter->startElement('table:table');
130 $objWriter->writeAttribute('table:name', $pPHPExcel->getSheet($i)->getTitle());
131 $objWriter->writeElement('office:forms');
132 $objWriter->startElement('table:table-column');
133 $objWriter->writeAttribute('table:number-columns-repeated', self::NUMBER_COLS_REPEATED_MAX);
134 $objWriter->endElement();
135 $this->_writeRows($objWriter, $pPHPExcel->getSheet($i));
136 $objWriter->endElement();
137 }
138 }
139
140 /**
141 * Write rows of the specified sheet
142 *
143 * @param PHPExcel_Shared_XMLWriter $objWriter
144 * @param PHPExcel_Worksheet $sheet
145 */
146 private function _writeRows(PHPExcel_Shared_XMLWriter $objWriter, PHPExcel_Worksheet $sheet)
147 {
148 $number_rows_repeated = self::NUMBER_ROWS_REPEATED_MAX;
149 $span_row = 0;
150 $rows = $sheet->getRowIterator();
151 while ($rows->valid()) {
152 $number_rows_repeated--;
153 $row = $rows->current();
154 if ($row->getCellIterator()->valid()) {
155 if ($span_row) {
156 $objWriter->startElement('table:table-row');
157 if ($span_row > 1) {
158 $objWriter->writeAttribute('table:number-rows-repeated', $span_row);
159 }
160 $objWriter->startElement('table:table-cell');
161 $objWriter->writeAttribute('table:number-columns-repeated', self::NUMBER_COLS_REPEATED_MAX);
162 $objWriter->endElement();
163 $objWriter->endElement();
164 $span_row = 0;
165 }
166 $objWriter->startElement('table:table-row');
167 $this->_writeCells($objWriter, $row);
168 $objWriter->endElement();
169 } else {
170 $span_row++;
171 }
172 $rows->next();
173 }
174 }
175
176 /**
177 * Write cells of the specified row
178 *
179 * @param PHPExcel_Shared_XMLWriter $objWriter
180 * @param PHPExcel_Worksheet_Row $row
181 * @throws PHPExcel_Writer_Exception
182 */
183 private function _writeCells(PHPExcel_Shared_XMLWriter $objWriter, PHPExcel_Worksheet_Row $row)
184 {
185 $number_cols_repeated = self::NUMBER_COLS_REPEATED_MAX;
186 $prev_column = -1;
187 $cells = $row->getCellIterator();
188 while ($cells->valid()) {
189 $cell = $cells->current();
190 $column = PHPExcel_Cell::columnIndexFromString($cell->getColumn()) - 1;
191
192 $this->_writeCellSpan($objWriter, $column, $prev_column);
193 $objWriter->startElement('table:table-cell');
194
195 switch ($cell->getDataType()) {
196 case PHPExcel_Cell_DataType::TYPE_BOOL:
197 $objWriter->writeAttribute('office:value-type', 'boolean');
198 $objWriter->writeAttribute('office:value', $cell->getValue());
199 $objWriter->writeElement('text:p', $cell->getValue());
200 break;
201
202 case PHPExcel_Cell_DataType::TYPE_ERROR:
203 throw new PHPExcel_Writer_Exception('Writing of error not implemented yet.');
204 break;
205
206 case PHPExcel_Cell_DataType::TYPE_FORMULA:
207 try {
208 $formula_value = $cell->getCalculatedValue();
209 } catch (Exception $e) {
210 $formula_value = $cell->getValue();
211 }
212 $objWriter->writeAttribute('table:formula', 'of:' . $cell->getValue());
213 if (is_numeric($formula_value)) {
214 $objWriter->writeAttribute('office:value-type', 'float');
215 } else {
216 $objWriter->writeAttribute('office:value-type', 'string');
217 }
218 $objWriter->writeAttribute('office:value', $formula_value);
219 $objWriter->writeElement('text:p', $formula_value);
220 break;
221
222 case PHPExcel_Cell_DataType::TYPE_INLINE:
223 throw new PHPExcel_Writer_Exception('Writing of inline not implemented yet.');
224 break;
225
226 case PHPExcel_Cell_DataType::TYPE_NUMERIC:
227 $objWriter->writeAttribute('office:value-type', 'float');
228 $objWriter->writeAttribute('office:value', $cell->getValue());
229 $objWriter->writeElement('text:p', $cell->getValue());
230 break;
231
232 case PHPExcel_Cell_DataType::TYPE_STRING:
233 $objWriter->writeAttribute('office:value-type', 'string');
234 $objWriter->writeElement('text:p', $cell->getValue());
235 break;
236 }
237 PHPExcel_Writer_OpenDocument_Cell_Comment::write($objWriter, $cell);
238 $objWriter->endElement();
239 $prev_column = $column;
240 $cells->next();
241 }
242 $number_cols_repeated = $number_cols_repeated - $prev_column - 1;
243 if ($number_cols_repeated > 0) {
244 if ($number_cols_repeated > 1) {
245 $objWriter->startElement('table:table-cell');
246 $objWriter->writeAttribute('table:number-columns-repeated', $number_cols_repeated);
247 $objWriter->endElement();
248 } else {
249 $objWriter->writeElement('table:table-cell');
250 }
251 }
252 }
253
254 /**
255 * Write span
256 *
257 * @param PHPExcel_Shared_XMLWriter $objWriter
258 * @param integer $curColumn
259 * @param integer $prevColumn
260 */
261 private function _writeCellSpan(PHPExcel_Shared_XMLWriter $objWriter, $curColumn, $prevColumn)
262 {
263 $diff = $curColumn - $prevColumn - 1;
264 if (1 === $diff) {
265 $objWriter->writeElement('table:table-cell');
266 } elseif ($diff > 1) {
267 $objWriter->startElement('table:table-cell');
268 $objWriter->writeAttribute('table:number-columns-repeated', $diff);
269 $objWriter->endElement();
270 }
271 }
272 }
273