ILIAS  release_5-2 Revision v5.2.25-18-g3f80b82851
OOCalc.php
Go to the documentation of this file.
1 <?php
30 if (!defined('PHPEXCEL_ROOT')) {
34  define('PHPEXCEL_ROOT', dirname(__FILE__) . '/../../');
35  require(PHPEXCEL_ROOT . 'PHPExcel/Autoloader.php');
36 }
37 
46 {
52  private $_styles = array();
53 
54 
58  public function __construct() {
59  $this->_readFilter = new PHPExcel_Reader_DefaultReadFilter();
60  }
61 
62 
70  public function canRead($pFilename)
71  {
72  // Check if file exists
73  if (!file_exists($pFilename)) {
74  throw new PHPExcel_Reader_Exception("Could not open " . $pFilename . " for reading! File does not exist.");
75  }
76 
77  $zipClass = PHPExcel_Settings::getZipClass();
78 
79  // Check if zip class exists
80 // if (!class_exists($zipClass, FALSE)) {
81 // throw new PHPExcel_Reader_Exception($zipClass . " library is not enabled");
82 // }
83 
84  $mimeType = 'UNKNOWN';
85  // Load file
86  $zip = new $zipClass;
87  if ($zip->open($pFilename) === true) {
88  // check if it is an OOXML archive
89  $stat = $zip->statName('mimetype');
90  if ($stat && ($stat['size'] <= 255)) {
91  $mimeType = $zip->getFromName($stat['name']);
92  } elseif($stat = $zip->statName('META-INF/manifest.xml')) {
93  $xml = simplexml_load_string($this->securityScan($zip->getFromName('META-INF/manifest.xml')), 'SimpleXMLElement', PHPExcel_Settings::getLibXmlLoaderOptions());
94  $namespacesContent = $xml->getNamespaces(true);
95  if (isset($namespacesContent['manifest'])) {
96  $manifest = $xml->children($namespacesContent['manifest']);
97  foreach($manifest as $manifestDataSet) {
98  $manifestAttributes = $manifestDataSet->attributes($namespacesContent['manifest']);
99  if ($manifestAttributes->{'full-path'} == '/') {
100  $mimeType = (string) $manifestAttributes->{'media-type'};
101  break;
102  }
103  }
104  }
105  }
106 
107  $zip->close();
108 
109  return ($mimeType === 'application/vnd.oasis.opendocument.spreadsheet');
110  }
111 
112  return FALSE;
113  }
114 
115 
122  public function listWorksheetNames($pFilename)
123  {
124  // Check if file exists
125  if (!file_exists($pFilename)) {
126  throw new PHPExcel_Reader_Exception("Could not open " . $pFilename . " for reading! File does not exist.");
127  }
128 
129  $zipClass = PHPExcel_Settings::getZipClass();
130 
131  $zip = new $zipClass;
132  if (!$zip->open($pFilename)) {
133  throw new PHPExcel_Reader_Exception("Could not open " . $pFilename . " for reading! Error opening file.");
134  }
135 
136  $worksheetNames = array();
137 
138  $xml = new XMLReader();
139  $res = $xml->xml($this->securityScanFile('zip://'.realpath($pFilename).'#content.xml'), null, PHPExcel_Settings::getLibXmlLoaderOptions());
140  $xml->setParserProperty(2,true);
141 
142  // Step into the first level of content of the XML
143  $xml->read();
144  while ($xml->read()) {
145  // Quickly jump through to the office:body node
146  while ($xml->name !== 'office:body') {
147  if ($xml->isEmptyElement)
148  $xml->read();
149  else
150  $xml->next();
151  }
152  // Now read each node until we find our first table:table node
153  while ($xml->read()) {
154  if ($xml->name == 'table:table' && $xml->nodeType == XMLReader::ELEMENT) {
155  // Loop through each table:table node reading the table:name attribute for each worksheet name
156  do {
157  $worksheetNames[] = $xml->getAttribute('table:name');
158  $xml->next();
159  } while ($xml->name == 'table:table' && $xml->nodeType == XMLReader::ELEMENT);
160  }
161  }
162  }
163 
164  return $worksheetNames;
165  }
166 
167 
174  public function listWorksheetInfo($pFilename)
175  {
176  // Check if file exists
177  if (!file_exists($pFilename)) {
178  throw new PHPExcel_Reader_Exception("Could not open " . $pFilename . " for reading! File does not exist.");
179  }
180 
181  $worksheetInfo = array();
182 
183  $zipClass = PHPExcel_Settings::getZipClass();
184 
185  $zip = new $zipClass;
186  if (!$zip->open($pFilename)) {
187  throw new PHPExcel_Reader_Exception("Could not open " . $pFilename . " for reading! Error opening file.");
188  }
189 
190  $xml = new XMLReader();
191  $res = $xml->xml($this->securityScanFile('zip://'.realpath($pFilename).'#content.xml'), null, PHPExcel_Settings::getLibXmlLoaderOptions());
192  $xml->setParserProperty(2,true);
193 
194  // Step into the first level of content of the XML
195  $xml->read();
196  while ($xml->read()) {
197  // Quickly jump through to the office:body node
198  while ($xml->name !== 'office:body') {
199  if ($xml->isEmptyElement)
200  $xml->read();
201  else
202  $xml->next();
203  }
204  // Now read each node until we find our first table:table node
205  while ($xml->read()) {
206  if ($xml->name == 'table:table' && $xml->nodeType == XMLReader::ELEMENT) {
207  $worksheetNames[] = $xml->getAttribute('table:name');
208 
209  $tmpInfo = array(
210  'worksheetName' => $xml->getAttribute('table:name'),
211  'lastColumnLetter' => 'A',
212  'lastColumnIndex' => 0,
213  'totalRows' => 0,
214  'totalColumns' => 0,
215  );
216 
217  // Loop through each child node of the table:table element reading
218  $currCells = 0;
219  do {
220  $xml->read();
221  if ($xml->name == 'table:table-row' && $xml->nodeType == XMLReader::ELEMENT) {
222  $rowspan = $xml->getAttribute('table:number-rows-repeated');
223  $rowspan = empty($rowspan) ? 1 : $rowspan;
224  $tmpInfo['totalRows'] += $rowspan;
225  $tmpInfo['totalColumns'] = max($tmpInfo['totalColumns'],$currCells);
226  $currCells = 0;
227  // Step into the row
228  $xml->read();
229  do {
230  if ($xml->name == 'table:table-cell' && $xml->nodeType == XMLReader::ELEMENT) {
231  if (!$xml->isEmptyElement) {
232  $currCells++;
233  $xml->next();
234  } else {
235  $xml->read();
236  }
237  } elseif ($xml->name == 'table:covered-table-cell' && $xml->nodeType == XMLReader::ELEMENT) {
238  $mergeSize = $xml->getAttribute('table:number-columns-repeated');
239  $currCells += $mergeSize;
240  $xml->read();
241  }
242  } while ($xml->name != 'table:table-row');
243  }
244  } while ($xml->name != 'table:table');
245 
246  $tmpInfo['totalColumns'] = max($tmpInfo['totalColumns'],$currCells);
247  $tmpInfo['lastColumnIndex'] = $tmpInfo['totalColumns'] - 1;
248  $tmpInfo['lastColumnLetter'] = PHPExcel_Cell::stringFromColumnIndex($tmpInfo['lastColumnIndex']);
249  $worksheetInfo[] = $tmpInfo;
250  }
251  }
252 
253 // foreach($workbookData->table as $worksheetDataSet) {
254 // $worksheetData = $worksheetDataSet->children($namespacesContent['table']);
255 // $worksheetDataAttributes = $worksheetDataSet->attributes($namespacesContent['table']);
256 //
257 // $rowIndex = 0;
258 // foreach ($worksheetData as $key => $rowData) {
259 // switch ($key) {
260 // case 'table-row' :
261 // $rowDataTableAttributes = $rowData->attributes($namespacesContent['table']);
262 // $rowRepeats = (isset($rowDataTableAttributes['number-rows-repeated'])) ?
263 // $rowDataTableAttributes['number-rows-repeated'] : 1;
264 // $columnIndex = 0;
265 //
266 // foreach ($rowData as $key => $cellData) {
267 // $cellDataTableAttributes = $cellData->attributes($namespacesContent['table']);
268 // $colRepeats = (isset($cellDataTableAttributes['number-columns-repeated'])) ?
269 // $cellDataTableAttributes['number-columns-repeated'] : 1;
270 // $cellDataOfficeAttributes = $cellData->attributes($namespacesContent['office']);
271 // if (isset($cellDataOfficeAttributes['value-type'])) {
272 // $tmpInfo['lastColumnIndex'] = max($tmpInfo['lastColumnIndex'], $columnIndex + $colRepeats - 1);
273 // $tmpInfo['totalRows'] = max($tmpInfo['totalRows'], $rowIndex + $rowRepeats);
274 // }
275 // $columnIndex += $colRepeats;
276 // }
277 // $rowIndex += $rowRepeats;
278 // break;
279 // }
280 // }
281 //
282 // $tmpInfo['lastColumnLetter'] = PHPExcel_Cell::stringFromColumnIndex($tmpInfo['lastColumnIndex']);
283 // $tmpInfo['totalColumns'] = $tmpInfo['lastColumnIndex'] + 1;
284 //
285 // }
286 // }
287  }
288 
289  return $worksheetInfo;
290  }
291 
292 
300  public function load($pFilename)
301  {
302  // Create new PHPExcel
303  $objPHPExcel = new PHPExcel();
304 
305  // Load into this instance
306  return $this->loadIntoExisting($pFilename, $objPHPExcel);
307  }
308 
309 
310  private static function identifyFixedStyleValue($styleList,&$styleAttributeValue) {
311  $styleAttributeValue = strtolower($styleAttributeValue);
312  foreach($styleList as $style) {
313  if ($styleAttributeValue == strtolower($style)) {
314  $styleAttributeValue = $style;
315  return true;
316  }
317  }
318  return false;
319  }
320 
321 
330  public function loadIntoExisting($pFilename, PHPExcel $objPHPExcel)
331  {
332  // Check if file exists
333  if (!file_exists($pFilename)) {
334  throw new PHPExcel_Reader_Exception("Could not open " . $pFilename . " for reading! File does not exist.");
335  }
336 
337  $timezoneObj = new DateTimeZone('Europe/London');
338  $GMT = new DateTimeZone('UTC');
339 
340  $zipClass = PHPExcel_Settings::getZipClass();
341 
342  $zip = new $zipClass;
343  if (!$zip->open($pFilename)) {
344  throw new PHPExcel_Reader_Exception("Could not open " . $pFilename . " for reading! Error opening file.");
345  }
346 
347 // echo '<h1>Meta Information</h1>';
348  $xml = simplexml_load_string($this->securityScan($zip->getFromName("meta.xml")), 'SimpleXMLElement', PHPExcel_Settings::getLibXmlLoaderOptions());
349  $namespacesMeta = $xml->getNamespaces(true);
350 // echo '<pre>';
351 // print_r($namespacesMeta);
352 // echo '</pre><hr />';
353 
354  $docProps = $objPHPExcel->getProperties();
355  $officeProperty = $xml->children($namespacesMeta['office']);
356  foreach($officeProperty as $officePropertyData) {
357  $officePropertyDC = array();
358  if (isset($namespacesMeta['dc'])) {
359  $officePropertyDC = $officePropertyData->children($namespacesMeta['dc']);
360  }
361  foreach($officePropertyDC as $propertyName => $propertyValue) {
362  $propertyValue = (string) $propertyValue;
363  switch ($propertyName) {
364  case 'title' :
365  $docProps->setTitle($propertyValue);
366  break;
367  case 'subject' :
368  $docProps->setSubject($propertyValue);
369  break;
370  case 'creator' :
371  $docProps->setCreator($propertyValue);
372  $docProps->setLastModifiedBy($propertyValue);
373  break;
374  case 'date' :
375  $creationDate = strtotime($propertyValue);
376  $docProps->setCreated($creationDate);
377  $docProps->setModified($creationDate);
378  break;
379  case 'description' :
380  $docProps->setDescription($propertyValue);
381  break;
382  }
383  }
384  $officePropertyMeta = array();
385  if (isset($namespacesMeta['dc'])) {
386  $officePropertyMeta = $officePropertyData->children($namespacesMeta['meta']);
387  }
388  foreach($officePropertyMeta as $propertyName => $propertyValue) {
389  $propertyValueAttributes = $propertyValue->attributes($namespacesMeta['meta']);
390  $propertyValue = (string) $propertyValue;
391  switch ($propertyName) {
392  case 'initial-creator' :
393  $docProps->setCreator($propertyValue);
394  break;
395  case 'keyword' :
396  $docProps->setKeywords($propertyValue);
397  break;
398  case 'creation-date' :
399  $creationDate = strtotime($propertyValue);
400  $docProps->setCreated($creationDate);
401  break;
402  case 'user-defined' :
404  foreach ($propertyValueAttributes as $key => $value) {
405  if ($key == 'name') {
406  $propertyValueName = (string) $value;
407  } elseif($key == 'value-type') {
408  switch ($value) {
409  case 'date' :
410  $propertyValue = PHPExcel_DocumentProperties::convertProperty($propertyValue,'date');
412  break;
413  case 'boolean' :
414  $propertyValue = PHPExcel_DocumentProperties::convertProperty($propertyValue,'bool');
416  break;
417  case 'float' :
418  $propertyValue = PHPExcel_DocumentProperties::convertProperty($propertyValue,'r4');
420  break;
421  default :
423  }
424  }
425  }
426  $docProps->setCustomProperty($propertyValueName,$propertyValue,$propertyValueType);
427  break;
428  }
429  }
430  }
431 
432 
433 // echo '<h1>Workbook Content</h1>';
434  $xml = simplexml_load_string($this->securityScan($zip->getFromName("content.xml")), 'SimpleXMLElement', PHPExcel_Settings::getLibXmlLoaderOptions());
435  $namespacesContent = $xml->getNamespaces(true);
436 // echo '<pre>';
437 // print_r($namespacesContent);
438 // echo '</pre><hr />';
439 
440  $workbook = $xml->children($namespacesContent['office']);
441  foreach($workbook->body->spreadsheet as $workbookData) {
442  $workbookData = $workbookData->children($namespacesContent['table']);
443  $worksheetID = 0;
444  foreach($workbookData->table as $worksheetDataSet) {
445  $worksheetData = $worksheetDataSet->children($namespacesContent['table']);
446 // print_r($worksheetData);
447 // echo '<br />';
448  $worksheetDataAttributes = $worksheetDataSet->attributes($namespacesContent['table']);
449 // print_r($worksheetDataAttributes);
450 // echo '<br />';
451  if ((isset($this->_loadSheetsOnly)) && (isset($worksheetDataAttributes['name'])) &&
452  (!in_array($worksheetDataAttributes['name'], $this->_loadSheetsOnly))) {
453  continue;
454  }
455 
456 // echo '<h2>Worksheet '.$worksheetDataAttributes['name'].'</h2>';
457  // Create new Worksheet
458  $objPHPExcel->createSheet();
459  $objPHPExcel->setActiveSheetIndex($worksheetID);
460  if (isset($worksheetDataAttributes['name'])) {
461  $worksheetName = (string) $worksheetDataAttributes['name'];
462  // Use false for $updateFormulaCellReferences to prevent adjustment of worksheet references in
463  // formula cells... during the load, all formulae should be correct, and we're simply
464  // bringing the worksheet name in line with the formula, not the reverse
465  $objPHPExcel->getActiveSheet()->setTitle($worksheetName,false);
466  }
467 
468  $rowID = 1;
469  foreach($worksheetData as $key => $rowData) {
470 // echo '<b>'.$key.'</b><br />';
471  switch ($key) {
472  case 'table-header-rows':
473  foreach ($rowData as $key=>$cellData) {
474  $rowData = $cellData;
475  break;
476  }
477  case 'table-row' :
478  $rowDataTableAttributes = $rowData->attributes($namespacesContent['table']);
479  $rowRepeats = (isset($rowDataTableAttributes['number-rows-repeated'])) ?
480  $rowDataTableAttributes['number-rows-repeated'] : 1;
481  $columnID = 'A';
482  foreach($rowData as $key => $cellData) {
483  if ($this->getReadFilter() !== NULL) {
484  if (!$this->getReadFilter()->readCell($columnID, $rowID, $worksheetName)) {
485  continue;
486  }
487  }
488 
489 // echo '<b>'.$columnID.$rowID.'</b><br />';
490  $cellDataText = (isset($namespacesContent['text'])) ?
491  $cellData->children($namespacesContent['text']) :
492  '';
493  $cellDataOffice = $cellData->children($namespacesContent['office']);
494  $cellDataOfficeAttributes = $cellData->attributes($namespacesContent['office']);
495  $cellDataTableAttributes = $cellData->attributes($namespacesContent['table']);
496 
497 // echo 'Office Attributes: ';
498 // print_r($cellDataOfficeAttributes);
499 // echo '<br />Table Attributes: ';
500 // print_r($cellDataTableAttributes);
501 // echo '<br />Cell Data Text';
502 // print_r($cellDataText);
503 // echo '<br />';
504 //
505  $type = $formatting = $hyperlink = null;
506  $hasCalculatedValue = false;
507  $cellDataFormula = '';
508  if (isset($cellDataTableAttributes['formula'])) {
509  $cellDataFormula = $cellDataTableAttributes['formula'];
510  $hasCalculatedValue = true;
511  }
512 
513  if (isset($cellDataOffice->annotation)) {
514 // echo 'Cell has comment<br />';
515  $annotationText = $cellDataOffice->annotation->children($namespacesContent['text']);
516  $textArray = array();
517  foreach($annotationText as $t) {
518  if (isset($t->span)) {
519  foreach($t->span as $text) {
520  $textArray[] = (string)$text;
521  }
522  } else {
523  $textArray[] = (string) $t;
524  }
525  }
526  $text = implode("\n",$textArray);
527 // echo $text,'<br />';
528  $objPHPExcel->getActiveSheet()->getComment( $columnID.$rowID )
529 // ->setAuthor( $author )
530  ->setText($this->_parseRichText($text) );
531  }
532 
533  if (isset($cellDataText->p)) {
534  // Consolidate if there are multiple p records (maybe with spans as well)
535  $dataArray = array();
536  // Text can have multiple text:p and within those, multiple text:span.
537  // text:p newlines, but text:span does not.
538  // Also, here we assume there is no text data is span fields are specified, since
539  // we have no way of knowing proper positioning anyway.
540  foreach ($cellDataText->p as $pData) {
541  if (isset($pData->span)) {
542  // span sections do not newline, so we just create one large string here
543  $spanSection = "";
544  foreach ($pData->span as $spanData) {
545  $spanSection .= $spanData;
546  }
547  array_push($dataArray, $spanSection);
548  } else {
549  array_push($dataArray, $pData);
550  }
551  }
552  $allCellDataText = implode($dataArray, "\n");
553 
554 // echo 'Value Type is '.$cellDataOfficeAttributes['value-type'].'<br />';
555  switch ($cellDataOfficeAttributes['value-type']) {
556  case 'string' :
558  $dataValue = $allCellDataText;
559  if (isset($dataValue->a)) {
560  $dataValue = $dataValue->a;
561  $cellXLinkAttributes = $dataValue->attributes($namespacesContent['xlink']);
562  $hyperlink = $cellXLinkAttributes['href'];
563  }
564  break;
565  case 'boolean' :
567  $dataValue = ($allCellDataText == 'TRUE') ? True : False;
568  break;
569  case 'percentage' :
571  $dataValue = (float) $cellDataOfficeAttributes['value'];
572  if (floor($dataValue) == $dataValue) {
573  $dataValue = (integer) $dataValue;
574  }
576  break;
577  case 'currency' :
579  $dataValue = (float) $cellDataOfficeAttributes['value'];
580  if (floor($dataValue) == $dataValue) {
581  $dataValue = (integer) $dataValue;
582  }
584  break;
585  case 'float' :
587  $dataValue = (float) $cellDataOfficeAttributes['value'];
588  if (floor($dataValue) == $dataValue) {
589  if ($dataValue == (integer) $dataValue)
590  $dataValue = (integer) $dataValue;
591  else
592  $dataValue = (float) $dataValue;
593  }
594  break;
595  case 'date' :
597  $dateObj = new DateTime($cellDataOfficeAttributes['date-value'], $GMT);
598  $dateObj->setTimeZone($timezoneObj);
599  list($year,$month,$day,$hour,$minute,$second) = explode(' ',$dateObj->format('Y m d H i s'));
600  $dataValue = PHPExcel_Shared_Date::FormattedPHPToExcel($year,$month,$day,$hour,$minute,$second);
601  if ($dataValue != floor($dataValue)) {
603  } else {
605  }
606  break;
607  case 'time' :
609  $dataValue = PHPExcel_Shared_Date::PHPToExcel(strtotime('01-01-1970 '.implode(':',sscanf($cellDataOfficeAttributes['time-value'],'PT%dH%dM%dS'))));
611  break;
612  }
613 // echo 'Data value is '.$dataValue.'<br />';
614 // if ($hyperlink !== NULL) {
615 // echo 'Hyperlink is '.$hyperlink.'<br />';
616 // }
617  } else {
619  $dataValue = NULL;
620  }
621 
622  if ($hasCalculatedValue) {
624 // echo 'Formula: ', $cellDataFormula, PHP_EOL;
625  $cellDataFormula = substr($cellDataFormula,strpos($cellDataFormula,':=')+1);
626  $temp = explode('"',$cellDataFormula);
627  $tKey = false;
628  foreach($temp as &$value) {
629  // Only replace in alternate array entries (i.e. non-quoted blocks)
630  if ($tKey = !$tKey) {
631  $value = preg_replace('/\[([^\.]+)\.([^\.]+):\.([^\.]+)\]/Ui','$1!$2:$3',$value); // Cell range reference in another sheet
632  $value = preg_replace('/\[([^\.]+)\.([^\.]+)\]/Ui','$1!$2',$value); // Cell reference in another sheet
633  $value = preg_replace('/\[\.([^\.]+):\.([^\.]+)\]/Ui','$1:$2',$value); // Cell range reference
634  $value = preg_replace('/\[\.([^\.]+)\]/Ui','$1',$value); // Simple cell reference
635  $value = PHPExcel_Calculation::_translateSeparator(';',',',$value,$inBraces);
636  }
637  }
638  unset($value);
639  // Then rebuild the formula string
640  $cellDataFormula = implode('"',$temp);
641 // echo 'Adjusted Formula: ', $cellDataFormula, PHP_EOL;
642  }
643 
644  $colRepeats = (isset($cellDataTableAttributes['number-columns-repeated'])) ?
645  $cellDataTableAttributes['number-columns-repeated'] : 1;
646  if ($type !== NULL) {
647  for ($i = 0; $i < $colRepeats; ++$i) {
648  if ($i > 0) {
649  ++$columnID;
650  }
651  if ($type !== PHPExcel_Cell_DataType::TYPE_NULL) {
652  for ($rowAdjust = 0; $rowAdjust < $rowRepeats; ++$rowAdjust) {
653  $rID = $rowID + $rowAdjust;
654  $objPHPExcel->getActiveSheet()->getCell($columnID.$rID)->setValueExplicit((($hasCalculatedValue) ? $cellDataFormula : $dataValue),$type);
655  if ($hasCalculatedValue) {
656 // echo 'Forumla result is '.$dataValue.'<br />';
657  $objPHPExcel->getActiveSheet()->getCell($columnID.$rID)->setCalculatedValue($dataValue);
658  }
659  if ($formatting !== NULL) {
660  $objPHPExcel->getActiveSheet()->getStyle($columnID.$rID)->getNumberFormat()->setFormatCode($formatting);
661  } else {
662  $objPHPExcel->getActiveSheet()->getStyle($columnID.$rID)->getNumberFormat()->setFormatCode(PHPExcel_Style_NumberFormat::FORMAT_GENERAL);
663  }
664  if ($hyperlink !== NULL) {
665  $objPHPExcel->getActiveSheet()->getCell($columnID.$rID)->getHyperlink()->setUrl($hyperlink);
666  }
667  }
668  }
669  }
670  }
671 
672  // Merged cells
673  if ((isset($cellDataTableAttributes['number-columns-spanned'])) || (isset($cellDataTableAttributes['number-rows-spanned']))) {
674  if (($type !== PHPExcel_Cell_DataType::TYPE_NULL) || (!$this->_readDataOnly)) {
675  $columnTo = $columnID;
676  if (isset($cellDataTableAttributes['number-columns-spanned'])) {
677  $columnTo = PHPExcel_Cell::stringFromColumnIndex(PHPExcel_Cell::columnIndexFromString($columnID) + $cellDataTableAttributes['number-columns-spanned'] -2);
678  }
679  $rowTo = $rowID;
680  if (isset($cellDataTableAttributes['number-rows-spanned'])) {
681  $rowTo = $rowTo + $cellDataTableAttributes['number-rows-spanned'] - 1;
682  }
683  $cellRange = $columnID.$rowID.':'.$columnTo.$rowTo;
684  $objPHPExcel->getActiveSheet()->mergeCells($cellRange);
685  }
686  }
687 
688  ++$columnID;
689  }
690  $rowID += $rowRepeats;
691  break;
692  }
693  }
694  ++$worksheetID;
695  }
696  }
697 
698  // Return
699  return $objPHPExcel;
700  }
701 
702 
703  private function _parseRichText($is = '') {
704  $value = new PHPExcel_RichText();
705 
706  $value->createText($is);
707 
708  return $value;
709  }
710 
711 }
static getZipClass()
Return the name of the Zip handler Class that PHPExcel is configured to use (PCLZip or ZipArchive) or...
Definition: Settings.php:141
$style
Definition: example_012.php:70
canRead($pFilename)
Can the current PHPExcel_Reader_IReader read the file?
Definition: OOCalc.php:70
listWorksheetNames($pFilename)
Reads names of the worksheets from a file, without parsing the whole file to a PHPExcel object...
Definition: OOCalc.php:122
$objPHPExcel
getProperties()
Get properties.
Definition: PHPExcel.php:425
Add rich text string
The name of the decorator.
$dataArray
createSheet($iSheetIndex=NULL)
Create sheet and add it to this workbook.
Definition: PHPExcel.php:479
static FormattedPHPToExcel($year, $month, $day, $hours=0, $minutes=0, $seconds=0)
FormattedPHPToExcel.
Definition: Date.php:215
securityScan($xml)
Scan theXML for use of <!ENTITY to prevent XXE/XEE attacks.
Definition: Abstract.php:236
static identifyFixedStyleValue($styleList, &$styleAttributeValue)
Definition: OOCalc.php:310
securityScanFile($filestream)
Scan theXML for use of <!ENTITY to prevent XXE/XEE attacks.
Definition: Abstract.php:251
static convertProperty($propertyValue, $propertyType)
static _translateSeparator($fromSeparator, $toSeparator, $formula, &$inBraces)
__construct()
Create a new PHPExcel_Reader_OOCalc.
Definition: OOCalc.php:58
load($pFilename)
Loads PHPExcel from file.
Definition: OOCalc.php:300
static getLibXmlLoaderOptions()
Get default options for libxml loader.
Definition: Settings.php:381
Create styles array
The data for the language used.
getActiveSheet()
Get active sheet.
Definition: PHPExcel.php:467
_parseRichText($is='')
Definition: OOCalc.php:703
getReadFilter()
Read filter.
Definition: Abstract.php:173
static columnIndexFromString($pString='A')
Column index from string.
Definition: Cell.php:782
static stringFromColumnIndex($pColumnIndex=0)
String from columnindex.
Definition: Cell.php:825
setActiveSheetIndex($pIndex=0)
Set active sheet index.
Definition: PHPExcel.php:683
loadIntoExisting($pFilename, PHPExcel $objPHPExcel)
Loads PHPExcel from file into PHPExcel instance.
Definition: OOCalc.php:330
$text
listWorksheetInfo($pFilename)
Return worksheet info (Name, Last Column Letter, Last Column Index, Total Rows, Total Columns) ...
Definition: OOCalc.php:174
defined( 'APPLICATION_ENV')||define( 'APPLICATION_ENV'
Definition: bootstrap.php:27
static PHPToExcel($dateValue=0, $adjustToTimezone=FALSE, $timezone=NULL)
Convert a date from PHP to Excel.
Definition: Date.php:185