Overview

Packages

  • JAMA
  • None
  • PHP
  • PHPExcel
    • CachedObjectStorage
    • Calculation
    • Cell
    • Chart
      • Renderer
    • Reader
      • Excel2007
      • Excel5
    • RichText
    • Settings
    • Shared
      • Escher
      • OLE
      • Trend
      • ZipArchive
    • Style
    • Worksheet
      • Drawing
    • Writer
      • 2007
      • CSV
      • Excel2007
      • Excel5
      • HTML
      • PDF

Classes

  • CholeskyDecomposition
  • Dao
  • DateTime
  • DateTimeZone
  • DOMNode
  • EigenvalueDecomposition
  • Elemento
  • Historial
  • Irradiacion
  • Latitud
  • MotorPhp
  • Panel
  • PclZip
  • Periodo
  • PHPExcel
  • PHPExcel_Autoloader
  • PHPExcel_Best_Fit
  • PHPExcel_CachedObjectStorage_APC
  • PHPExcel_CachedObjectStorage_CacheBase
  • PHPExcel_CachedObjectStorage_DiscISAM
  • PHPExcel_CachedObjectStorage_Igbinary
  • PHPExcel_CachedObjectStorage_Memcache
  • PHPExcel_CachedObjectStorage_Memory
  • PHPExcel_CachedObjectStorage_MemoryGZip
  • PHPExcel_CachedObjectStorage_MemorySerialized
  • PHPExcel_CachedObjectStorage_PHPTemp
  • PHPExcel_CachedObjectStorage_SQLite
  • PHPExcel_CachedObjectStorage_SQLite3
  • PHPExcel_CachedObjectStorage_Wincache
  • PHPExcel_CachedObjectStorageFactory
  • PHPExcel_CalcEngine_CyclicReferenceStack
  • PHPExcel_CalcEngine_Logger
  • PHPExcel_Calculation
  • PHPExcel_Calculation_Database
  • PHPExcel_Calculation_DateTime
  • PHPExcel_Calculation_Engineering
  • PHPExcel_Calculation_ExceptionHandler
  • PHPExcel_Calculation_Financial
  • PHPExcel_Calculation_FormulaParser
  • PHPExcel_Calculation_FormulaToken
  • PHPExcel_Calculation_Function
  • PHPExcel_Calculation_Functions
  • PHPExcel_Calculation_Logical
  • PHPExcel_Calculation_LookupRef
  • PHPExcel_Calculation_MathTrig
  • PHPExcel_Calculation_Statistical
  • PHPExcel_Calculation_TextData
  • PHPExcel_Calculation_Token_Stack
  • PHPExcel_Cell
  • PHPExcel_Cell_AdvancedValueBinder
  • PHPExcel_Cell_DataType
  • PHPExcel_Cell_DataValidation
  • PHPExcel_Cell_DefaultValueBinder
  • PHPExcel_Cell_Hyperlink
  • PHPExcel_Chart
  • PHPExcel_Chart_DataSeries
  • PHPExcel_Chart_DataSeriesValues
  • PHPExcel_Chart_Layout
  • PHPExcel_Chart_Legend
  • PHPExcel_Chart_PlotArea
  • PHPExcel_Chart_Renderer_jpgraph
  • PHPExcel_Chart_Title
  • PHPExcel_Comment
  • PHPExcel_DocumentProperties
  • PHPExcel_DocumentSecurity
  • PHPExcel_Exponential_Best_Fit
  • PHPExcel_HashTable
  • PHPExcel_IOFactory
  • PHPExcel_Linear_Best_Fit
  • PHPExcel_Logarithmic_Best_Fit
  • PHPExcel_NamedRange
  • PHPExcel_Polynomial_Best_Fit
  • PHPExcel_Power_Best_Fit
  • PHPExcel_Reader_Abstract
  • PHPExcel_Reader_CSV
  • PHPExcel_Reader_DefaultReadFilter
  • PHPExcel_Reader_Excel2003XML
  • PHPExcel_Reader_Excel2007
  • PHPExcel_Reader_Excel2007_Chart
  • PHPExcel_Reader_Excel2007_Theme
  • PHPExcel_Reader_Excel5
  • PHPExcel_Reader_Excel5_Escher
  • PHPExcel_Reader_Excel5_MD5
  • PHPExcel_Reader_Excel5_RC4
  • PHPExcel_Reader_Gnumeric
  • PHPExcel_Reader_HTML
  • PHPExcel_Reader_OOCalc
  • PHPExcel_Reader_SYLK
  • PHPExcel_ReferenceHelper
  • PHPExcel_RichText
  • PHPExcel_RichText_Run
  • PHPExcel_RichText_TextElement
  • PHPExcel_Settings
  • PHPExcel_Shared_CodePage
  • PHPExcel_Shared_Date
  • PHPExcel_Shared_Drawing
  • PHPExcel_Shared_Escher
  • PHPExcel_Shared_Escher_DgContainer
  • PHPExcel_Shared_Escher_DgContainer_SpgrContainer
  • PHPExcel_Shared_Escher_DgContainer_SpgrContainer_SpContainer
  • PHPExcel_Shared_Escher_DggContainer
  • PHPExcel_Shared_Escher_DggContainer_BstoreContainer
  • PHPExcel_Shared_Escher_DggContainer_BstoreContainer_BSE
  • PHPExcel_Shared_Escher_DggContainer_BstoreContainer_BSE_Blip
  • PHPExcel_Shared_Excel5
  • PHPExcel_Shared_File
  • PHPExcel_Shared_Font
  • PHPExcel_Shared_JAMA_LUDecomposition
  • PHPExcel_Shared_JAMA_Matrix
  • PHPExcel_Shared_JAMA_QRDecomposition
  • PHPExcel_Shared_OLE
  • PHPExcel_Shared_OLE_ChainedBlockStream
  • PHPExcel_Shared_OLE_PPS
  • PHPExcel_Shared_OLE_PPS_File
  • PHPExcel_Shared_OLE_PPS_Root
  • PHPExcel_Shared_OLERead
  • PHPExcel_Shared_PasswordHasher
  • PHPExcel_Shared_String
  • PHPExcel_Shared_TimeZone
  • PHPExcel_Shared_XMLWriter
  • PHPExcel_Shared_ZipArchive
  • PHPExcel_Shared_ZipStreamWrapper
  • PHPExcel_Style
  • PHPExcel_Style_Alignment
  • PHPExcel_Style_Border
  • PHPExcel_Style_Borders
  • PHPExcel_Style_Color
  • PHPExcel_Style_Conditional
  • PHPExcel_Style_Fill
  • PHPExcel_Style_Font
  • PHPExcel_Style_NumberFormat
  • PHPExcel_Style_Protection
  • PHPExcel_Style_Supervisor
  • PHPExcel_Worksheet
  • PHPExcel_Worksheet_AutoFilter
  • PHPExcel_Worksheet_AutoFilter_Column
  • PHPExcel_Worksheet_AutoFilter_Column_Rule
  • PHPExcel_Worksheet_BaseDrawing
  • PHPExcel_Worksheet_CellIterator
  • PHPExcel_Worksheet_ColumnDimension
  • PHPExcel_Worksheet_Drawing
  • PHPExcel_Worksheet_Drawing_Shadow
  • PHPExcel_Worksheet_HeaderFooter
  • PHPExcel_Worksheet_HeaderFooterDrawing
  • PHPExcel_Worksheet_MemoryDrawing
  • PHPExcel_Worksheet_PageMargins
  • PHPExcel_Worksheet_PageSetup
  • PHPExcel_Worksheet_Protection
  • PHPExcel_Worksheet_Row
  • PHPExcel_Worksheet_RowDimension
  • PHPExcel_Worksheet_RowIterator
  • PHPExcel_Worksheet_SheetView
  • PHPExcel_WorksheetIterator
  • PHPExcel_Writer_Abstract
  • PHPExcel_Writer_CSV
  • PHPExcel_Writer_Excel2007
  • PHPExcel_Writer_Excel2007_Chart
  • PHPExcel_Writer_Excel2007_Comments
  • PHPExcel_Writer_Excel2007_ContentTypes
  • PHPExcel_Writer_Excel2007_DocProps
  • PHPExcel_Writer_Excel2007_Drawing
  • PHPExcel_Writer_Excel2007_Rels
  • PHPExcel_Writer_Excel2007_RelsRibbon
  • PHPExcel_Writer_Excel2007_RelsVBA
  • PHPExcel_Writer_Excel2007_StringTable
  • PHPExcel_Writer_Excel2007_Style
  • PHPExcel_Writer_Excel2007_Theme
  • PHPExcel_Writer_Excel2007_Workbook
  • PHPExcel_Writer_Excel2007_Worksheet
  • PHPExcel_Writer_Excel2007_WriterPart
  • PHPExcel_Writer_Excel5
  • PHPExcel_Writer_Excel5_BIFFwriter
  • PHPExcel_Writer_Excel5_Escher
  • PHPExcel_Writer_Excel5_Font
  • PHPExcel_Writer_Excel5_Parser
  • PHPExcel_Writer_Excel5_Workbook
  • PHPExcel_Writer_Excel5_Worksheet
  • PHPExcel_Writer_Excel5_Xf
  • PHPExcel_Writer_HTML
  • PHPExcel_Writer_PDF
  • PHPExcel_Writer_PDF_Core
  • PHPExcel_Writer_PDF_DomPDF
  • PHPExcel_Writer_PDF_mPDF
  • PHPExcel_Writer_PDF_tcPDF
  • Provincia
  • Radiacion
  • SingularValueDecomposition
  • Sistema
  • trendClass
  • xajax
  • xajaxArgumentManager
  • xajaxCallableObject
  • xajaxCallableObjectPlugin
  • xajaxControl
  • xajaxControlContainer
  • xajaxCustomRequest
  • xajaxCustomResponse
  • xajaxEvent
  • xajaxEventPlugin
  • xajaxFunctionPlugin
  • xajaxIncludeClientScriptPlugin
  • xajaxLanguageManager
  • xajaxPlugin
  • xajaxPluginManager
  • xajaxRequest
  • xajaxRequestPlugin
  • xajaxResponse
  • xajaxResponseManager
  • xajaxResponsePlugin
  • xajaxScriptPlugin
  • xajaxUserFunction
  • XMLWriter

