Subversion Repositories eFlore/Applications.cel

Rev

Go to most recent revision | Details | Last modification | View Log | RSS feed

Rev Author Line No. Line
2388 jpm 1
<?php
2
/**
3
 * PHPExcel
4
 *
5
 * Copyright (c) 2006 - 2013 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 - 2013 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 - 2013 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
}