[ Index ] |
PHP Cross Reference of Unnamed Project |
[Summary view] [Print] [Text view]
1 <?php 2 3 /** 4 * PHPExcel_Writer_Excel2007_StringTable 5 * 6 * Copyright (c) 2006 - 2015 PHPExcel 7 * 8 * This library is free software; you can redistribute it and/or 9 * modify it under the terms of the GNU Lesser General Public 10 * License as published by the Free Software Foundation; either 11 * version 2.1 of the License, or (at your option) any later version. 12 * 13 * This library is distributed in the hope that it will be useful, 14 * but WITHOUT ANY WARRANTY; without even the implied warranty of 15 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 16 * Lesser General Public License for more details. 17 * 18 * You should have received a copy of the GNU Lesser General Public 19 * License along with this library; if not, write to the Free Software 20 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA 21 * 22 * @category PHPExcel 23 * @package PHPExcel_Writer_Excel2007 24 * @copyright Copyright (c) 2006 - 2015 PHPExcel (http://www.codeplex.com/PHPExcel) 25 * @license http://www.gnu.org/licenses/old-licenses/lgpl-2.1.txt LGPL 26 * @version ##VERSION##, ##DATE## 27 */ 28 class PHPExcel_Writer_Excel2007_StringTable extends PHPExcel_Writer_Excel2007_WriterPart 29 { 30 /** 31 * Create worksheet stringtable 32 * 33 * @param PHPExcel_Worksheet $pSheet Worksheet 34 * @param string[] $pExistingTable Existing table to eventually merge with 35 * @return string[] String table for worksheet 36 * @throws PHPExcel_Writer_Exception 37 */ 38 public function createStringTable($pSheet = null, $pExistingTable = null) 39 { 40 if ($pSheet !== null) { 41 // Create string lookup table 42 $aStringTable = array(); 43 $cellCollection = null; 44 $aFlippedStringTable = null; // For faster lookup 45 46 // Is an existing table given? 47 if (($pExistingTable !== null) && is_array($pExistingTable)) { 48 $aStringTable = $pExistingTable; 49 } 50 51 // Fill index array 52 $aFlippedStringTable = $this->flipStringTable($aStringTable); 53 54 // Loop through cells 55 foreach ($pSheet->getCellCollection() as $cellID) { 56 $cell = $pSheet->getCell($cellID); 57 $cellValue = $cell->getValue(); 58 if (!is_object($cellValue) && 59 ($cellValue !== null) && 60 $cellValue !== '' && 61 !isset($aFlippedStringTable[$cellValue]) && 62 ($cell->getDataType() == PHPExcel_Cell_DataType::TYPE_STRING || $cell->getDataType() == PHPExcel_Cell_DataType::TYPE_STRING2 || $cell->getDataType() == PHPExcel_Cell_DataType::TYPE_NULL)) { 63 $aStringTable[] = $cellValue; 64 $aFlippedStringTable[$cellValue] = true; 65 } elseif ($cellValue instanceof PHPExcel_RichText && 66 ($cellValue !== null) && 67 !isset($aFlippedStringTable[$cellValue->getHashCode()])) { 68 $aStringTable[] = $cellValue; 69 $aFlippedStringTable[$cellValue->getHashCode()] = true; 70 } 71 } 72 73 return $aStringTable; 74 } else { 75 throw new PHPExcel_Writer_Exception("Invalid PHPExcel_Worksheet object passed."); 76 } 77 } 78 79 /** 80 * Write string table to XML format 81 * 82 * @param string[] $pStringTable 83 * @return string XML Output 84 * @throws PHPExcel_Writer_Exception 85 */ 86 public function writeStringTable($pStringTable = null) 87 { 88 if ($pStringTable !== null) { 89 // Create XML writer 90 $objWriter = null; 91 if ($this->getParentWriter()->getUseDiskCaching()) { 92 $objWriter = new PHPExcel_Shared_XMLWriter(PHPExcel_Shared_XMLWriter::STORAGE_DISK, $this->getParentWriter()->getDiskCachingDirectory()); 93 } else { 94 $objWriter = new PHPExcel_Shared_XMLWriter(PHPExcel_Shared_XMLWriter::STORAGE_MEMORY); 95 } 96 97 // XML header 98 $objWriter->startDocument('1.0', 'UTF-8', 'yes'); 99 100 // String table 101 $objWriter->startElement('sst'); 102 $objWriter->writeAttribute('xmlns', 'http://schemas.openxmlformats.org/spreadsheetml/2006/main'); 103 $objWriter->writeAttribute('uniqueCount', count($pStringTable)); 104 105 // Loop through string table 106 foreach ($pStringTable as $textElement) { 107 $objWriter->startElement('si'); 108 109 if (! $textElement instanceof PHPExcel_RichText) { 110 $textToWrite = PHPExcel_Shared_String::ControlCharacterPHP2OOXML($textElement); 111 $objWriter->startElement('t'); 112 if ($textToWrite !== trim($textToWrite)) { 113 $objWriter->writeAttribute('xml:space', 'preserve'); 114 } 115 $objWriter->writeRawData($textToWrite); 116 $objWriter->endElement(); 117 } elseif ($textElement instanceof PHPExcel_RichText) { 118 $this->writeRichText($objWriter, $textElement); 119 } 120 121 $objWriter->endElement(); 122 } 123 124 $objWriter->endElement(); 125 126 return $objWriter->getData(); 127 } else { 128 throw new PHPExcel_Writer_Exception("Invalid string table array passed."); 129 } 130 } 131 132 /** 133 * Write Rich Text 134 * 135 * @param PHPExcel_Shared_XMLWriter $objWriter XML Writer 136 * @param PHPExcel_RichText $pRichText Rich text 137 * @param string $prefix Optional Namespace prefix 138 * @throws PHPExcel_Writer_Exception 139 */ 140 public function writeRichText(PHPExcel_Shared_XMLWriter $objWriter = null, PHPExcel_RichText $pRichText = null, $prefix = null) 141 { 142 if ($prefix !== null) { 143 $prefix .= ':'; 144 } 145 146 // Loop through rich text elements 147 $elements = $pRichText->getRichTextElements(); 148 foreach ($elements as $element) { 149 // r 150 $objWriter->startElement($prefix.'r'); 151 152 // rPr 153 if ($element instanceof PHPExcel_RichText_Run) { 154 // rPr 155 $objWriter->startElement($prefix.'rPr'); 156 157 // rFont 158 $objWriter->startElement($prefix.'rFont'); 159 $objWriter->writeAttribute('val', $element->getFont()->getName()); 160 $objWriter->endElement(); 161 162 // Bold 163 $objWriter->startElement($prefix.'b'); 164 $objWriter->writeAttribute('val', ($element->getFont()->getBold() ? 'true' : 'false')); 165 $objWriter->endElement(); 166 167 // Italic 168 $objWriter->startElement($prefix.'i'); 169 $objWriter->writeAttribute('val', ($element->getFont()->getItalic() ? 'true' : 'false')); 170 $objWriter->endElement(); 171 172 // Superscript / subscript 173 if ($element->getFont()->getSuperScript() || $element->getFont()->getSubScript()) { 174 $objWriter->startElement($prefix.'vertAlign'); 175 if ($element->getFont()->getSuperScript()) { 176 $objWriter->writeAttribute('val', 'superscript'); 177 } elseif ($element->getFont()->getSubScript()) { 178 $objWriter->writeAttribute('val', 'subscript'); 179 } 180 $objWriter->endElement(); 181 } 182 183 // Strikethrough 184 $objWriter->startElement($prefix.'strike'); 185 $objWriter->writeAttribute('val', ($element->getFont()->getStrikethrough() ? 'true' : 'false')); 186 $objWriter->endElement(); 187 188 // Color 189 $objWriter->startElement($prefix.'color'); 190 $objWriter->writeAttribute('rgb', $element->getFont()->getColor()->getARGB()); 191 $objWriter->endElement(); 192 193 // Size 194 $objWriter->startElement($prefix.'sz'); 195 $objWriter->writeAttribute('val', $element->getFont()->getSize()); 196 $objWriter->endElement(); 197 198 // Underline 199 $objWriter->startElement($prefix.'u'); 200 $objWriter->writeAttribute('val', $element->getFont()->getUnderline()); 201 $objWriter->endElement(); 202 203 $objWriter->endElement(); 204 } 205 206 // t 207 $objWriter->startElement($prefix.'t'); 208 $objWriter->writeAttribute('xml:space', 'preserve'); 209 $objWriter->writeRawData(PHPExcel_Shared_String::ControlCharacterPHP2OOXML($element->getText())); 210 $objWriter->endElement(); 211 212 $objWriter->endElement(); 213 } 214 } 215 216 /** 217 * Write Rich Text 218 * 219 * @param PHPExcel_Shared_XMLWriter $objWriter XML Writer 220 * @param string|PHPExcel_RichText $pRichText text string or Rich text 221 * @param string $prefix Optional Namespace prefix 222 * @throws PHPExcel_Writer_Exception 223 */ 224 public function writeRichTextForCharts(PHPExcel_Shared_XMLWriter $objWriter = null, $pRichText = null, $prefix = null) 225 { 226 if (!$pRichText instanceof PHPExcel_RichText) { 227 $textRun = $pRichText; 228 $pRichText = new PHPExcel_RichText(); 229 $pRichText->createTextRun($textRun); 230 } 231 232 if ($prefix !== null) { 233 $prefix .= ':'; 234 } 235 236 // Loop through rich text elements 237 $elements = $pRichText->getRichTextElements(); 238 foreach ($elements as $element) { 239 // r 240 $objWriter->startElement($prefix.'r'); 241 242 // rPr 243 $objWriter->startElement($prefix.'rPr'); 244 245 // Bold 246 $objWriter->writeAttribute('b', ($element->getFont()->getBold() ? 1 : 0)); 247 // Italic 248 $objWriter->writeAttribute('i', ($element->getFont()->getItalic() ? 1 : 0)); 249 // Underline 250 $underlineType = $element->getFont()->getUnderline(); 251 switch ($underlineType) { 252 case 'single': 253 $underlineType = 'sng'; 254 break; 255 case 'double': 256 $underlineType = 'dbl'; 257 break; 258 } 259 $objWriter->writeAttribute('u', $underlineType); 260 // Strikethrough 261 $objWriter->writeAttribute('strike', ($element->getFont()->getStrikethrough() ? 'sngStrike' : 'noStrike')); 262 263 // rFont 264 $objWriter->startElement($prefix.'latin'); 265 $objWriter->writeAttribute('typeface', $element->getFont()->getName()); 266 $objWriter->endElement(); 267 268 // Superscript / subscript 269 // if ($element->getFont()->getSuperScript() || $element->getFont()->getSubScript()) { 270 // $objWriter->startElement($prefix.'vertAlign'); 271 // if ($element->getFont()->getSuperScript()) { 272 // $objWriter->writeAttribute('val', 'superscript'); 273 // } elseif ($element->getFont()->getSubScript()) { 274 // $objWriter->writeAttribute('val', 'subscript'); 275 // } 276 // $objWriter->endElement(); 277 // } 278 // 279 $objWriter->endElement(); 280 281 // t 282 $objWriter->startElement($prefix.'t'); 283 // $objWriter->writeAttribute('xml:space', 'preserve'); // Excel2010 accepts, Excel2007 complains 284 $objWriter->writeRawData(PHPExcel_Shared_String::ControlCharacterPHP2OOXML($element->getText())); 285 $objWriter->endElement(); 286 287 $objWriter->endElement(); 288 } 289 } 290 291 /** 292 * Flip string table (for index searching) 293 * 294 * @param array $stringTable Stringtable 295 * @return array 296 */ 297 public function flipStringTable($stringTable = array()) 298 { 299 // Return value 300 $returnValue = array(); 301 302 // Loop through stringtable and add flipped items to $returnValue 303 foreach ($stringTable as $key => $value) { 304 if (! $value instanceof PHPExcel_RichText) { 305 $returnValue[$value] = $key; 306 } elseif ($value instanceof PHPExcel_RichText) { 307 $returnValue[$value->getHashCode()] = $key; 308 } 309 } 310 311 return $returnValue; 312 } 313 }
title
Description
Body
title
Description
Body
title
Description
Body
title
Body
Generated: Thu Aug 11 10:00:09 2016 | Cross-referenced by PHPXref 0.7.1 |