Interfaces

  • DateTimeInterface
  • Iterator
  • PHPExcel_CachedObjectStorage_ICache
  • PHPExcel_Cell_IValueBinder
  • PHPExcel_IComparable
  • PHPExcel_Reader_IReader
  • PHPExcel_Reader_IReadFilter
  • PHPExcel_RichText_ITextElement
  • PHPExcel_Writer_IWriter
  • Throwable
  • Traversable

Exceptions

  • Exception
  • PHPExcel_Calculation_Exception
  • PHPExcel_Chart_Exception
  • PHPExcel_Exception
  • PHPExcel_Reader_Exception
  • PHPExcel_Writer_Exception

Functions

  • acosh
  • agregar_elemento
  • asinh
  • atanh
  • borrar_elementos
  • borrar_gdm_ab
  • borrar_irradiacion
  • borrar_latitud
  • borrar_panel
  • borrar_periodo
  • borrar_pmp_min_pmp_max
  • borrar_radiacion
  • borrar_resumen
  • borrar_sistema
  • borrar_sombra
  • gdm_ab
  • grabar_resumen
  • historial
  • hypo
  • irradiacion
  • JAMAError
  • latitud
  • limpiar_historial
  • login
  • mb_str_replace
  • mostrar_energia_total_ch
  • mostrar_panel_md_th
  • mostrar_panel_th
  • mostrar_radiacion_md_th
  • mostrar_radiacion_th
  • mostrar_resumen_th
  • panel
  • PclZipUtilCopyBlock
  • PclZipUtilOptionText
  • PclZipUtilPathInclusion
  • PclZipUtilPathReduction
  • PclZipUtilRename
  • PclZipUtilTranslateWinPath
  • periodo
  • pmp_min_pmp_max
  • preparar_panel
  • preparar_radiacion
  • preparar_radiacion_media
  • radiacion
  • resumen
  • sistema
  • sombra
  • xajaxCompressFile
  • xajaxErrorHandler
  • Overview
  • Package
  • Class
  • Tree
  • Deprecated
  • Todo
  • Download
  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_Reader
 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    1.8.0, 2014-03-02
 26:  */
 27: 
 28: 
 29: /** PHPExcel root directory */
 30: if (!defined('PHPEXCEL_ROOT')) {
 31:     /**
 32:      * @ignore
 33:      */
 34:     define('PHPEXCEL_ROOT', dirname(__FILE__) . '/../../');
 35:     require(PHPEXCEL_ROOT . 'PHPExcel/Autoloader.php');
 36: }
 37: 
 38: /**
 39:  * PHPExcel_Reader_Excel2003XML
 40:  *
 41:  * @category   PHPExcel
 42:  * @package    PHPExcel_Reader
 43:  * @copyright  Copyright (c) 2006 - 2014 PHPExcel (http://www.codeplex.com/PHPExcel)
 44:  */
 45: class PHPExcel_Reader_Excel2003XML extends PHPExcel_Reader_Abstract implements PHPExcel_Reader_IReader
 46: {
 47:     /**
 48:      * Formats
 49:      *
 50:      * @var array
 51:      */
 52:     private $_styles = array();
 53: 
 54:     /**
 55:      * Character set used in the file
 56:      *
 57:      * @var string
 58:      */
 59:     private $_charSet = 'UTF-8';
 60: 
 61: 
 62:     /**
 63:      * Create a new PHPExcel_Reader_Excel2003XML
 64:      */
 65:     public function __construct() {
 66:         $this->_readFilter  = new PHPExcel_Reader_DefaultReadFilter();
 67:     }
 68: 
 69: 
 70:     /**
 71:      * Can the current PHPExcel_Reader_IReader read the file?
 72:      *
 73:      * @param   string      $pFilename
 74:      * @return  boolean
 75:      * @throws PHPExcel_Reader_Exception
 76:      */
 77:     public function canRead($pFilename)
 78:     {
 79: 
 80:         //  Office                  xmlns:o="urn:schemas-microsoft-com:office:office"
 81:         //  Excel                   xmlns:x="urn:schemas-microsoft-com:office:excel"
 82:         //  XML Spreadsheet         xmlns:ss="urn:schemas-microsoft-com:office:spreadsheet"
 83:         //  Spreadsheet component   xmlns:c="urn:schemas-microsoft-com:office:component:spreadsheet"
 84:         //  XML schema              xmlns:s="uuid:BDC6E3F0-6DA3-11d1-A2A3-00AA00C14882"
 85:         //  XML data type           xmlns:dt="uuid:C2F41010-65B3-11d1-A29F-00AA00C14882"
 86:         //  MS-persist recordset    xmlns:rs="urn:schemas-microsoft-com:rowset"
 87:         //  Rowset                  xmlns:z="#RowsetSchema"
 88:         //
 89: 
 90:         $signature = array(
 91:                 '<?xml version="1.0"',
 92:                 '<?mso-application progid="Excel.Sheet"?>'
 93:             );
 94: 
 95:         // Open file
 96:         $this->_openFile($pFilename);
 97:         $fileHandle = $this->_fileHandle;
 98:         
 99:         // Read sample data (first 2 KB will do)
100:         $data = fread($fileHandle, 2048);
101:         fclose($fileHandle);
102: 
103:         $valid = true;
104:         foreach($signature as $match) {
105:             // every part of the signature must be present
106:             if (strpos($data, $match) === false) {
107:                 $valid = false;
108:                 break;
109:             }
110:         }
111: 
112:         //  Retrieve charset encoding
113:         if(preg_match('/<?xml.*encoding=[\'"](.*?)[\'"].*?>/um',$data,$matches)) {
114:             $this->_charSet = strtoupper($matches[1]);
115:         }
116: //      echo 'Character Set is ',$this->_charSet,'<br />';
117: 
118:         return $valid;
119:     }
120: 
121: 
122:     /**
123:      * Reads names of the worksheets from a file, without parsing the whole file to a PHPExcel object
124:      *
125:      * @param   string      $pFilename
126:      * @throws  PHPExcel_Reader_Exception
127:      */
128:     public function listWorksheetNames($pFilename)
129:     {
130:         // Check if file exists
131:         if (!file_exists($pFilename)) {
132:             throw new PHPExcel_Reader_Exception("Could not open " . $pFilename . " for reading! File does not exist.");
133:         }
134:         if (!$this->canRead($pFilename)) {
135:             throw new PHPExcel_Reader_Exception($pFilename . " is an Invalid Spreadsheet file.");
136:         }
137: 
138:         $worksheetNames = array();
139: 
140:         $xml = simplexml_load_file($pFilename, 'SimpleXMLElement', PHPExcel_Settings::getLibXmlLoaderOptions());
141:         $namespaces = $xml->getNamespaces(true);
142: 
143:         $xml_ss = $xml->children($namespaces['ss']);
144:         foreach($xml_ss->Worksheet as $worksheet) {
145:             $worksheet_ss = $worksheet->attributes($namespaces['ss']);
146:             $worksheetNames[] = self::_convertStringEncoding((string) $worksheet_ss['Name'],$this->_charSet);
147:         }
148: 
149:         return $worksheetNames;
150:     }
151: 
152: 
153:     /**
154:      * Return worksheet info (Name, Last Column Letter, Last Column Index, Total Rows, Total Columns)
155:      *
156:      * @param   string     $pFilename
157:      * @throws   PHPExcel_Reader_Exception
158:      */
159:     public function listWorksheetInfo($pFilename)
160:     {
161:         // Check if file exists
162:         if (!file_exists($pFilename)) {
163:             throw new PHPExcel_Reader_Exception("Could not open " . $pFilename . " for reading! File does not exist.");
164:         }
165: 
166:         $worksheetInfo = array();
167: 
168:         $xml = simplexml_load_file($pFilename, 'SimpleXMLElement', PHPExcel_Settings::getLibXmlLoaderOptions());
169:         $namespaces = $xml->getNamespaces(true);
170: 
171:         $worksheetID = 1;
172:         $xml_ss = $xml->children($namespaces['ss']);
173:         foreach($xml_ss->Worksheet as $worksheet) {
174:             $worksheet_ss = $worksheet->attributes($namespaces['ss']);
175: 
176:             $tmpInfo = array();
177:             $tmpInfo['worksheetName'] = '';
178:             $tmpInfo['lastColumnLetter'] = 'A';
179:             $tmpInfo['lastColumnIndex'] = 0;
180:             $tmpInfo['totalRows'] = 0;
181:             $tmpInfo['totalColumns'] = 0;
182: 
183:             if (isset($worksheet_ss['Name'])) {
184:                 $tmpInfo['worksheetName'] = (string) $worksheet_ss['Name'];
185:             } else {
186:                 $tmpInfo['worksheetName'] = "Worksheet_{$worksheetID}";
187:             }
188: 
189:             if (isset($worksheet->Table->Row)) {
190:                 $rowIndex = 0;
191: 
192:                 foreach($worksheet->Table->Row as $rowData) {
193:                     $columnIndex = 0;
194:                     $rowHasData = false;
195: 
196:                     foreach($rowData->Cell as $cell) {
197:                         if (isset($cell->Data)) {
198:                             $tmpInfo['lastColumnIndex'] = max($tmpInfo['lastColumnIndex'], $columnIndex);
199:                             $rowHasData = true;
200:                         }
201: 
202:                         ++$columnIndex;
203:                     }
204: 
205:                     ++$rowIndex;
206: 
207:                     if ($rowHasData) {
208:                         $tmpInfo['totalRows'] = max($tmpInfo['totalRows'], $rowIndex);
209:                     }
210:                 }
211:             }
212: 
213:             $tmpInfo['lastColumnLetter'] = PHPExcel_Cell::stringFromColumnIndex($tmpInfo['lastColumnIndex']);
214:             $tmpInfo['totalColumns'] = $tmpInfo['lastColumnIndex'] + 1;
215: 
216:             $worksheetInfo[] = $tmpInfo;
217:             ++$worksheetID;
218:         }
219: 
220:         return $worksheetInfo;
221:     }
222: 
223: 
224:     /**
225:      * Loads PHPExcel from file
226:      *
227:      * @param   string      $pFilename
228:      * @return  PHPExcel
229:      * @throws  PHPExcel_Reader_Exception
230:      */
231:     public function load($pFilename)
232:     {
233:         // Create new PHPExcel
234:         $objPHPExcel = new PHPExcel();
235: 
236:         // Load into this instance
237:         return $this->loadIntoExisting($pFilename, $objPHPExcel);
238:     }
239: 
240: 
241:     private static function identifyFixedStyleValue($styleList,&$styleAttributeValue) {
242:         $styleAttributeValue = strtolower($styleAttributeValue);
243:         foreach($styleList as $style) {
244:             if ($styleAttributeValue == strtolower($style)) {
245:                 $styleAttributeValue = $style;
246:                 return true;
247:             }
248:         }
249:         return false;
250:     }
251: 
252: 
253:     /**
254:      * pixel units to excel width units(units of 1/256th of a character width)
255:      * @param pxs
256:      * @return
257:      */
258:     private static function _pixel2WidthUnits($pxs) {
259:         $UNIT_OFFSET_MAP = array(0, 36, 73, 109, 146, 182, 219);
260: 
261:         $widthUnits = 256 * ($pxs / 7);
262:         $widthUnits += $UNIT_OFFSET_MAP[($pxs % 7)];
263:         return $widthUnits;
264:     }
265: 
266: 
267:     /**
268:      * excel width units(units of 1/256th of a character width) to pixel units
269:      * @param widthUnits
270:      * @return
271:      */
272:     private static function _widthUnits2Pixel($widthUnits) {
273:         $pixels = ($widthUnits / 256) * 7;
274:         $offsetWidthUnits = $widthUnits % 256;
275:         $pixels += round($offsetWidthUnits / (256 / 7));
276:         return $pixels;
277:     }
278: 
279: 
280:     private static function _hex2str($hex) {
281:         return chr(hexdec($hex[1]));
282:     }
283: 
284: 
285:     /**
286:      * Loads PHPExcel from file into PHPExcel instance
287:      *
288:      * @param   string      $pFilename
289:      * @param   PHPExcel    $objPHPExcel
290:      * @return  PHPExcel
291:      * @throws  PHPExcel_Reader_Exception
292:      */
293:     public function loadIntoExisting($pFilename, PHPExcel $objPHPExcel)
294:     {
295:         $fromFormats    = array('\-',   '\ ');
296:         $toFormats      = array('-',    ' ');
297: 
298:         $underlineStyles = array (
299:                 PHPExcel_Style_Font::UNDERLINE_NONE,
300:                 PHPExcel_Style_Font::UNDERLINE_DOUBLE,
301:                 PHPExcel_Style_Font::UNDERLINE_DOUBLEACCOUNTING,
302:                 PHPExcel_Style_Font::UNDERLINE_SINGLE,
303:                 PHPExcel_Style_Font::UNDERLINE_SINGLEACCOUNTING
304:             );
305:         $verticalAlignmentStyles = array (
306:                 PHPExcel_Style_Alignment::VERTICAL_BOTTOM,
307:                 PHPExcel_Style_Alignment::VERTICAL_TOP,
308:                 PHPExcel_Style_Alignment::VERTICAL_CENTER,
309:                 PHPExcel_Style_Alignment::VERTICAL_JUSTIFY
310:             );
311:         $horizontalAlignmentStyles = array (
312:                 PHPExcel_Style_Alignment::HORIZONTAL_GENERAL,
313:                 PHPExcel_Style_Alignment::HORIZONTAL_LEFT,
314:                 PHPExcel_Style_Alignment::HORIZONTAL_RIGHT,
315:                 PHPExcel_Style_Alignment::HORIZONTAL_CENTER,
316:                 PHPExcel_Style_Alignment::HORIZONTAL_CENTER_CONTINUOUS,
317:                 PHPExcel_Style_Alignment::HORIZONTAL_JUSTIFY
318:             );
319: 
320:         $timezoneObj = new DateTimeZone('Europe/London');
321:         $GMT = new DateTimeZone('UTC');
322: 
323: 
324:         // Check if file exists
325:         if (!file_exists($pFilename)) {
326:             throw new PHPExcel_Reader_Exception("Could not open " . $pFilename . " for reading! File does not exist.");
327:         }
328: 
329:         if (!$this->canRead($pFilename)) {
330:             throw new PHPExcel_Reader_Exception($pFilename . " is an Invalid Spreadsheet file.");
331:         }
332: 
333:         $xml = simplexml_load_file($pFilename, 'SimpleXMLElement', PHPExcel_Settings::getLibXmlLoaderOptions());
334:         $namespaces = $xml->getNamespaces(true);
335: 
336:         $docProps = $objPHPExcel->getProperties();
337:         if (isset($xml->DocumentProperties[0])) {
338:             foreach($xml->DocumentProperties[0] as $propertyName => $propertyValue) {
339:                 switch ($propertyName) {
340:                     case 'Title' :
341:                             $docProps->setTitle(self::_convertStringEncoding($propertyValue,$this->_charSet));
342:                             break;
343:                     case 'Subject' :
344:                             $docProps->setSubject(self::_convertStringEncoding($propertyValue,$this->_charSet));
345:                             break;
346:                     case 'Author' :
347:                             $docProps->setCreator(self::_convertStringEncoding($propertyValue,$this->_charSet));
348:                             break;
349:                     case 'Created' :
350:                             $creationDate = strtotime($propertyValue);
351:                             $docProps->setCreated($creationDate);
352:                             break;
353:                     case 'LastAuthor' :
354:                             $docProps->setLastModifiedBy(self::_convertStringEncoding($propertyValue,$this->_charSet));
355:                             break;
356:                     case 'LastSaved' :
357:                             $lastSaveDate = strtotime($propertyValue);
358:                             $docProps->setModified($lastSaveDate);
359:                             break;
360:                     case 'Company' :
361:                             $docProps->setCompany(self::_convertStringEncoding($propertyValue,$this->_charSet));
362:                             break;
363:                     case 'Category' :
364:                             $docProps->setCategory(self::_convertStringEncoding($propertyValue,$this->_charSet));
365:                             break;
366:                     case 'Manager' :
367:                             $docProps->setManager(self::_convertStringEncoding($propertyValue,$this->_charSet));
368:                             break;
369:                     case 'Keywords' :
370:                             $docProps->setKeywords(self::_convertStringEncoding($propertyValue,$this->_charSet));
371:                             break;
372:                     case 'Description' :
373:                             $docProps->setDescription(self::_convertStringEncoding($propertyValue,$this->_charSet));
374:                             break;
375:                 }
376:             }
377:         }
378:         if (isset($xml->CustomDocumentProperties)) {
379:             foreach($xml->CustomDocumentProperties[0] as $propertyName => $propertyValue) {
380:                 $propertyAttributes = $propertyValue->attributes($namespaces['dt']);
381:                 $propertyName = preg_replace_callback('/_x([0-9a-z]{4})_/','PHPExcel_Reader_Excel2003XML::_hex2str',$propertyName);
382:                 $propertyType = PHPExcel_DocumentProperties::PROPERTY_TYPE_UNKNOWN;
383:                 switch((string) $propertyAttributes) {
384:                     case 'string' :
385:                         $propertyType = PHPExcel_DocumentProperties::PROPERTY_TYPE_STRING;
386:                         $propertyValue = trim($propertyValue);
387:                         break;
388:                     case 'boolean' :
389:                         $propertyType = PHPExcel_DocumentProperties::PROPERTY_TYPE_BOOLEAN;
390:                         $propertyValue = (bool) $propertyValue;
391:                         break;
392:                     case 'integer' :
393:                         $propertyType = PHPExcel_DocumentProperties::PROPERTY_TYPE_INTEGER;
394:                         $propertyValue = intval($propertyValue);
395:                         break;
396:                     case 'float' :
397:                         $propertyType = PHPExcel_DocumentProperties::PROPERTY_TYPE_FLOAT;
398:                         $propertyValue = floatval($propertyValue);
399:                         break;
400:                     case 'dateTime.tz' :
401:                         $propertyType = PHPExcel_DocumentProperties::PROPERTY_TYPE_DATE;
402:                         $propertyValue = strtotime(trim($propertyValue));
403:                         break;
404:                 }
405:                 $docProps->setCustomProperty($propertyName,$propertyValue,$propertyType);
406:             }
407:         }
408: 
409:         foreach($xml->Styles[0] as $style) {
410:             $style_ss = $style->attributes($namespaces['ss']);
411:             $styleID = (string) $style_ss['ID'];
412: //          echo 'Style ID = '.$styleID.'<br />';
413:             if ($styleID == 'Default') {
414:                 $this->_styles['Default'] = array();
415:             } else {
416:                 $this->_styles[$styleID] = $this->_styles['Default'];
417:             }
418:             foreach ($style as $styleType => $styleData) {
419:                 $styleAttributes = $styleData->attributes($namespaces['ss']);
420: //              echo $styleType.'<br />';
421:                 switch ($styleType) {
422:                     case 'Alignment' :
423:                             foreach($styleAttributes as $styleAttributeKey => $styleAttributeValue) {
424: //                              echo $styleAttributeKey.' = '.$styleAttributeValue.'<br />';
425:                                 $styleAttributeValue = (string) $styleAttributeValue;
426:                                 switch ($styleAttributeKey) {
427:                                     case 'Vertical' :
428:                                             if (self::identifyFixedStyleValue($verticalAlignmentStyles,$styleAttributeValue)) {
429:                                                 $this->_styles[$styleID]['alignment']['vertical'] = $styleAttributeValue;
430:                                             }
431:                                             break;
432:                                     case 'Horizontal' :
433:                                             if (self::identifyFixedStyleValue($horizontalAlignmentStyles,$styleAttributeValue)) {
434:                                                 $this->_styles[$styleID]['alignment']['horizontal'] = $styleAttributeValue;
435:                                             }
436:                                             break;
437:                                     case 'WrapText' :
438:                                             $this->_styles[$styleID]['alignment']['wrap'] = true;
439:                                             break;
440:                                 }
441:                             }
442:                             break;
443:                     case 'Borders' :
444:                             foreach($styleData->Border as $borderStyle) {
445:                                 $borderAttributes = $borderStyle->attributes($namespaces['ss']);
446:                                 $thisBorder = array();
447:                                 foreach($borderAttributes as $borderStyleKey => $borderStyleValue) {
448: //                                  echo $borderStyleKey.' = '.$borderStyleValue.'<br />';
449:                                     switch ($borderStyleKey) {
450:                                         case 'LineStyle' :
451:                                                 $thisBorder['style'] = PHPExcel_Style_Border::BORDER_MEDIUM;
452: //                                              $thisBorder['style'] = $borderStyleValue;
453:                                                 break;
454:                                         case 'Weight' :
455: //                                              $thisBorder['style'] = $borderStyleValue;
456:                                                 break;
457:                                         case 'Position' :
458:                                                 $borderPosition = strtolower($borderStyleValue);
459:                                                 break;
460:                                         case 'Color' :
461:                                                 $borderColour = substr($borderStyleValue,1);
462:                                                 $thisBorder['color']['rgb'] = $borderColour;
463:                                                 break;
464:                                     }
465:                                 }
466:                                 if (!empty($thisBorder)) {
467:                                     if (($borderPosition == 'left') || ($borderPosition == 'right') || ($borderPosition == 'top') || ($borderPosition == 'bottom')) {
468:                                         $this->_styles[$styleID]['borders'][$borderPosition] = $thisBorder;
469:                                     }
470:                                 }
471:                             }
472:                             break;
473:                     case 'Font' :
474:                             foreach($styleAttributes as $styleAttributeKey => $styleAttributeValue) {
475: //                              echo $styleAttributeKey.' = '.$styleAttributeValue.'<br />';
476:                                 $styleAttributeValue = (string) $styleAttributeValue;
477:                                 switch ($styleAttributeKey) {
478:                                     case 'FontName' :
479:                                             $this->_styles[$styleID]['font']['name'] = $styleAttributeValue;
480:                                             break;
481:                                     case 'Size' :
482:                                             $this->_styles[$styleID]['font']['size'] = $styleAttributeValue;
483:                                             break;
484:                                     case 'Color' :
485:                                             $this->_styles[$styleID]['font']['color']['rgb'] = substr($styleAttributeValue,1);
486:                                             break;
487:                                     case 'Bold' :
488:                                             $this->_styles[$styleID]['font']['bold'] = true;
489:                                             break;
490:                                     case 'Italic' :
491:                                             $this->_styles[$styleID]['font']['italic'] = true;
492:                                             break;
493:                                     case 'Underline' :
494:                                             if (self::identifyFixedStyleValue($underlineStyles,$styleAttributeValue)) {
495:                                                 $this->_styles[$styleID]['font']['underline'] = $styleAttributeValue;
496:                                             }
497:                                             break;
498:                                 }
499:                             }
500:                             break;
501:                     case 'Interior' :
502:                             foreach($styleAttributes as $styleAttributeKey => $styleAttributeValue) {
503: //                              echo $styleAttributeKey.' = '.$styleAttributeValue.'<br />';
504:                                 switch ($styleAttributeKey) {
505:                                     case 'Color' :
506:                                             $this->_styles[$styleID]['fill']['color']['rgb'] = substr($styleAttributeValue,1);
507:                                             break;
508:                                 }
509:                             }
510:                             break;
511:                     case 'NumberFormat' :
512:                             foreach($styleAttributes as $styleAttributeKey => $styleAttributeValue) {
513: //                              echo $styleAttributeKey.' = '.$styleAttributeValue.'<br />';
514:                                 $styleAttributeValue = str_replace($fromFormats,$toFormats,$styleAttributeValue);
515:                                 switch ($styleAttributeValue) {
516:                                     case 'Short Date' :
517:                                             $styleAttributeValue = 'dd/mm/yyyy';
518:                                             break;
519:                                 }
520:                                 if ($styleAttributeValue > '') {
521:                                     $this->_styles[$styleID]['numberformat']['code'] = $styleAttributeValue;
522:                                 }
523:                             }
524:                             break;
525:                     case 'Protection' :
526:                             foreach($styleAttributes as $styleAttributeKey => $styleAttributeValue) {
527: //                              echo $styleAttributeKey.' = '.$styleAttributeValue.'<br />';
528:                             }
529:                             break;
530:                 }
531:             }
532: //          print_r($this->_styles[$styleID]);
533: //          echo '<hr />';
534:         }
535: //      echo '<hr />';
536: 
537:         $worksheetID = 0;
538:         $xml_ss = $xml->children($namespaces['ss']);
539: 
540:         foreach($xml_ss->Worksheet as $worksheet) {
541:             $worksheet_ss = $worksheet->attributes($namespaces['ss']);
542: 
543:             if ((isset($this->_loadSheetsOnly)) && (isset($worksheet_ss['Name'])) &&
544:                 (!in_array($worksheet_ss['Name'], $this->_loadSheetsOnly))) {
545:                 continue;
546:             }
547: 
548: //          echo '<h3>Worksheet: ',$worksheet_ss['Name'],'<h3>';
549: //
550:             // Create new Worksheet
551:             $objPHPExcel->createSheet();
552:             $objPHPExcel->setActiveSheetIndex($worksheetID);
553:             if (isset($worksheet_ss['Name'])) {
554:                 $worksheetName = self::_convertStringEncoding((string) $worksheet_ss['Name'],$this->_charSet);
555:                 //  Use false for $updateFormulaCellReferences to prevent adjustment of worksheet references in
556:                 //      formula cells... during the load, all formulae should be correct, and we're simply bringing
557:                 //      the worksheet name in line with the formula, not the reverse
558:                 $objPHPExcel->getActiveSheet()->setTitle($worksheetName,false);
559:             }
560: 
561:             $columnID = 'A';
562:             if (isset($worksheet->Table->Column)) {
563:                 foreach($worksheet->Table->Column as $columnData) {
564:                     $columnData_ss = $columnData->attributes($namespaces['ss']);
565:                     if (isset($columnData_ss['Index'])) {
566:                         $columnID = PHPExcel_Cell::stringFromColumnIndex($columnData_ss['Index']-1);
567:                     }
568:                     if (isset($columnData_ss['Width'])) {
569:                         $columnWidth = $columnData_ss['Width'];
570: //                      echo '<b>Setting column width for '.$columnID.' to '.$columnWidth.'</b><br />';
571:                         $objPHPExcel->getActiveSheet()->getColumnDimension($columnID)->setWidth($columnWidth / 5.4);
572:                     }
573:                     ++$columnID;
574:                 }
575:             }
576: 
577:             $rowID = 1;
578:             if (isset($worksheet->Table->Row)) {
579:                 foreach($worksheet->Table->Row as $rowData) {
580:                     $rowHasData = false;
581:                     $row_ss = $rowData->attributes($namespaces['ss']);
582:                     if (isset($row_ss['Index'])) {
583:                         $rowID = (integer) $row_ss['Index'];
584:                     }
585: //                  echo '<b>Row '.$rowID.'</b><br />';
586: 
587:                     $columnID = 'A';
588:                     foreach($rowData->Cell as $cell) {
589: 
590:                         $cell_ss = $cell->attributes($namespaces['ss']);
591:                         if (isset($cell_ss['Index'])) {
592:                             $columnID = PHPExcel_Cell::stringFromColumnIndex($cell_ss['Index']-1);
593:                         }
594:                         $cellRange = $columnID.$rowID;
595: 
596:                         if ($this->getReadFilter() !== NULL) {
597:                             if (!$this->getReadFilter()->readCell($columnID, $rowID, $worksheetName)) {
598:                                 continue;
599:                             }
600:                         }
601: 
602:                         if ((isset($cell_ss['MergeAcross'])) || (isset($cell_ss['MergeDown']))) {
603:                             $columnTo = $columnID;
604:                             if (isset($cell_ss['MergeAcross'])) {
605:                                 $columnTo = PHPExcel_Cell::stringFromColumnIndex(PHPExcel_Cell::columnIndexFromString($columnID) + $cell_ss['MergeAcross'] -1);
606:                             }
607:                             $rowTo = $rowID;
608:                             if (isset($cell_ss['MergeDown'])) {
609:                                 $rowTo = $rowTo + $cell_ss['MergeDown'];
610:                             }
611:                             $cellRange .= ':'.$columnTo.$rowTo;
612:                             $objPHPExcel->getActiveSheet()->mergeCells($cellRange);
613:                         }
614: 
615:                         $cellIsSet = $hasCalculatedValue = false;
616:                         $cellDataFormula = '';
617:                         if (isset($cell_ss['Formula'])) {
618:                             $cellDataFormula = $cell_ss['Formula'];
619:                             // added this as a check for array formulas
620:                             if (isset($cell_ss['ArrayRange'])) {
621:                                 $cellDataCSEFormula = $cell_ss['ArrayRange'];
622: //                              echo "found an array formula at ".$columnID.$rowID."<br />";
623:                             }
624:                             $hasCalculatedValue = true;
625:                         }
626:                         if (isset($cell->Data)) {
627:                             $cellValue = $cellData = $cell->Data;
628:                             $type = PHPExcel_Cell_DataType::TYPE_NULL;
629:                             $cellData_ss = $cellData->attributes($namespaces['ss']);
630:                             if (isset($cellData_ss['Type'])) {
631:                                 $cellDataType = $cellData_ss['Type'];
632:                                 switch ($cellDataType) {
633:                                     /*
634:                                     const TYPE_STRING       = 's';
635:                                     const TYPE_FORMULA      = 'f';
636:                                     const TYPE_NUMERIC      = 'n';
637:                                     const TYPE_BOOL         = 'b';
638:                                     const TYPE_NULL         = 'null';
639:                                     const TYPE_INLINE       = 'inlineStr';
640:                                     const TYPE_ERROR        = 'e';
641:                                     */
642:                                     case 'String' :
643:                                             $cellValue = self::_convertStringEncoding($cellValue,$this->_charSet);
644:                                             $type = PHPExcel_Cell_DataType::TYPE_STRING;
645:                                             break;
646:                                     case 'Number' :
647:                                             $type = PHPExcel_Cell_DataType::TYPE_NUMERIC;
648:                                             $cellValue = (float) $cellValue;
649:                                             if (floor($cellValue) == $cellValue) {
650:                                                 $cellValue = (integer) $cellValue;
651:                                             }
652:                                             break;
653:                                     case 'Boolean' :
654:                                             $type = PHPExcel_Cell_DataType::TYPE_BOOL;
655:                                             $cellValue = ($cellValue != 0);
656:                                             break;
657:                                     case 'DateTime' :
658:                                             $type = PHPExcel_Cell_DataType::TYPE_NUMERIC;
659:                                             $cellValue = PHPExcel_Shared_Date::PHPToExcel(strtotime($cellValue));
660:                                             break;
661:                                     case 'Error' :
662:                                             $type = PHPExcel_Cell_DataType::TYPE_ERROR;
663:                                             break;
664:                                 }
665:                             }
666: 
667:                             if ($hasCalculatedValue) {
668: //                              echo 'FORMULA<br />';
669:                                 $type = PHPExcel_Cell_DataType::TYPE_FORMULA;
670:                                 $columnNumber = PHPExcel_Cell::columnIndexFromString($columnID);
671:                                 if (substr($cellDataFormula,0,3) == 'of:') {
672:                                     $cellDataFormula = substr($cellDataFormula,3);
673: //                                  echo 'Before: ',$cellDataFormula,'<br />';
674:                                     $temp = explode('"',$cellDataFormula);
675:                                     $key = false;
676:                                     foreach($temp as &$value) {
677:                                         //  Only replace in alternate array entries (i.e. non-quoted blocks)
678:                                         if ($key = !$key) {
679:                                             $value = str_replace(array('[.','.',']'),'',$value);
680:                                         }
681:                                     }
682:                                 } else {
683:                                     //  Convert R1C1 style references to A1 style references (but only when not quoted)
684: //                                  echo 'Before: ',$cellDataFormula,'<br />';
685:                                     $temp = explode('"',$cellDataFormula);
686:                                     $key = false;
687:                                     foreach($temp as &$value) {
688:                                         //  Only replace in alternate array entries (i.e. non-quoted blocks)
689:                                         if ($key = !$key) {
690:                                             preg_match_all('/(R(\[?-?\d*\]?))(C(\[?-?\d*\]?))/',$value, $cellReferences,PREG_SET_ORDER+PREG_OFFSET_CAPTURE);
691:                                             //  Reverse the matches array, otherwise all our offsets will become incorrect if we modify our way
692:                                             //      through the formula from left to right. Reversing means that we work right to left.through
693:                                             //      the formula
694:                                             $cellReferences = array_reverse($cellReferences);
695:                                             //  Loop through each R1C1 style reference in turn, converting it to its A1 style equivalent,
696:                                             //      then modify the formula to use that new reference
697:                                             foreach($cellReferences as $cellReference) {
698:                                                 $rowReference = $cellReference[2][0];
699:                                                 //  Empty R reference is the current row
700:                                                 if ($rowReference == '') $rowReference = $rowID;
701:                                                 //  Bracketed R references are relative to the current row
702:                                                 if ($rowReference{0} == '[') $rowReference = $rowID + trim($rowReference,'[]');
703:                                                 $columnReference = $cellReference[4][0];
704:                                                 //  Empty C reference is the current column
705:                                                 if ($columnReference == '') $columnReference = $columnNumber;
706:                                                 //  Bracketed C references are relative to the current column
707:                                                 if ($columnReference{0} == '[') $columnReference = $columnNumber + trim($columnReference,'[]');
708:                                                 $A1CellReference = PHPExcel_Cell::stringFromColumnIndex($columnReference-1).$rowReference;
709:                                                     $value = substr_replace($value,$A1CellReference,$cellReference[0][1],strlen($cellReference[0][0]));
710:                                             }
711:                                         }
712:                                     }
713:                                 }
714:                                 unset($value);
715:                                 //  Then rebuild the formula string
716:                                 $cellDataFormula = implode('"',$temp);
717: //                              echo 'After: ',$cellDataFormula,'<br />';
718:                             }
719: 
720: //                          echo 'Cell '.$columnID.$rowID.' is a '.$type.' with a value of '.(($hasCalculatedValue) ? $cellDataFormula : $cellValue).'<br />';
721: //
722:                             $objPHPExcel->getActiveSheet()->getCell($columnID.$rowID)->setValueExplicit((($hasCalculatedValue) ? $cellDataFormula : $cellValue),$type);
723:                             if ($hasCalculatedValue) {
724: //                              echo 'Formula result is '.$cellValue.'<br />';
725:                                 $objPHPExcel->getActiveSheet()->getCell($columnID.$rowID)->setCalculatedValue($cellValue);
726:                             }
727:                             $cellIsSet = $rowHasData = true;
728:                         }
729: 
730:                         if (isset($cell->Comment)) {
731: //                          echo '<b>comment found</b><br />';
732:                             $commentAttributes = $cell->Comment->attributes($namespaces['ss']);
733:                             $author = 'unknown';
734:                             if (isset($commentAttributes->Author)) {
735:                                 $author = (string)$commentAttributes->Author;
736: //                              echo 'Author: ',$author,'<br />';
737:                             }
738:                             $node = $cell->Comment->Data->asXML();
739: //                          $annotation = str_replace('html:','',substr($node,49,-10));
740: //                          echo $annotation,'<br />';
741:                             $annotation = strip_tags($node);
742: //                          echo 'Annotation: ',$annotation,'<br />';
743:                             $objPHPExcel->getActiveSheet()->getComment( $columnID.$rowID )
744:                                                             ->setAuthor(self::_convertStringEncoding($author ,$this->_charSet))
745:                                                             ->setText($this->_parseRichText($annotation) );
746:                         }
747: 
748:                         if (($cellIsSet) && (isset($cell_ss['StyleID']))) {
749:                             $style = (string) $cell_ss['StyleID'];
750: //                          echo 'Cell style for '.$columnID.$rowID.' is '.$style.'<br />';
751:                             if ((isset($this->_styles[$style])) && (!empty($this->_styles[$style]))) {
752: //                              echo 'Cell '.$columnID.$rowID.'<br />';
753: //                              print_r($this->_styles[$style]);
754: //                              echo '<br />';
755:                                 if (!$objPHPExcel->getActiveSheet()->cellExists($columnID.$rowID)) {
756:                                     $objPHPExcel->getActiveSheet()->getCell($columnID.$rowID)->setValue(NULL);
757:                                 }
758:                                 $objPHPExcel->getActiveSheet()->getStyle($cellRange)->applyFromArray($this->_styles[$style]);
759:                             }
760:                         }
761:                         ++$columnID;
762:                     }
763: 
764:                     if ($rowHasData) {
765:                         if (isset($row_ss['StyleID'])) {
766:                             $rowStyle = $row_ss['StyleID'];
767:                         }
768:                         if (isset($row_ss['Height'])) {
769:                             $rowHeight = $row_ss['Height'];
770: //                          echo '<b>Setting row height to '.$rowHeight.'</b><br />';
771:                             $objPHPExcel->getActiveSheet()->getRowDimension($rowID)->setRowHeight($rowHeight);
772:                         }
773:                     }
774: 
775:                     ++$rowID;
776:                 }
777:             }
778:             ++$worksheetID;
779:         }
780: 
781:         // Return
782:         return $objPHPExcel;
783:     }
784: 
785: 
786:     private static function _convertStringEncoding($string,$charset) {
787:         if ($charset != 'UTF-8') {
788:             return PHPExcel_Shared_String::ConvertEncoding($string,'UTF-8',$charset);
789:         }
790:         return $string;
791:     }
792: 
793: 
794:     private function _parseRichText($is = '') {
795:         $value = new PHPExcel_RichText();
796: 
797:         $value->createText(self::_convertStringEncoding($is,$this->_charSet));
798: 
799:         return $value;
800:     }
801: 
802: }
803: 
Autene API documentation generated by ApiGen