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 / Excel2007 / StringTable.php

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

320 lines 10.4 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_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 ##VERSION##, ##DATE##
26 */
27
28
29 /**
30 * PHPExcel_Writer_Excel2007_StringTable
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_StringTable extends PHPExcel_Writer_Excel2007_WriterPart
37 {
38 /**
39 * Create worksheet stringtable
40 *
41 * @param PHPExcel_Worksheet $pSheet Worksheet
42 * @param string[] $pExistingTable Existing table to eventually merge with
43 * @return string[] String table for worksheet
44 * @throws PHPExcel_Writer_Exception
45 */
46 public function createStringTable($pSheet = null, $pExistingTable = null)
47 {
48 if ($pSheet !== NULL) {
49 // Create string lookup table
50 $aStringTable = array();
51 $cellCollection = null;
52 $aFlippedStringTable = null; // For faster lookup
53
54 // Is an existing table given?
55 if (($pExistingTable !== NULL) && is_array($pExistingTable)) {
56 $aStringTable = $pExistingTable;
57 }
58
59 // Fill index array
60 $aFlippedStringTable = $this->flipStringTable($aStringTable);
61
62 // Loop through cells
63 foreach ($pSheet->getCellCollection() as $cellID) {
64 $cell = $pSheet->getCell($cellID);
65 $cellValue = $cell->getValue();
66 if (!is_object($cellValue) &&
67 ($cellValue !== NULL) &&
68 $cellValue !== '' &&
69 !isset($aFlippedStringTable[$cellValue]) &&
70 ($cell->getDataType() == PHPExcel_Cell_DataType::TYPE_STRING || $cell->getDataType() == PHPExcel_Cell_DataType::TYPE_STRING2 || $cell->getDataType() == PHPExcel_Cell_DataType::TYPE_NULL)) {
71 $aStringTable[] = $cellValue;
72 $aFlippedStringTable[$cellValue] = true;
73 } elseif ($cellValue instanceof PHPExcel_RichText &&
74 ($cellValue !== NULL) &&
75 !isset($aFlippedStringTable[$cellValue->getHashCode()])) {
76 $aStringTable[] = $cellValue;
77 $aFlippedStringTable[$cellValue->getHashCode()] = true;
78 }
79 }
80
81 // Return
82 return $aStringTable;
83 } else {
84 throw new PHPExcel_Writer_Exception("Invalid PHPExcel_Worksheet object passed.");
85 }
86 }
87
88 /**
89 * Write string table to XML format
90 *
91 * @param string[] $pStringTable
92 * @return string XML Output
93 * @throws PHPExcel_Writer_Exception
94 */
95 public function writeStringTable($pStringTable = null)
96 {
97 if ($pStringTable !== NULL) {
98 // Create XML writer
99 $objWriter = null;
100 if ($this->getParentWriter()->getUseDiskCaching()) {
101 $objWriter = new PHPExcel_Shared_XMLWriter(PHPExcel_Shared_XMLWriter::STORAGE_DISK, $this->getParentWriter()->getDiskCachingDirectory());
102 } else {
103 $objWriter = new PHPExcel_Shared_XMLWriter(PHPExcel_Shared_XMLWriter::STORAGE_MEMORY);
104 }
105
106 // XML header
107 $objWriter->startDocument('1.0','UTF-8','yes');
108
109 // String table
110 $objWriter->startElement('sst');
111 $objWriter->writeAttribute('xmlns', 'http://schemas.openxmlformats.org/spreadsheetml/2006/main');
112 $objWriter->writeAttribute('uniqueCount', count($pStringTable));
113
114 // Loop through string table
115 foreach ($pStringTable as $textElement) {
116 $objWriter->startElement('si');
117
118 if (! $textElement instanceof PHPExcel_RichText) {
119 $textToWrite = PHPExcel_Shared_String::ControlCharacterPHP2OOXML( $textElement );
120 $objWriter->startElement('t');
121 if ($textToWrite !== trim($textToWrite)) {
122 $objWriter->writeAttribute('xml:space', 'preserve');
123 }
124 $objWriter->writeRawData($textToWrite);
125 $objWriter->endElement();
126 } else if ($textElement instanceof PHPExcel_RichText) {
127 $this->writeRichText($objWriter, $textElement);
128 }
129
130 $objWriter->endElement();
131 }
132
133 $objWriter->endElement();
134
135 // Return
136 return $objWriter->getData();
137 } else {
138 throw new PHPExcel_Writer_Exception("Invalid string table array passed.");
139 }
140 }
141
142 /**
143 * Write Rich Text
144 *
145 * @param PHPExcel_Shared_XMLWriter $objWriter XML Writer
146 * @param PHPExcel_RichText $pRichText Rich text
147 * @param string $prefix Optional Namespace prefix
148 * @throws PHPExcel_Writer_Exception
149 */
150 public function writeRichText(PHPExcel_Shared_XMLWriter $objWriter = null, PHPExcel_RichText $pRichText = null, $prefix=NULL)
151 {
152 if ($prefix !== NULL)
153 $prefix .= ':';
154 // Loop through rich text elements
155 $elements = $pRichText->getRichTextElements();
156 foreach ($elements as $element) {
157 // r
158 $objWriter->startElement($prefix.'r');
159
160 // rPr
161 if ($element instanceof PHPExcel_RichText_Run) {
162 // rPr
163 $objWriter->startElement($prefix.'rPr');
164
165 // rFont
166 $objWriter->startElement($prefix.'rFont');
167 $objWriter->writeAttribute('val', $element->getFont()->getName());
168 $objWriter->endElement();
169
170 // Bold
171 $objWriter->startElement($prefix.'b');
172 $objWriter->writeAttribute('val', ($element->getFont()->getBold() ? 'true' : 'false'));
173 $objWriter->endElement();
174
175 // Italic
176 $objWriter->startElement($prefix.'i');
177 $objWriter->writeAttribute('val', ($element->getFont()->getItalic() ? 'true' : 'false'));
178 $objWriter->endElement();
179
180 // Superscript / subscript
181 if ($element->getFont()->getSuperScript() || $element->getFont()->getSubScript()) {
182 $objWriter->startElement($prefix.'vertAlign');
183 if ($element->getFont()->getSuperScript()) {
184 $objWriter->writeAttribute('val', 'superscript');
185 } else if ($element->getFont()->getSubScript()) {
186 $objWriter->writeAttribute('val', 'subscript');
187 }
188 $objWriter->endElement();
189 }
190
191 // Strikethrough
192 $objWriter->startElement($prefix.'strike');
193 $objWriter->writeAttribute('val', ($element->getFont()->getStrikethrough() ? 'true' : 'false'));
194 $objWriter->endElement();
195
196 // Color
197 $objWriter->startElement($prefix.'color');
198 $objWriter->writeAttribute('rgb', $element->getFont()->getColor()->getARGB());
199 $objWriter->endElement();
200
201 // Size
202 $objWriter->startElement($prefix.'sz');
203 $objWriter->writeAttribute('val', $element->getFont()->getSize());
204 $objWriter->endElement();
205
206 // Underline
207 $objWriter->startElement($prefix.'u');
208 $objWriter->writeAttribute('val', $element->getFont()->getUnderline());
209 $objWriter->endElement();
210
211 $objWriter->endElement();
212 }
213
214 // t
215 $objWriter->startElement($prefix.'t');
216 $objWriter->writeAttribute('xml:space', 'preserve');
217 $objWriter->writeRawData(PHPExcel_Shared_String::ControlCharacterPHP2OOXML( $element->getText() ));
218 $objWriter->endElement();
219
220 $objWriter->endElement();
221 }
222 }
223
224 /**
225 * Write Rich Text
226 *
227 * @param PHPExcel_Shared_XMLWriter $objWriter XML Writer
228 * @param string|PHPExcel_RichText $pRichText text string or Rich text
229 * @param string $prefix Optional Namespace prefix
230 * @throws PHPExcel_Writer_Exception
231 */
232 public function writeRichTextForCharts(PHPExcel_Shared_XMLWriter $objWriter = null, $pRichText = null, $prefix=NULL)
233 {
234 if (!$pRichText instanceof PHPExcel_RichText) {
235 $textRun = $pRichText;
236 $pRichText = new PHPExcel_RichText();
237 $pRichText->createTextRun($textRun);
238 }
239
240 if ($prefix !== NULL)
241 $prefix .= ':';
242 // Loop through rich text elements
243 $elements = $pRichText->getRichTextElements();
244 foreach ($elements as $element) {
245 // r
246 $objWriter->startElement($prefix.'r');
247
248 // rPr
249 $objWriter->startElement($prefix.'rPr');
250
251 // Bold
252 $objWriter->writeAttribute('b', ($element->getFont()->getBold() ? 1 : 0));
253 // Italic
254 $objWriter->writeAttribute('i', ($element->getFont()->getItalic() ? 1 : 0));
255 // Underline
256 $underlineType = $element->getFont()->getUnderline();
257 switch($underlineType) {
258 case 'single' :
259 $underlineType = 'sng';
260 break;
261 case 'double' :
262 $underlineType = 'dbl';
263 break;
264 }
265 $objWriter->writeAttribute('u', $underlineType);
266 // Strikethrough
267 $objWriter->writeAttribute('strike', ($element->getFont()->getStrikethrough() ? 'sngStrike' : 'noStrike'));
268
269 // rFont
270 $objWriter->startElement($prefix.'latin');
271 $objWriter->writeAttribute('typeface', $element->getFont()->getName());
272 $objWriter->endElement();
273
274 // Superscript / subscript
275 // if ($element->getFont()->getSuperScript() || $element->getFont()->getSubScript()) {
276 // $objWriter->startElement($prefix.'vertAlign');
277 // if ($element->getFont()->getSuperScript()) {
278 // $objWriter->writeAttribute('val', 'superscript');
279 // } else if ($element->getFont()->getSubScript()) {
280 // $objWriter->writeAttribute('val', 'subscript');
281 // }
282 // $objWriter->endElement();
283 // }
284 //
285 $objWriter->endElement();
286
287 // t
288 $objWriter->startElement($prefix.'t');
289 // $objWriter->writeAttribute('xml:space', 'preserve'); // Excel2010 accepts, Excel2007 complains
290 $objWriter->writeRawData(PHPExcel_Shared_String::ControlCharacterPHP2OOXML( $element->getText() ));
291 $objWriter->endElement();
292
293 $objWriter->endElement();
294 }
295 }
296
297 /**
298 * Flip string table (for index searching)
299 *
300 * @param array $stringTable Stringtable
301 * @return array
302 */
303 public function flipStringTable($stringTable = array()) {
304 // Return value
305 $returnValue = array();
306
307 // Loop through stringtable and add flipped items to $returnValue
308 foreach ($stringTable as $key => $value) {
309 if (! $value instanceof PHPExcel_RichText) {
310 $returnValue[$value] = $key;
311 } else if ($value instanceof PHPExcel_RichText) {
312 $returnValue[$value->getHashCode()] = $key;
313 }
314 }
315
316 // Return
317 return $returnValue;
318 }
319 }
320