1: <?php
2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26:
27:
28:
29: 30: 31: 32: 33: 34: 35:
36: class PHPExcel_Writer_Excel2007_StringTable extends PHPExcel_Writer_Excel2007_WriterPart
37: {
38: 39: 40: 41: 42: 43: 44: 45:
46: public function createStringTable($pSheet = null, $pExistingTable = null)
47: {
48: if ($pSheet !== NULL) {
49:
50: $aStringTable = array();
51: $cellCollection = null;
52: $aFlippedStringTable = null;
53:
54:
55: if (($pExistingTable !== NULL) && is_array($pExistingTable)) {
56: $aStringTable = $pExistingTable;
57: }
58:
59:
60: $aFlippedStringTable = $this->flipStringTable($aStringTable);
61:
62:
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:
82: return $aStringTable;
83: } else {
84: throw new PHPExcel_Writer_Exception("Invalid PHPExcel_Worksheet object passed.");
85: }
86: }
87:
88: 89: 90: 91: 92: 93: 94:
95: public function writeStringTable($pStringTable = null)
96: {
97: if ($pStringTable !== NULL) {
98:
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:
107: $objWriter->startDocument('1.0','UTF-8','yes');
108:
109:
110: $objWriter->startElement('sst');
111: $objWriter->writeAttribute('xmlns', 'http://schemas.openxmlformats.org/spreadsheetml/2006/main');
112: $objWriter->writeAttribute('uniqueCount', count($pStringTable));
113:
114:
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:
136: return $objWriter->getData();
137: } else {
138: throw new PHPExcel_Writer_Exception("Invalid string table array passed.");
139: }
140: }
141:
142: 143: 144: 145: 146: 147: 148: 149:
150: public function writeRichText(PHPExcel_Shared_XMLWriter $objWriter = null, PHPExcel_RichText $pRichText = null, $prefix=NULL)
151: {
152: if ($prefix !== NULL)
153: $prefix .= ':';
154:
155: $elements = $pRichText->getRichTextElements();
156: foreach ($elements as $element) {
157:
158: $objWriter->startElement($prefix.'r');
159:
160:
161: if ($element instanceof PHPExcel_RichText_Run) {
162:
163: $objWriter->startElement($prefix.'rPr');
164:
165:
166: $objWriter->startElement($prefix.'rFont');
167: $objWriter->writeAttribute('val', $element->getFont()->getName());
168: $objWriter->endElement();
169:
170:
171: $objWriter->startElement($prefix.'b');
172: $objWriter->writeAttribute('val', ($element->getFont()->getBold() ? 'true' : 'false'));
173: $objWriter->endElement();
174:
175:
176: $objWriter->startElement($prefix.'i');
177: $objWriter->writeAttribute('val', ($element->getFont()->getItalic() ? 'true' : 'false'));
178: $objWriter->endElement();
179:
180:
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:
192: $objWriter->startElement($prefix.'strike');
193: $objWriter->writeAttribute('val', ($element->getFont()->getStrikethrough() ? 'true' : 'false'));
194: $objWriter->endElement();
195:
196:
197: $objWriter->startElement($prefix.'color');
198: $objWriter->writeAttribute('rgb', $element->getFont()->getColor()->getARGB());
199: $objWriter->endElement();
200:
201:
202: $objWriter->startElement($prefix.'sz');
203: $objWriter->writeAttribute('val', $element->getFont()->getSize());
204: $objWriter->endElement();
205:
206:
207: $objWriter->startElement($prefix.'u');
208: $objWriter->writeAttribute('val', $element->getFont()->getUnderline());
209: $objWriter->endElement();
210:
211: $objWriter->endElement();
212: }
213:
214:
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: 226: 227: 228: 229: 230: 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:
243: $elements = $pRichText->getRichTextElements();
244: foreach ($elements as $element) {
245:
246: $objWriter->startElement($prefix.'r');
247:
248:
249: $objWriter->startElement($prefix.'rPr');
250:
251:
252: $objWriter->writeAttribute('b', ($element->getFont()->getBold() ? 1 : 0));
253:
254: $objWriter->writeAttribute('i', ($element->getFont()->getItalic() ? 1 : 0));
255:
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:
267: $objWriter->writeAttribute('strike', ($element->getFont()->getStrikethrough() ? 'sngStrike' : 'noStrike'));
268:
269:
270: $objWriter->startElement($prefix.'latin');
271: $objWriter->writeAttribute('typeface', $element->getFont()->getName());
272: $objWriter->endElement();
273:
274:
275:
276:
277:
278:
279:
280:
281:
282:
283:
284:
285: $objWriter->endElement();
286:
287:
288: $objWriter->startElement($prefix.'t');
289:
290: $objWriter->writeRawData(PHPExcel_Shared_String::ControlCharacterPHP2OOXML( $element->getText() ));
291: $objWriter->endElement();
292:
293: $objWriter->endElement();
294: }
295: }
296:
297: 298: 299: 300: 301: 302:
303: public function flipStringTable($stringTable = array()) {
304:
305: $returnValue = array();
306:
307:
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:
317: return $returnValue;
318: }
319: }
320: