update PHP Excel

This commit is contained in:
2015-12-25 20:30:06 +01:00
parent 6bfd90b66e
commit b97433319a
258 changed files with 88877 additions and 81592 deletions

0
ZETAS para Clara.xlsx → files/ZETAS para Clara.xlsx Executable file → Normal file
View File

91
files/zetas.csv Normal file
View File

@@ -0,0 +1,91 @@
Z13482;Disco identificación;alfa-glucosidasa
Z01086;Disco antibiograma;amikacina 30µg
EN CURSO;Disco antibiograma;amoxicilina 2µg + aci.clavulánico 1µg
Z01087;Disco antibiograma;amoxicilina 20µg + aci.clavulánico 10µg
Z01088;Disco antibiograma;ampicilina 10µg
Z01089;Disco antibiograma;ampicilina 10µg + sulbactam 10µg
EN CURSO;Disco antibiograma;ampicilina 2µg
Z10620;Disco antibiograma;azitromicina 15µg
Z10164;Disco antibiograma;aztreonam 30µg
Z01208;Disco antibiograma;bacitracina
Z13483;Disco identificación;beta-glucosidasa
Z01090;Disco antibiograma;cefalotina 30µg
Z01091;Disco antibiograma;cefazolina 30 µg
Z01092;Disco antibiograma;cefepima 30µg
Z10168;Disco antibiograma;cefixima 5µg
Z01093;Disco antibiograma;cefotaxima 30µg
EN CURSO;Disco antibiograma;cefotaxima 5µg
Z01095;Disco antibiograma;cefoxitina 30µg
EN CURSO;Disco antibiograma;ceftazidima 10µg
Z01097;Disco antibiograma;ceftazidima 30µg
Z02135;Disco antibiograma;ceftriaxona 30µg
Z01098;Disco antibiograma;cefuroxima 30µg
Z01099;Disco antibiograma;ciprofloxacino 5µg
Z01100;Disco antibiograma;claritromicina 15µg
Z01101;Disco antibiograma;clindamicina 2µg
Z01102;Disco antibiograma;cloranfenicol 30µg
Z10178;Disco antibiograma;colistina 10µg
Z01104;Disco antibiograma;doxiciclina 30µg
Z01105;Disco antibiograma;eritromicina 15µg
EN CURSO;Disco antibiograma;ertapenem 10µg
Z11950;Disco antibiograma;estreptomicina 500µg
Z10349;Disco antibiograma;factor V
Z10122;Disco identificación;Vibrio spp. (0129)
Z10350;Disco antibiograma;factor X
Z10352;Disco antibiograma;factor X+V
Z10621;Disco antibiograma;fosfomicina 200µg
Z12847;Disco antibiograma;furazolidona
EN CURSO;Disco antibiograma;gentamicina (alto nivel de resistencia) 30µg
Z01109;Disco antibiograma;gentamicina 10µg
Z01110;Disco antibiograma;imipenem 10µg
Z14262;Disco identificación;leucina aminopeptidasa
Z02144;Disco antibiograma;levofloxacino 5µg
Z63633;Disco antibiograma;linezolid 10µg
Z03107;Disco antibiograma;meropenem 10µg
Z139091;Disco antibiograma;minociclina
Z23448;Disco antibiograma;mupirocina 5µg
Z10160;Disco antibiograma;nalidíxico (ácido) 30µg
Z06325;Disco antibiograma;netilmicina 30µg
Z02136;Disco antibiograma;niitrofurantoína 300µg
Z01112;Disco antibiograma;nitrocefina 30µg
Z06326;Disco antibiograma;norfloxacino 10µg
Z10181;Disco antibiograma;novobiocina 5µg
Z01114;Disco antibiograma;oxacilina 1µg
Z06379;Disco identificación;ONPG
Z01216;Disco antibiograma;optoquina
Z01116;Disco antibiograma;penicilina 10 unidades
Z01117;Disco antibiograma;piperacilina 100µg
Z10182;Disco antibiograma;piperacilina 75mg + tazobactam 10µg
Z00672;Disco antibiograma;quinupristina + dalfopristina 15µg
Z10185;Disco antibiograma;rifampicina 5µg
Z01122;Disco antibiograma;teicoplanina 30µg
Z23676;Disco antibiograma;telitromicina 15µg
Z10188;Disco antibiograma;tetraciclina 30µg
Z01125;Disco antibiograma;ticarcilina 75µg
Z01126;Disco antibiograma;tobramicina 10µg
Z01127;Disco antibiograma;trimetoprim sullfametoxazol 23,75µg
Z01128;Disco antibiograma;vancomicina 30µg
Z10247;Tira CMI;amoxicilina/ac. clavulanico (XL) 0,016-256µg/ml
Z10246;Tira CMI;ampicilina (AM) 0,016-256µg/ml
Z10248;Tira CMI;azitromicina (AZ) 0,016-256µg/ml
Z10249;Tira CMI;benzilpenicilina (PG) 0,016-256µg/ml
Z11547;Tira CMI;cefepima/ac. Clavulánico (PM/PML) 0,25-16µg/ml
Z01163;Tira CMI;cefotaxima (CT) 0,016-256µg/ml
Z10266;Tira CMI;ciprofloxacina (CL) 0,002-32µg/ml
Z10268;Tira CMI;clindamicina (CM) 0,016-256µg/ml
Z10265;Tira CMI;cloranfenicol (CL) 0,016-256µg/ml
Z11051;Tira CMI;colistina (CO) 0,016-256µg/ml
Z124676;Tira CMI;daptomicina (DPC) 0,016-256µg/ml
Z10269;Tira CMI;eritromicina (EM) 0,016-256µg/ml
Z10254;Tira CMI;imipenem (IP) 0,002-32µg/ml
Z11182;Tira CMI;imipenem/EDTA (IP/IPL) 320µg/ml
Z10255;Tira CMI;levofloxacina (LE) 0,002-32µg/ml
Z09644;Tira CMI;linezolid (LI) 0,016-256µg/ml
Z10256;Tira CMI;meropenem (MP) 0,002-32µg/ml
Z10257;Tira CMI;metronidazol (MZ) 0,016-256µg/ml
Z10262;Tira CMI;Piperacilina-Tazobactam (PTc) 0,016-256µg/ml
Z10263;Tira CMI;rifampicina (RI) 0,002-32µg/ml
Z10276;Tira CMI;teicoplanina (TP) 0,016-256µg/ml
Z98141;Tira CMI;tigeciclina (TGC) 0,016-256µg/ml
Z136146;Tira CMI;trimetoprim-sufometoxazol (TS) 0,002-32µg/ml
Z10280;Tira CMI;vancomicina (VA) 0,016-256µg/ml
1 Z13482 Disco identificación alfa-glucosidasa
2 Z01086 Disco antibiograma amikacina 30µg
3 EN CURSO Disco antibiograma amoxicilina 2µg + aci.clavulánico 1µg
4 Z01087 Disco antibiograma amoxicilina 20µg + aci.clavulánico 10µg
5 Z01088 Disco antibiograma ampicilina 10µg
6 Z01089 Disco antibiograma ampicilina 10µg + sulbactam 10µg
7 EN CURSO Disco antibiograma ampicilina 2µg
8 Z10620 Disco antibiograma azitromicina 15µg
9 Z10164 Disco antibiograma aztreonam 30µg
10 Z01208 Disco antibiograma bacitracina
11 Z13483 Disco identificación beta-glucosidasa
12 Z01090 Disco antibiograma cefalotina 30µg
13 Z01091 Disco antibiograma cefazolina 30 µg
14 Z01092 Disco antibiograma cefepima 30µg
15 Z10168 Disco antibiograma cefixima 5µg
16 Z01093 Disco antibiograma cefotaxima 30µg
17 EN CURSO Disco antibiograma cefotaxima 5µg
18 Z01095 Disco antibiograma cefoxitina 30µg
19 EN CURSO Disco antibiograma ceftazidima 10µg
20 Z01097 Disco antibiograma ceftazidima 30µg
21 Z02135 Disco antibiograma ceftriaxona 30µg
22 Z01098 Disco antibiograma cefuroxima 30µg
23 Z01099 Disco antibiograma ciprofloxacino 5µg
24 Z01100 Disco antibiograma claritromicina 15µg
25 Z01101 Disco antibiograma clindamicina 2µg
26 Z01102 Disco antibiograma cloranfenicol 30µg
27 Z10178 Disco antibiograma colistina 10µg
28 Z01104 Disco antibiograma doxiciclina 30µg
29 Z01105 Disco antibiograma eritromicina 15µg
30 EN CURSO Disco antibiograma ertapenem 10µg
31 Z11950 Disco antibiograma estreptomicina 500µg
32 Z10349 Disco antibiograma factor V
33 Z10122 Disco identificación Vibrio spp. (0129)
34 Z10350 Disco antibiograma factor X
35 Z10352 Disco antibiograma factor X+V
36 Z10621 Disco antibiograma fosfomicina 200µg
37 Z12847 Disco antibiograma furazolidona
38 EN CURSO Disco antibiograma gentamicina (alto nivel de resistencia) 30µg
39 Z01109 Disco antibiograma gentamicina 10µg
40 Z01110 Disco antibiograma imipenem 10µg
41 Z14262 Disco identificación leucina aminopeptidasa
42 Z02144 Disco antibiograma levofloxacino 5µg
43 Z63633 Disco antibiograma linezolid 10µg
44 Z03107 Disco antibiograma meropenem 10µg
45 Z139091 Disco antibiograma minociclina
46 Z23448 Disco antibiograma mupirocina 5µg
47 Z10160 Disco antibiograma nalidíxico (ácido) 30µg
48 Z06325 Disco antibiograma netilmicina 30µg
49 Z02136 Disco antibiograma niitrofurantoína 300µg
50 Z01112 Disco antibiograma nitrocefina 30µg
51 Z06326 Disco antibiograma norfloxacino 10µg
52 Z10181 Disco antibiograma novobiocina 5µg
53 Z01114 Disco antibiograma oxacilina 1µg
54 Z06379 Disco identificación ONPG
55 Z01216 Disco antibiograma optoquina
56 Z01116 Disco antibiograma penicilina 10 unidades
57 Z01117 Disco antibiograma piperacilina 100µg
58 Z10182 Disco antibiograma piperacilina 75mg + tazobactam 10µg
59 Z00672 Disco antibiograma quinupristina + dalfopristina 15µg
60 Z10185 Disco antibiograma rifampicina 5µg
61 Z01122 Disco antibiograma teicoplanina 30µg
62 Z23676 Disco antibiograma telitromicina 15µg
63 Z10188 Disco antibiograma tetraciclina 30µg
64 Z01125 Disco antibiograma ticarcilina 75µg
65 Z01126 Disco antibiograma tobramicina 10µg
66 Z01127 Disco antibiograma trimetoprim sullfametoxazol 23,75µg
67 Z01128 Disco antibiograma vancomicina 30µg
68 Z10247 Tira CMI amoxicilina/ac. clavulanico (XL) 0,016-256µg/ml
69 Z10246 Tira CMI ampicilina (AM) 0,016-256µg/ml
70 Z10248 Tira CMI azitromicina (AZ) 0,016-256µg/ml
71 Z10249 Tira CMI benzilpenicilina (PG) 0,016-256µg/ml
72 Z11547 Tira CMI cefepima/ac. Clavulánico (PM/PML) 0,25-16µg/ml
73 Z01163 Tira CMI cefotaxima (CT) 0,016-256µg/ml
74 Z10266 Tira CMI ciprofloxacina (CL) 0,002-32µg/ml
75 Z10268 Tira CMI clindamicina (CM) 0,016-256µg/ml
76 Z10265 Tira CMI cloranfenicol (CL) 0,016-256µg/ml
77 Z11051 Tira CMI colistina (CO) 0,016-256µg/ml
78 Z124676 Tira CMI daptomicina (DPC) 0,016-256µg/ml
79 Z10269 Tira CMI eritromicina (EM) 0,016-256µg/ml
80 Z10254 Tira CMI imipenem (IP) 0,002-32µg/ml
81 Z11182 Tira CMI imipenem/EDTA (IP/IPL) 320µg/ml
82 Z10255 Tira CMI levofloxacina (LE) 0,002-32µg/ml
83 Z09644 Tira CMI linezolid (LI) 0,016-256µg/ml
84 Z10256 Tira CMI meropenem (MP) 0,002-32µg/ml
85 Z10257 Tira CMI metronidazol (MZ) 0,016-256µg/ml
86 Z10262 Tira CMI Piperacilina-Tazobactam (PTc) 0,016-256µg/ml
87 Z10263 Tira CMI rifampicina (RI) 0,002-32µg/ml
88 Z10276 Tira CMI teicoplanina (TP) 0,016-256µg/ml
89 Z98141 Tira CMI tigeciclina (TGC) 0,016-256µg/ml
90 Z136146 Tira CMI trimetoprim-sufometoxazol (TS) 0,002-32µg/ml
91 Z10280 Tira CMI vancomicina (VA) 0,016-256µg/ml

BIN
images/favicon.ico Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 97 KiB

BIN
images/logo_solo.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.2 KiB

BIN
images/logo_solo_70.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.3 KiB

View File

@@ -1,8 +1,19 @@
<?php <?php
PHPExcel_Autoloader::register();
// As we always try to run the autoloader before anything else, we can use it to do a few
// simple checks and initialisations
//PHPExcel_Shared_ZipStreamWrapper::register();
// check mbstring.func_overload
if (ini_get('mbstring.func_overload') & 2) {
throw new PHPExcel_Exception('Multibyte function overloading in PHP must be disabled for string functions (2).');
}
PHPExcel_Shared_String::buildCharacterSets();
/** /**
* PHPExcel * PHPExcel
* *
* Copyright (c) 2006 - 2014 PHPExcel * Copyright (c) 2006 - 2015 PHPExcel
* *
* This library is free software; you can redistribute it and/or * This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public * modify it under the terms of the GNU Lesser General Public
@@ -20,28 +31,9 @@
* *
* @category PHPExcel * @category PHPExcel
* @package PHPExcel * @package PHPExcel
* @copyright Copyright (c) 2006 - 2014 PHPExcel (http://www.codeplex.com/PHPExcel) * @copyright Copyright (c) 2006 - 2015 PHPExcel (http://www.codeplex.com/PHPExcel)
* @license http://www.gnu.org/licenses/old-licenses/lgpl-2.1.txt LGPL * @license http://www.gnu.org/licenses/old-licenses/lgpl-2.1.txt LGPL
* @version 1.8.0, 2014-03-02 * @version ##VERSION##, ##DATE##
*/
PHPExcel_Autoloader::Register();
// As we always try to run the autoloader before anything else, we can use it to do a few
// simple checks and initialisations
//PHPExcel_Shared_ZipStreamWrapper::register();
// check mbstring.func_overload
if (ini_get('mbstring.func_overload') & 2) {
throw new PHPExcel_Exception('Multibyte function overloading in PHP must be disabled for string functions (2).');
}
PHPExcel_Shared_String::buildCharacterSets();
/**
* PHPExcel_Autoloader
*
* @category PHPExcel
* @package PHPExcel
* @copyright Copyright (c) 2006 - 2014 PHPExcel (http://www.codeplex.com/PHPExcel)
*/ */
class PHPExcel_Autoloader class PHPExcel_Autoloader
{ {
@@ -49,37 +41,41 @@ class PHPExcel_Autoloader
* Register the Autoloader with SPL * Register the Autoloader with SPL
* *
*/ */
public static function Register() { public static function register()
{
if (function_exists('__autoload')) { if (function_exists('__autoload')) {
// Register any existing autoloader function with SPL, so we don't get any clashes // Register any existing autoloader function with SPL, so we don't get any clashes
spl_autoload_register('__autoload'); spl_autoload_register('__autoload');
} }
// Register ourselves with SPL // Register ourselves with SPL
return spl_autoload_register(array('PHPExcel_Autoloader', 'Load')); if (version_compare(PHP_VERSION, '5.3.0') >= 0) {
} // function Register() return spl_autoload_register(array('PHPExcel_Autoloader', 'load'), true, true);
} else {
return spl_autoload_register(array('PHPExcel_Autoloader', 'load'));
}
}
/** /**
* Autoload a class identified by name * Autoload a class identified by name
* *
* @param string $pClassName Name of the object to load * @param string $pClassName Name of the object to load
*/ */
public static function Load($pClassName){ public static function load($pClassName)
if ((class_exists($pClassName,FALSE)) || (strpos($pClassName, 'PHPExcel') !== 0)) { {
if ((class_exists($pClassName, false)) || (strpos($pClassName, 'PHPExcel') !== 0)) {
// Either already loaded, or not a PHPExcel class request // Either already loaded, or not a PHPExcel class request
return FALSE; return false;
} }
$pClassFilePath = PHPEXCEL_ROOT . $pClassFilePath = PHPEXCEL_ROOT .
str_replace('_',DIRECTORY_SEPARATOR,$pClassName) . str_replace('_', DIRECTORY_SEPARATOR, $pClassName) .
'.php'; '.php';
if ((file_exists($pClassFilePath) === FALSE) || (is_readable($pClassFilePath) === FALSE)) { if ((file_exists($pClassFilePath) === false) || (is_readable($pClassFilePath) === false)) {
// Can't load // Can't load
return FALSE; return false;
} }
require($pClassFilePath); require($pClassFilePath);
} // function Load() }
} }

View File

@@ -1,8 +1,9 @@
<?php <?php
/** /**
* PHPExcel * PHPExcel_CachedObjectStorage_APC
* *
* Copyright (c) 2006 - 2014 PHPExcel * Copyright (c) 2006 - 2015 PHPExcel
* *
* This library is free software; you can redistribute it and/or * This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public * modify it under the terms of the GNU Lesser General Public
@@ -20,28 +21,19 @@
* *
* @category PHPExcel * @category PHPExcel
* @package PHPExcel_CachedObjectStorage * @package PHPExcel_CachedObjectStorage
* @copyright Copyright (c) 2006 - 2014 PHPExcel (http://www.codeplex.com/PHPExcel) * @copyright Copyright (c) 2006 - 2015 PHPExcel (http://www.codeplex.com/PHPExcel)
* @license http://www.gnu.org/licenses/old-licenses/lgpl-2.1.txt LGPL * @license http://www.gnu.org/licenses/old-licenses/lgpl-2.1.txt LGPL
* @version 1.8.0, 2014-03-02 * @version ##VERSION##, ##DATE##
*/ */
class PHPExcel_CachedObjectStorage_APC extends PHPExcel_CachedObjectStorage_CacheBase implements PHPExcel_CachedObjectStorage_ICache
{
/**
* PHPExcel_CachedObjectStorage_APC
*
* @category PHPExcel
* @package PHPExcel_CachedObjectStorage
* @copyright Copyright (c) 2006 - 2014 PHPExcel (http://www.codeplex.com/PHPExcel)
*/
class PHPExcel_CachedObjectStorage_APC extends PHPExcel_CachedObjectStorage_CacheBase implements PHPExcel_CachedObjectStorage_ICache {
/** /**
* Prefix used to uniquely identify cache data for this worksheet * Prefix used to uniquely identify cache data for this worksheet
* *
* @access private * @access private
* @var string * @var string
*/ */
private $_cachePrefix = null; private $cachePrefix = null;
/** /**
* Cache timeout * Cache timeout
@@ -49,8 +41,7 @@ class PHPExcel_CachedObjectStorage_APC extends PHPExcel_CachedObjectStorage_Cach
* @access private * @access private
* @var integer * @var integer
*/ */
private $_cacheTime = 600; private $cacheTime = 600;
/** /**
* Store cell data in cache for the current cell object if it's "dirty", * Store cell data in cache for the current cell object if it's "dirty",
@@ -60,19 +51,23 @@ class PHPExcel_CachedObjectStorage_APC extends PHPExcel_CachedObjectStorage_Cach
* @return void * @return void
* @throws PHPExcel_Exception * @throws PHPExcel_Exception
*/ */
protected function _storeData() { protected function storeData()
if ($this->_currentCellIsDirty && !empty($this->_currentObjectID)) { {
$this->_currentObject->detach(); if ($this->currentCellIsDirty && !empty($this->currentObjectID)) {
$this->currentObject->detach();
if (!apc_store($this->_cachePrefix.$this->_currentObjectID.'.cache',serialize($this->_currentObject),$this->_cacheTime)) { if (!apc_store(
$this->cachePrefix . $this->currentObjectID . '.cache',
serialize($this->currentObject),
$this->cacheTime
)) {
$this->__destruct(); $this->__destruct();
throw new PHPExcel_Exception('Failed to store cell '.$this->_currentObjectID.' in APC'); throw new PHPExcel_Exception('Failed to store cell ' . $this->currentObjectID . ' in APC');
} }
$this->_currentCellIsDirty = false; $this->currentCellIsDirty = false;
}
$this->currentObjectID = $this->currentObject = null;
} }
$this->_currentObjectID = $this->_currentObject = null;
} // function _storeData()
/** /**
* Add or Update a cell in cache identified by coordinate address * Add or Update a cell in cache identified by coordinate address
@@ -80,40 +75,41 @@ class PHPExcel_CachedObjectStorage_APC extends PHPExcel_CachedObjectStorage_Cach
* @access public * @access public
* @param string $pCoord Coordinate address of the cell to update * @param string $pCoord Coordinate address of the cell to update
* @param PHPExcel_Cell $cell Cell to update * @param PHPExcel_Cell $cell Cell to update
* @return void * @return PHPExcel_Cell
* @throws PHPExcel_Exception * @throws PHPExcel_Exception
*/ */
public function addCacheData($pCoord, PHPExcel_Cell $cell) { public function addCacheData($pCoord, PHPExcel_Cell $cell)
if (($pCoord !== $this->_currentObjectID) && ($this->_currentObjectID !== null)) { {
$this->_storeData(); if (($pCoord !== $this->currentObjectID) && ($this->currentObjectID !== null)) {
$this->storeData();
} }
$this->_cellCache[$pCoord] = true; $this->cellCache[$pCoord] = true;
$this->_currentObjectID = $pCoord; $this->currentObjectID = $pCoord;
$this->_currentObject = $cell; $this->currentObject = $cell;
$this->_currentCellIsDirty = true; $this->currentCellIsDirty = true;
return $cell; return $cell;
} // function addCacheData() }
/** /**
* Is a value set in the current PHPExcel_CachedObjectStorage_ICache for an indexed cell? * Is a value set in the current PHPExcel_CachedObjectStorage_ICache for an indexed cell?
* *
* @access public * @access public
* @param string $pCoord Coordinate address of the cell to check * @param string $pCoord Coordinate address of the cell to check
* @return void * @throws PHPExcel_Exception
* @return boolean * @return boolean
*/ */
public function isDataSet($pCoord) { public function isDataSet($pCoord)
{
// Check if the requested entry is the current object, or exists in the cache // Check if the requested entry is the current object, or exists in the cache
if (parent::isDataSet($pCoord)) { if (parent::isDataSet($pCoord)) {
if ($this->_currentObjectID == $pCoord) { if ($this->currentObjectID == $pCoord) {
return true; return true;
} }
// Check if the requested entry still exists in apc // Check if the requested entry still exists in apc
$success = apc_fetch($this->_cachePrefix.$pCoord.'.cache'); $success = apc_fetch($this->cachePrefix.$pCoord.'.cache');
if ($success === FALSE) { if ($success === false) {
// Entry no longer exists in APC, so clear it from the cache array // Entry no longer exists in APC, so clear it from the cache array
parent::deleteCacheData($pCoord); parent::deleteCacheData($pCoord);
throw new PHPExcel_Exception('Cell entry '.$pCoord.' no longer exists in APC cache'); throw new PHPExcel_Exception('Cell entry '.$pCoord.' no longer exists in APC cache');
@@ -121,8 +117,7 @@ class PHPExcel_CachedObjectStorage_APC extends PHPExcel_CachedObjectStorage_Cach
return true; return true;
} }
return false; return false;
} // function isDataSet() }
/** /**
* Get cell at a specific coordinate * Get cell at a specific coordinate
@@ -132,16 +127,17 @@ class PHPExcel_CachedObjectStorage_APC extends PHPExcel_CachedObjectStorage_Cach
* @throws PHPExcel_Exception * @throws PHPExcel_Exception
* @return PHPExcel_Cell Cell that was found, or null if not found * @return PHPExcel_Cell Cell that was found, or null if not found
*/ */
public function getCacheData($pCoord) { public function getCacheData($pCoord)
if ($pCoord === $this->_currentObjectID) { {
return $this->_currentObject; if ($pCoord === $this->currentObjectID) {
return $this->currentObject;
} }
$this->_storeData(); $this->storeData();
// Check if the entry that has been requested actually exists // Check if the entry that has been requested actually exists
if (parent::isDataSet($pCoord)) { if (parent::isDataSet($pCoord)) {
$obj = apc_fetch($this->_cachePrefix.$pCoord.'.cache'); $obj = apc_fetch($this->cachePrefix . $pCoord . '.cache');
if ($obj === FALSE) { if ($obj === false) {
// Entry no longer exists in APC, so clear it from the cache array // Entry no longer exists in APC, so clear it from the cache array
parent::deleteCacheData($pCoord); parent::deleteCacheData($pCoord);
throw new PHPExcel_Exception('Cell entry '.$pCoord.' no longer exists in APC cache'); throw new PHPExcel_Exception('Cell entry '.$pCoord.' no longer exists in APC cache');
@@ -152,30 +148,29 @@ class PHPExcel_CachedObjectStorage_APC extends PHPExcel_CachedObjectStorage_Cach
} }
// Set current entry to the requested entry // Set current entry to the requested entry
$this->_currentObjectID = $pCoord; $this->currentObjectID = $pCoord;
$this->_currentObject = unserialize($obj); $this->currentObject = unserialize($obj);
// Re-attach this as the cell's parent // Re-attach this as the cell's parent
$this->_currentObject->attach($this); $this->currentObject->attach($this);
// Return requested entry // Return requested entry
return $this->_currentObject; return $this->currentObject;
} // function getCacheData() }
/** /**
* Get a list of all cell addresses currently held in cache * Get a list of all cell addresses currently held in cache
* *
* @return array of string * @return string[]
*/ */
public function getCellList() { public function getCellList()
if ($this->_currentObjectID !== null) { {
$this->_storeData(); if ($this->currentObjectID !== null) {
$this->storeData();
} }
return parent::getCellList(); return parent::getCellList();
} }
/** /**
* Delete a cell in cache identified by coordinate address * Delete a cell in cache identified by coordinate address
* *
@@ -183,14 +178,14 @@ class PHPExcel_CachedObjectStorage_APC extends PHPExcel_CachedObjectStorage_Cach
* @param string $pCoord Coordinate address of the cell to delete * @param string $pCoord Coordinate address of the cell to delete
* @throws PHPExcel_Exception * @throws PHPExcel_Exception
*/ */
public function deleteCacheData($pCoord) { public function deleteCacheData($pCoord)
{
// Delete the entry from APC // Delete the entry from APC
apc_delete($this->_cachePrefix.$pCoord.'.cache'); apc_delete($this->cachePrefix.$pCoord.'.cache');
// Delete the entry from our cell address array // Delete the entry from our cell address array
parent::deleteCacheData($pCoord); parent::deleteCacheData($pCoord);
} // function deleteCacheData() }
/** /**
* Clone the cell collection * Clone the cell collection
@@ -200,50 +195,50 @@ class PHPExcel_CachedObjectStorage_APC extends PHPExcel_CachedObjectStorage_Cach
* @throws PHPExcel_Exception * @throws PHPExcel_Exception
* @return void * @return void
*/ */
public function copyCellCollection(PHPExcel_Worksheet $parent) { public function copyCellCollection(PHPExcel_Worksheet $parent)
{
parent::copyCellCollection($parent); parent::copyCellCollection($parent);
// Get a new id for the new file name // Get a new id for the new file name
$baseUnique = $this->_getUniqueID(); $baseUnique = $this->getUniqueID();
$newCachePrefix = substr(md5($baseUnique),0,8).'.'; $newCachePrefix = substr(md5($baseUnique), 0, 8) . '.';
$cacheList = $this->getCellList(); $cacheList = $this->getCellList();
foreach($cacheList as $cellID) { foreach ($cacheList as $cellID) {
if ($cellID != $this->_currentObjectID) { if ($cellID != $this->currentObjectID) {
$obj = apc_fetch($this->_cachePrefix.$cellID.'.cache'); $obj = apc_fetch($this->cachePrefix . $cellID . '.cache');
if ($obj === FALSE) { if ($obj === false) {
// Entry no longer exists in APC, so clear it from the cache array // Entry no longer exists in APC, so clear it from the cache array
parent::deleteCacheData($cellID); parent::deleteCacheData($cellID);
throw new PHPExcel_Exception('Cell entry '.$cellID.' no longer exists in APC'); throw new PHPExcel_Exception('Cell entry ' . $cellID . ' no longer exists in APC');
} }
if (!apc_store($newCachePrefix.$cellID.'.cache',$obj,$this->_cacheTime)) { if (!apc_store($newCachePrefix . $cellID . '.cache', $obj, $this->cacheTime)) {
$this->__destruct(); $this->__destruct();
throw new PHPExcel_Exception('Failed to store cell '.$cellID.' in APC'); throw new PHPExcel_Exception('Failed to store cell ' . $cellID . ' in APC');
} }
} }
} }
$this->_cachePrefix = $newCachePrefix; $this->cachePrefix = $newCachePrefix;
} // function copyCellCollection() }
/** /**
* Clear the cell collection and disconnect from our parent * Clear the cell collection and disconnect from our parent
* *
* @return void * @return void
*/ */
public function unsetWorksheetCells() { public function unsetWorksheetCells()
if ($this->_currentObject !== NULL) { {
$this->_currentObject->detach(); if ($this->currentObject !== null) {
$this->_currentObject = $this->_currentObjectID = null; $this->currentObject->detach();
$this->currentObject = $this->currentObjectID = null;
} }
// Flush the APC cache // Flush the APC cache
$this->__destruct(); $this->__destruct();
$this->_cellCache = array(); $this->cellCache = array();
// detach ourself from the worksheet, so that it can then delete this object successfully // detach ourself from the worksheet, so that it can then delete this object successfully
$this->_parent = null; $this->parent = null;
} // function unsetWorksheetCells() }
/** /**
* Initialise this new cell collection * Initialise this new cell collection
@@ -251,29 +246,29 @@ class PHPExcel_CachedObjectStorage_APC extends PHPExcel_CachedObjectStorage_Cach
* @param PHPExcel_Worksheet $parent The worksheet for this cell collection * @param PHPExcel_Worksheet $parent The worksheet for this cell collection
* @param array of mixed $arguments Additional initialisation arguments * @param array of mixed $arguments Additional initialisation arguments
*/ */
public function __construct(PHPExcel_Worksheet $parent, $arguments) { public function __construct(PHPExcel_Worksheet $parent, $arguments)
{
$cacheTime = (isset($arguments['cacheTime'])) ? $arguments['cacheTime'] : 600; $cacheTime = (isset($arguments['cacheTime'])) ? $arguments['cacheTime'] : 600;
if ($this->_cachePrefix === NULL) { if ($this->cachePrefix === null) {
$baseUnique = $this->_getUniqueID(); $baseUnique = $this->getUniqueID();
$this->_cachePrefix = substr(md5($baseUnique),0,8).'.'; $this->cachePrefix = substr(md5($baseUnique), 0, 8) . '.';
$this->_cacheTime = $cacheTime; $this->cacheTime = $cacheTime;
parent::__construct($parent); parent::__construct($parent);
} }
} // function __construct() }
/** /**
* Destroy this cell collection * Destroy this cell collection
*/ */
public function __destruct() { public function __destruct()
{
$cacheList = $this->getCellList(); $cacheList = $this->getCellList();
foreach($cacheList as $cellID) { foreach ($cacheList as $cellID) {
apc_delete($this->_cachePrefix.$cellID.'.cache'); apc_delete($this->cachePrefix . $cellID . '.cache');
}
} }
} // function __destruct()
/** /**
* Identify whether the caching method is currently available * Identify whether the caching method is currently available
@@ -281,15 +276,15 @@ class PHPExcel_CachedObjectStorage_APC extends PHPExcel_CachedObjectStorage_Cach
* *
* @return boolean * @return boolean
*/ */
public static function cacheMethodIsAvailable() { public static function cacheMethodIsAvailable()
{
if (!function_exists('apc_store')) { if (!function_exists('apc_store')) {
return FALSE; return false;
} }
if (apc_sma_info() === FALSE) { if (apc_sma_info() === false) {
return FALSE; return false;
} }
return TRUE; return true;
} }
} }

View File

@@ -1,8 +1,9 @@
<?php <?php
/** /**
* PHPExcel * PHPExcel_CachedObjectStorage_CacheBase
* *
* Copyright (c) 2006 - 2014 PHPExcel * Copyright (c) 2006 - 2015 PHPExcel
* *
* This library is free software; you can redistribute it and/or * This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public * modify it under the terms of the GNU Lesser General Public
@@ -20,49 +21,39 @@
* *
* @category PHPExcel * @category PHPExcel
* @package PHPExcel_CachedObjectStorage * @package PHPExcel_CachedObjectStorage
* @copyright Copyright (c) 2006 - 2014 PHPExcel (http://www.codeplex.com/PHPExcel) * @copyright Copyright (c) 2006 - 2015 PHPExcel (http://www.codeplex.com/PHPExcel)
* @license http://www.gnu.org/licenses/old-licenses/lgpl-2.1.txt LGPL * @license http://www.gnu.org/licenses/old-licenses/lgpl-2.1.txt LGPL
* @version 1.8.0, 2014-03-02 * @version ##VERSION##, ##DATE##
*/ */
abstract class PHPExcel_CachedObjectStorage_CacheBase
{
/**
* PHPExcel_CachedObjectStorage_CacheBase
*
* @category PHPExcel
* @package PHPExcel_CachedObjectStorage
* @copyright Copyright (c) 2006 - 2014 PHPExcel (http://www.codeplex.com/PHPExcel)
*/
abstract class PHPExcel_CachedObjectStorage_CacheBase {
/** /**
* Parent worksheet * Parent worksheet
* *
* @var PHPExcel_Worksheet * @var PHPExcel_Worksheet
*/ */
protected $_parent; protected $parent;
/** /**
* The currently active Cell * The currently active Cell
* *
* @var PHPExcel_Cell * @var PHPExcel_Cell
*/ */
protected $_currentObject = null; protected $currentObject = null;
/** /**
* Coordinate address of the currently active Cell * Coordinate address of the currently active Cell
* *
* @var string * @var string
*/ */
protected $_currentObjectID = null; protected $currentObjectID = null;
/** /**
* Flag indicating whether the currently active Cell requires saving * Flag indicating whether the currently active Cell requires saving
* *
* @var boolean * @var boolean
*/ */
protected $_currentCellIsDirty = true; protected $currentCellIsDirty = true;
/** /**
* An array of cells or cell pointers for the worksheet cells held in this cache, * An array of cells or cell pointers for the worksheet cells held in this cache,
@@ -70,21 +61,20 @@ abstract class PHPExcel_CachedObjectStorage_CacheBase {
* *
* @var array of mixed * @var array of mixed
*/ */
protected $_cellCache = array(); protected $cellCache = array();
/** /**
* Initialise this new cell collection * Initialise this new cell collection
* *
* @param PHPExcel_Worksheet $parent The worksheet for this cell collection * @param PHPExcel_Worksheet $parent The worksheet for this cell collection
*/ */
public function __construct(PHPExcel_Worksheet $parent) { public function __construct(PHPExcel_Worksheet $parent)
{
// Set our parent worksheet. // Set our parent worksheet.
// This is maintained within the cache controller to facilitate re-attaching it to PHPExcel_Cell objects when // This is maintained within the cache controller to facilitate re-attaching it to PHPExcel_Cell objects when
// they are woken from a serialized state // they are woken from a serialized state
$this->_parent = $parent; $this->parent = $parent;
} // function __construct() }
/** /**
* Return the parent worksheet for this cell collection * Return the parent worksheet for this cell collection
@@ -93,7 +83,7 @@ abstract class PHPExcel_CachedObjectStorage_CacheBase {
*/ */
public function getParent() public function getParent()
{ {
return $this->_parent; return $this->parent;
} }
/** /**
@@ -102,14 +92,14 @@ abstract class PHPExcel_CachedObjectStorage_CacheBase {
* @param string $pCoord Coordinate address of the cell to check * @param string $pCoord Coordinate address of the cell to check
* @return boolean * @return boolean
*/ */
public function isDataSet($pCoord) { public function isDataSet($pCoord)
if ($pCoord === $this->_currentObjectID) { {
if ($pCoord === $this->currentObjectID) {
return true; return true;
} }
// Check if the requested entry exists in the cache // Check if the requested entry exists in the cache
return isset($this->_cellCache[$pCoord]); return isset($this->cellCache[$pCoord]);
} // function isDataSet() }
/** /**
* Move a cell object from one address to another * Move a cell object from one address to another
@@ -118,31 +108,31 @@ abstract class PHPExcel_CachedObjectStorage_CacheBase {
* @param string $toAddress Destination address of the cell to move * @param string $toAddress Destination address of the cell to move
* @return boolean * @return boolean
*/ */
public function moveCell($fromAddress, $toAddress) { public function moveCell($fromAddress, $toAddress)
if ($fromAddress === $this->_currentObjectID) { {
$this->_currentObjectID = $toAddress; if ($fromAddress === $this->currentObjectID) {
$this->currentObjectID = $toAddress;
} }
$this->_currentCellIsDirty = true; $this->currentCellIsDirty = true;
if (isset($this->_cellCache[$fromAddress])) { if (isset($this->cellCache[$fromAddress])) {
$this->_cellCache[$toAddress] = &$this->_cellCache[$fromAddress]; $this->cellCache[$toAddress] = &$this->cellCache[$fromAddress];
unset($this->_cellCache[$fromAddress]); unset($this->cellCache[$fromAddress]);
} }
return TRUE; return true;
} // function moveCell() }
/** /**
* Add or Update a cell in cache * Add or Update a cell in cache
* *
* @param PHPExcel_Cell $cell Cell to update * @param PHPExcel_Cell $cell Cell to update
* @return void * @return PHPExcel_Cell
* @throws PHPExcel_Exception * @throws PHPExcel_Exception
*/ */
public function updateCacheData(PHPExcel_Cell $cell) { public function updateCacheData(PHPExcel_Cell $cell)
return $this->addCacheData($cell->getCoordinate(),$cell); {
} // function updateCacheData() return $this->addCacheData($cell->getCoordinate(), $cell);
}
/** /**
* Delete a cell in cache identified by coordinate address * Delete a cell in cache identified by coordinate address
@@ -150,47 +140,46 @@ abstract class PHPExcel_CachedObjectStorage_CacheBase {
* @param string $pCoord Coordinate address of the cell to delete * @param string $pCoord Coordinate address of the cell to delete
* @throws PHPExcel_Exception * @throws PHPExcel_Exception
*/ */
public function deleteCacheData($pCoord) { public function deleteCacheData($pCoord)
if ($pCoord === $this->_currentObjectID) { {
$this->_currentObject->detach(); if ($pCoord === $this->currentObjectID && !is_null($this->currentObject)) {
$this->_currentObjectID = $this->_currentObject = null; $this->currentObject->detach();
$this->currentObjectID = $this->currentObject = null;
} }
if (is_object($this->_cellCache[$pCoord])) { if (is_object($this->cellCache[$pCoord])) {
$this->_cellCache[$pCoord]->detach(); $this->cellCache[$pCoord]->detach();
unset($this->_cellCache[$pCoord]); unset($this->cellCache[$pCoord]);
}
$this->currentCellIsDirty = false;
} }
$this->_currentCellIsDirty = false;
} // function deleteCacheData()
/** /**
* Get a list of all cell addresses currently held in cache * Get a list of all cell addresses currently held in cache
* *
* @return array of string * @return string[]
*/ */
public function getCellList() { public function getCellList()
return array_keys($this->_cellCache); {
} // function getCellList() return array_keys($this->cellCache);
}
/** /**
* Sort the list of all cell addresses currently held in cache by row and column * Sort the list of all cell addresses currently held in cache by row and column
* *
* @return void * @return string[]
*/ */
public function getSortedCellList() { public function getSortedCellList()
{
$sortKeys = array(); $sortKeys = array();
foreach ($this->getCellList() as $coord) { foreach ($this->getCellList() as $coord) {
sscanf($coord,'%[A-Z]%d', $column, $row); sscanf($coord, '%[A-Z]%d', $column, $row);
$sortKeys[sprintf('%09d%3s',$row,$column)] = $coord; $sortKeys[sprintf('%09d%3s', $row, $column)] = $coord;
} }
ksort($sortKeys); ksort($sortKeys);
return array_values($sortKeys); return array_values($sortKeys);
} // function sortCellList() }
/** /**
* Get highest worksheet column and highest row that have cell records * Get highest worksheet column and highest row that have cell records
@@ -203,22 +192,22 @@ abstract class PHPExcel_CachedObjectStorage_CacheBase {
$col = array('A' => '1A'); $col = array('A' => '1A');
$row = array(1); $row = array(1);
foreach ($this->getCellList() as $coord) { foreach ($this->getCellList() as $coord) {
sscanf($coord,'%[A-Z]%d', $c, $r); sscanf($coord, '%[A-Z]%d', $c, $r);
$row[$r] = $r; $row[$r] = $r;
$col[$c] = strlen($c).$c; $col[$c] = strlen($c).$c;
} }
if (!empty($row)) { if (!empty($row)) {
// Determine highest column and row // Determine highest column and row
$highestRow = max($row); $highestRow = max($row);
$highestColumn = substr(max($col),1); $highestColumn = substr(max($col), 1);
} }
return array( 'row' => $highestRow, return array(
'row' => $highestRow,
'column' => $highestColumn 'column' => $highestColumn
); );
} }
/** /**
* Return the cell address of the currently active cell object * Return the cell address of the currently active cell object
* *
@@ -226,7 +215,7 @@ abstract class PHPExcel_CachedObjectStorage_CacheBase {
*/ */
public function getCurrentAddress() public function getCurrentAddress()
{ {
return $this->_currentObjectID; return $this->currentObjectID;
} }
/** /**
@@ -236,19 +225,19 @@ abstract class PHPExcel_CachedObjectStorage_CacheBase {
*/ */
public function getCurrentColumn() public function getCurrentColumn()
{ {
sscanf($this->_currentObjectID, '%[A-Z]%d', $column, $row); sscanf($this->currentObjectID, '%[A-Z]%d', $column, $row);
return $column; return $column;
} }
/** /**
* Return the row address of the currently active cell object * Return the row address of the currently active cell object
* *
* @return string * @return integer
*/ */
public function getCurrentRow() public function getCurrentRow()
{ {
sscanf($this->_currentObjectID, '%[A-Z]%d', $column, $row); sscanf($this->currentObjectID, '%[A-Z]%d', $column, $row);
return $row; return (integer) $row;
} }
/** /**
@@ -267,7 +256,7 @@ abstract class PHPExcel_CachedObjectStorage_CacheBase {
$columnList = array(1); $columnList = array(1);
foreach ($this->getCellList() as $coord) { foreach ($this->getCellList() as $coord) {
sscanf($coord,'%[A-Z]%d', $c, $r); sscanf($coord, '%[A-Z]%d', $c, $r);
if ($r != $row) { if ($r != $row) {
continue; continue;
} }
@@ -292,7 +281,7 @@ abstract class PHPExcel_CachedObjectStorage_CacheBase {
$rowList = array(0); $rowList = array(0);
foreach ($this->getCellList() as $coord) { foreach ($this->getCellList() as $coord) {
sscanf($coord,'%[A-Z]%d', $c, $r); sscanf($coord, '%[A-Z]%d', $c, $r);
if ($c != $column) { if ($c != $column) {
continue; continue;
} }
@@ -302,19 +291,19 @@ abstract class PHPExcel_CachedObjectStorage_CacheBase {
return max($rowList); return max($rowList);
} }
/** /**
* Generate a unique ID for cache referencing * Generate a unique ID for cache referencing
* *
* @return string Unique Reference * @return string Unique Reference
*/ */
protected function _getUniqueID() { protected function getUniqueID()
{
if (function_exists('posix_getpid')) { if (function_exists('posix_getpid')) {
$baseUnique = posix_getpid(); $baseUnique = posix_getpid();
} else { } else {
$baseUnique = mt_rand(); $baseUnique = mt_rand();
} }
return uniqid($baseUnique,true); return uniqid($baseUnique, true);
} }
/** /**
@@ -323,16 +312,48 @@ abstract class PHPExcel_CachedObjectStorage_CacheBase {
* @param PHPExcel_Worksheet $parent The new worksheet * @param PHPExcel_Worksheet $parent The new worksheet
* @return void * @return void
*/ */
public function copyCellCollection(PHPExcel_Worksheet $parent) { public function copyCellCollection(PHPExcel_Worksheet $parent)
$this->_currentCellIsDirty; {
$this->_storeData(); $this->currentCellIsDirty;
$this->storeData();
$this->_parent = $parent; $this->parent = $parent;
if (($this->_currentObject !== NULL) && (is_object($this->_currentObject))) { if (($this->currentObject !== null) && (is_object($this->currentObject))) {
$this->_currentObject->attach($this); $this->currentObject->attach($this);
} }
} // function copyCellCollection() } // function copyCellCollection()
/**
* Remove a row, deleting all cells in that row
*
* @param string $row Row number to remove
* @return void
*/
public function removeRow($row)
{
foreach ($this->getCellList() as $coord) {
sscanf($coord, '%[A-Z]%d', $c, $r);
if ($r == $row) {
$this->deleteCacheData($coord);
}
}
}
/**
* Remove a column, deleting all cells in that column
*
* @param string $column Column ID to remove
* @return void
*/
public function removeColumn($column)
{
foreach ($this->getCellList() as $coord) {
sscanf($coord, '%[A-Z]%d', $c, $r);
if ($c == $column) {
$this->deleteCacheData($coord);
}
}
}
/** /**
* Identify whether the caching method is currently available * Identify whether the caching method is currently available
@@ -340,8 +361,8 @@ abstract class PHPExcel_CachedObjectStorage_CacheBase {
* *
* @return boolean * @return boolean
*/ */
public static function cacheMethodIsAvailable() { public static function cacheMethodIsAvailable()
{
return true; return true;
} }
} }

View File

@@ -1,8 +1,9 @@
<?php <?php
/** /**
* PHPExcel * PHPExcel_CachedObjectStorage_DiscISAM
* *
* Copyright (c) 2006 - 2014 PHPExcel * Copyright (c) 2006 - 2015 PHPExcel
* *
* This library is free software; you can redistribute it and/or * This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public * modify it under the terms of the GNU Lesser General Public
@@ -20,42 +21,32 @@
* *
* @category PHPExcel * @category PHPExcel
* @package PHPExcel_CachedObjectStorage * @package PHPExcel_CachedObjectStorage
* @copyright Copyright (c) 2006 - 2014 PHPExcel (http://www.codeplex.com/PHPExcel) * @copyright Copyright (c) 2006 - 2015 PHPExcel (http://www.codeplex.com/PHPExcel)
* @license http://www.gnu.org/licenses/old-licenses/lgpl-2.1.txt LGPL * @license http://www.gnu.org/licenses/old-licenses/lgpl-2.1.txt LGPL
* @version 1.8.0, 2014-03-02 * @version ##VERSION##, ##DATE##
*/ */
class PHPExcel_CachedObjectStorage_DiscISAM extends PHPExcel_CachedObjectStorage_CacheBase implements PHPExcel_CachedObjectStorage_ICache
{
/**
* PHPExcel_CachedObjectStorage_DiscISAM
*
* @category PHPExcel
* @package PHPExcel_CachedObjectStorage
* @copyright Copyright (c) 2006 - 2014 PHPExcel (http://www.codeplex.com/PHPExcel)
*/
class PHPExcel_CachedObjectStorage_DiscISAM extends PHPExcel_CachedObjectStorage_CacheBase implements PHPExcel_CachedObjectStorage_ICache {
/** /**
* Name of the file for this cache * Name of the file for this cache
* *
* @var string * @var string
*/ */
private $_fileName = NULL; private $fileName = null;
/** /**
* File handle for this cache file * File handle for this cache file
* *
* @var resource * @var resource
*/ */
private $_fileHandle = NULL; private $fileHandle = null;
/** /**
* Directory/Folder where the cache file is located * Directory/Folder where the cache file is located
* *
* @var string * @var string
*/ */
private $_cacheDirectory = NULL; private $cacheDirectory = null;
/** /**
* Store cell data in cache for the current cell object if it's "dirty", * Store cell data in cache for the current cell object if it's "dirty",
@@ -64,42 +55,42 @@ class PHPExcel_CachedObjectStorage_DiscISAM extends PHPExcel_CachedObjectStorage
* @return void * @return void
* @throws PHPExcel_Exception * @throws PHPExcel_Exception
*/ */
protected function _storeData() { protected function storeData()
if ($this->_currentCellIsDirty && !empty($this->_currentObjectID)) { {
$this->_currentObject->detach(); if ($this->currentCellIsDirty && !empty($this->currentObjectID)) {
$this->currentObject->detach();
fseek($this->_fileHandle,0,SEEK_END); fseek($this->fileHandle, 0, SEEK_END);
$offset = ftell($this->_fileHandle);
fwrite($this->_fileHandle, serialize($this->_currentObject)); $this->cellCache[$this->currentObjectID] = array(
$this->_cellCache[$this->_currentObjectID] = array('ptr' => $offset, 'ptr' => ftell($this->fileHandle),
'sz' => ftell($this->_fileHandle) - $offset 'sz' => fwrite($this->fileHandle, serialize($this->currentObject))
); );
$this->_currentCellIsDirty = false; $this->currentCellIsDirty = false;
}
$this->currentObjectID = $this->currentObject = null;
} }
$this->_currentObjectID = $this->_currentObject = null;
} // function _storeData()
/** /**
* Add or Update a cell in cache identified by coordinate address * Add or Update a cell in cache identified by coordinate address
* *
* @param string $pCoord Coordinate address of the cell to update * @param string $pCoord Coordinate address of the cell to update
* @param PHPExcel_Cell $cell Cell to update * @param PHPExcel_Cell $cell Cell to update
* @return void * @return PHPExcel_Cell
* @throws PHPExcel_Exception * @throws PHPExcel_Exception
*/ */
public function addCacheData($pCoord, PHPExcel_Cell $cell) { public function addCacheData($pCoord, PHPExcel_Cell $cell)
if (($pCoord !== $this->_currentObjectID) && ($this->_currentObjectID !== null)) { {
$this->_storeData(); if (($pCoord !== $this->currentObjectID) && ($this->currentObjectID !== null)) {
$this->storeData();
} }
$this->_currentObjectID = $pCoord; $this->currentObjectID = $pCoord;
$this->_currentObject = $cell; $this->currentObject = $cell;
$this->_currentCellIsDirty = true; $this->currentCellIsDirty = true;
return $cell; return $cell;
} // function addCacheData() }
/** /**
* Get cell at a specific coordinate * Get cell at a specific coordinate
@@ -108,82 +99,80 @@ class PHPExcel_CachedObjectStorage_DiscISAM extends PHPExcel_CachedObjectStorage
* @throws PHPExcel_Exception * @throws PHPExcel_Exception
* @return PHPExcel_Cell Cell that was found, or null if not found * @return PHPExcel_Cell Cell that was found, or null if not found
*/ */
public function getCacheData($pCoord) { public function getCacheData($pCoord)
if ($pCoord === $this->_currentObjectID) { {
return $this->_currentObject; if ($pCoord === $this->currentObjectID) {
return $this->currentObject;
} }
$this->_storeData(); $this->storeData();
// Check if the entry that has been requested actually exists // Check if the entry that has been requested actually exists
if (!isset($this->_cellCache[$pCoord])) { if (!isset($this->cellCache[$pCoord])) {
// Return null if requested entry doesn't exist in cache // Return null if requested entry doesn't exist in cache
return null; return null;
} }
// Set current entry to the requested entry // Set current entry to the requested entry
$this->_currentObjectID = $pCoord; $this->currentObjectID = $pCoord;
fseek($this->_fileHandle,$this->_cellCache[$pCoord]['ptr']); fseek($this->fileHandle, $this->cellCache[$pCoord]['ptr']);
$this->_currentObject = unserialize(fread($this->_fileHandle,$this->_cellCache[$pCoord]['sz'])); $this->currentObject = unserialize(fread($this->fileHandle, $this->cellCache[$pCoord]['sz']));
// Re-attach this as the cell's parent // Re-attach this as the cell's parent
$this->_currentObject->attach($this); $this->currentObject->attach($this);
// Return requested entry // Return requested entry
return $this->_currentObject; return $this->currentObject;
} // function getCacheData() }
/** /**
* Get a list of all cell addresses currently held in cache * Get a list of all cell addresses currently held in cache
* *
* @return array of string * @return string[]
*/ */
public function getCellList() { public function getCellList()
if ($this->_currentObjectID !== null) { {
$this->_storeData(); if ($this->currentObjectID !== null) {
$this->storeData();
} }
return parent::getCellList(); return parent::getCellList();
} }
/** /**
* Clone the cell collection * Clone the cell collection
* *
* @param PHPExcel_Worksheet $parent The new worksheet * @param PHPExcel_Worksheet $parent The new worksheet
* @return void
*/ */
public function copyCellCollection(PHPExcel_Worksheet $parent) { public function copyCellCollection(PHPExcel_Worksheet $parent)
{
parent::copyCellCollection($parent); parent::copyCellCollection($parent);
// Get a new id for the new file name // Get a new id for the new file name
$baseUnique = $this->_getUniqueID(); $baseUnique = $this->getUniqueID();
$newFileName = $this->_cacheDirectory.'/PHPExcel.'.$baseUnique.'.cache'; $newFileName = $this->cacheDirectory.'/PHPExcel.'.$baseUnique.'.cache';
// Copy the existing cell cache file // Copy the existing cell cache file
copy ($this->_fileName,$newFileName); copy($this->fileName, $newFileName);
$this->_fileName = $newFileName; $this->fileName = $newFileName;
// Open the copied cell cache file // Open the copied cell cache file
$this->_fileHandle = fopen($this->_fileName,'a+'); $this->fileHandle = fopen($this->fileName, 'a+');
} // function copyCellCollection() }
/** /**
* Clear the cell collection and disconnect from our parent * Clear the cell collection and disconnect from our parent
* *
* @return void
*/ */
public function unsetWorksheetCells() { public function unsetWorksheetCells()
if(!is_null($this->_currentObject)) { {
$this->_currentObject->detach(); if (!is_null($this->currentObject)) {
$this->_currentObject = $this->_currentObjectID = null; $this->currentObject->detach();
$this->currentObject = $this->currentObjectID = null;
} }
$this->_cellCache = array(); $this->cellCache = array();
// detach ourself from the worksheet, so that it can then delete this object successfully // detach ourself from the worksheet, so that it can then delete this object successfully
$this->_parent = null; $this->parent = null;
// Close down the temporary cache file // Close down the temporary cache file
$this->__destruct(); $this->__destruct();
} // function unsetWorksheetCells() }
/** /**
* Initialise this new cell collection * Initialise this new cell collection
@@ -191,29 +180,29 @@ class PHPExcel_CachedObjectStorage_DiscISAM extends PHPExcel_CachedObjectStorage
* @param PHPExcel_Worksheet $parent The worksheet for this cell collection * @param PHPExcel_Worksheet $parent The worksheet for this cell collection
* @param array of mixed $arguments Additional initialisation arguments * @param array of mixed $arguments Additional initialisation arguments
*/ */
public function __construct(PHPExcel_Worksheet $parent, $arguments) { public function __construct(PHPExcel_Worksheet $parent, $arguments)
$this->_cacheDirectory = ((isset($arguments['dir'])) && ($arguments['dir'] !== NULL)) {
$this->cacheDirectory = ((isset($arguments['dir'])) && ($arguments['dir'] !== null))
? $arguments['dir'] ? $arguments['dir']
: PHPExcel_Shared_File::sys_get_temp_dir(); : PHPExcel_Shared_File::sys_get_temp_dir();
parent::__construct($parent); parent::__construct($parent);
if (is_null($this->_fileHandle)) { if (is_null($this->fileHandle)) {
$baseUnique = $this->_getUniqueID(); $baseUnique = $this->getUniqueID();
$this->_fileName = $this->_cacheDirectory.'/PHPExcel.'.$baseUnique.'.cache'; $this->fileName = $this->cacheDirectory.'/PHPExcel.'.$baseUnique.'.cache';
$this->_fileHandle = fopen($this->_fileName,'a+'); $this->fileHandle = fopen($this->fileName, 'a+');
}
} }
} // function __construct()
/** /**
* Destroy this cell collection * Destroy this cell collection
*/ */
public function __destruct() { public function __destruct()
if (!is_null($this->_fileHandle)) { {
fclose($this->_fileHandle); if (!is_null($this->fileHandle)) {
unlink($this->_fileName); fclose($this->fileHandle);
unlink($this->fileName);
}
$this->fileHandle = null;
} }
$this->_fileHandle = null;
} // function __destruct()
} }

View File

@@ -1,8 +1,9 @@
<?php <?php
/** /**
* PHPExcel * PHPExcel_CachedObjectStorage_ICache
* *
* Copyright (c) 2006 - 2014 PHPExcel * Copyright (c) 2006 - 2015 PHPExcel
* *
* This library is free software; you can redistribute it and/or * This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public * modify it under the terms of the GNU Lesser General Public
@@ -20,18 +21,9 @@
* *
* @category PHPExcel * @category PHPExcel
* @package PHPExcel_CachedObjectStorage * @package PHPExcel_CachedObjectStorage
* @copyright Copyright (c) 2006 - 2014 PHPExcel (http://www.codeplex.com/PHPExcel) * @copyright Copyright (c) 2006 - 2015 PHPExcel (http://www.codeplex.com/PHPExcel)
* @license http://www.gnu.org/licenses/old-licenses/lgpl-2.1.txt LGPL * @license http://www.gnu.org/licenses/old-licenses/lgpl-2.1.txt LGPL
* @version 1.8.0, 2014-03-02 * @version ##VERSION##, ##DATE##
*/
/**
* PHPExcel_CachedObjectStorage_ICache
*
* @category PHPExcel
* @package PHPExcel_CachedObjectStorage
* @copyright Copyright (c) 2006 - 2014 PHPExcel (http://www.codeplex.com/PHPExcel)
*/ */
interface PHPExcel_CachedObjectStorage_ICache interface PHPExcel_CachedObjectStorage_ICache
{ {
@@ -40,7 +32,7 @@ interface PHPExcel_CachedObjectStorage_ICache
* *
* @param string $pCoord Coordinate address of the cell to update * @param string $pCoord Coordinate address of the cell to update
* @param PHPExcel_Cell $cell Cell to update * @param PHPExcel_Cell $cell Cell to update
* @return void * @return PHPExcel_Cell
* @throws PHPExcel_Exception * @throws PHPExcel_Exception
*/ */
public function addCacheData($pCoord, PHPExcel_Cell $cell); public function addCacheData($pCoord, PHPExcel_Cell $cell);
@@ -49,7 +41,7 @@ interface PHPExcel_CachedObjectStorage_ICache
* Add or Update a cell in cache * Add or Update a cell in cache
* *
* @param PHPExcel_Cell $cell Cell to update * @param PHPExcel_Cell $cell Cell to update
* @return void * @return PHPExcel_Cell
* @throws PHPExcel_Exception * @throws PHPExcel_Exception
*/ */
public function updateCacheData(PHPExcel_Cell $cell); public function updateCacheData(PHPExcel_Cell $cell);
@@ -82,14 +74,14 @@ interface PHPExcel_CachedObjectStorage_ICache
/** /**
* Get a list of all cell addresses currently held in cache * Get a list of all cell addresses currently held in cache
* *
* @return array of string * @return string[]
*/ */
public function getCellList(); public function getCellList();
/** /**
* Get the list of all cell addresses currently held in cache sorted by column and row * Get the list of all cell addresses currently held in cache sorted by column and row
* *
* @return void * @return string[]
*/ */
public function getSortedCellList(); public function getSortedCellList();
@@ -108,5 +100,4 @@ interface PHPExcel_CachedObjectStorage_ICache
* @return boolean * @return boolean
*/ */
public static function cacheMethodIsAvailable(); public static function cacheMethodIsAvailable();
} }

View File

@@ -1,8 +1,9 @@
<?php <?php
/** /**
* PHPExcel * PHPExcel_CachedObjectStorage_Igbinary
* *
* Copyright (c) 2006 - 2014 PHPExcel * Copyright (c) 2006 - 2015 PHPExcel
* *
* This library is free software; you can redistribute it and/or * This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public * modify it under the terms of the GNU Lesser General Public
@@ -20,21 +21,12 @@
* *
* @category PHPExcel * @category PHPExcel
* @package PHPExcel_CachedObjectStorage * @package PHPExcel_CachedObjectStorage
* @copyright Copyright (c) 2006 - 2014 PHPExcel (http://www.codeplex.com/PHPExcel) * @copyright Copyright (c) 2006 - 2015 PHPExcel (http://www.codeplex.com/PHPExcel)
* @license http://www.gnu.org/licenses/old-licenses/lgpl-2.1.txt LGPL * @license http://www.gnu.org/licenses/old-licenses/lgpl-2.1.txt LGPL
* @version 1.8.0, 2014-03-02 * @version ##VERSION##, ##DATE##
*/ */
class PHPExcel_CachedObjectStorage_Igbinary extends PHPExcel_CachedObjectStorage_CacheBase implements PHPExcel_CachedObjectStorage_ICache
{
/**
* PHPExcel_CachedObjectStorage_Igbinary
*
* @category PHPExcel
* @package PHPExcel_CachedObjectStorage
* @copyright Copyright (c) 2006 - 2014 PHPExcel (http://www.codeplex.com/PHPExcel)
*/
class PHPExcel_CachedObjectStorage_Igbinary extends PHPExcel_CachedObjectStorage_CacheBase implements PHPExcel_CachedObjectStorage_ICache {
/** /**
* Store cell data in cache for the current cell object if it's "dirty", * Store cell data in cache for the current cell object if it's "dirty",
* and the 'nullify' the current cell object * and the 'nullify' the current cell object
@@ -42,14 +34,15 @@ class PHPExcel_CachedObjectStorage_Igbinary extends PHPExcel_CachedObjectStorage
* @return void * @return void
* @throws PHPExcel_Exception * @throws PHPExcel_Exception
*/ */
protected function _storeData() { protected function storeData()
if ($this->_currentCellIsDirty && !empty($this->_currentObjectID)) { {
$this->_currentObject->detach(); if ($this->currentCellIsDirty && !empty($this->currentObjectID)) {
$this->currentObject->detach();
$this->_cellCache[$this->_currentObjectID] = igbinary_serialize($this->_currentObject); $this->cellCache[$this->currentObjectID] = igbinary_serialize($this->currentObject);
$this->_currentCellIsDirty = false; $this->currentCellIsDirty = false;
} }
$this->_currentObjectID = $this->_currentObject = null; $this->currentObjectID = $this->currentObject = null;
} // function _storeData() } // function _storeData()
@@ -58,17 +51,18 @@ class PHPExcel_CachedObjectStorage_Igbinary extends PHPExcel_CachedObjectStorage
* *
* @param string $pCoord Coordinate address of the cell to update * @param string $pCoord Coordinate address of the cell to update
* @param PHPExcel_Cell $cell Cell to update * @param PHPExcel_Cell $cell Cell to update
* @return void * @return PHPExcel_Cell
* @throws PHPExcel_Exception * @throws PHPExcel_Exception
*/ */
public function addCacheData($pCoord, PHPExcel_Cell $cell) { public function addCacheData($pCoord, PHPExcel_Cell $cell)
if (($pCoord !== $this->_currentObjectID) && ($this->_currentObjectID !== null)) { {
$this->_storeData(); if (($pCoord !== $this->currentObjectID) && ($this->currentObjectID !== null)) {
$this->storeData();
} }
$this->_currentObjectID = $pCoord; $this->currentObjectID = $pCoord;
$this->_currentObject = $cell; $this->currentObject = $cell;
$this->_currentCellIsDirty = true; $this->currentCellIsDirty = true;
return $cell; return $cell;
} // function addCacheData() } // function addCacheData()
@@ -81,37 +75,39 @@ class PHPExcel_CachedObjectStorage_Igbinary extends PHPExcel_CachedObjectStorage
* @throws PHPExcel_Exception * @throws PHPExcel_Exception
* @return PHPExcel_Cell Cell that was found, or null if not found * @return PHPExcel_Cell Cell that was found, or null if not found
*/ */
public function getCacheData($pCoord) { public function getCacheData($pCoord)
if ($pCoord === $this->_currentObjectID) { {
return $this->_currentObject; if ($pCoord === $this->currentObjectID) {
return $this->currentObject;
} }
$this->_storeData(); $this->storeData();
// Check if the entry that has been requested actually exists // Check if the entry that has been requested actually exists
if (!isset($this->_cellCache[$pCoord])) { if (!isset($this->cellCache[$pCoord])) {
// Return null if requested entry doesn't exist in cache // Return null if requested entry doesn't exist in cache
return null; return null;
} }
// Set current entry to the requested entry // Set current entry to the requested entry
$this->_currentObjectID = $pCoord; $this->currentObjectID = $pCoord;
$this->_currentObject = igbinary_unserialize($this->_cellCache[$pCoord]); $this->currentObject = igbinary_unserialize($this->cellCache[$pCoord]);
// Re-attach this as the cell's parent // Re-attach this as the cell's parent
$this->_currentObject->attach($this); $this->currentObject->attach($this);
// Return requested entry // Return requested entry
return $this->_currentObject; return $this->currentObject;
} // function getCacheData() } // function getCacheData()
/** /**
* Get a list of all cell addresses currently held in cache * Get a list of all cell addresses currently held in cache
* *
* @return array of string * @return string[]
*/ */
public function getCellList() { public function getCellList()
if ($this->_currentObjectID !== null) { {
$this->_storeData(); if ($this->currentObjectID !== null) {
$this->storeData();
} }
return parent::getCellList(); return parent::getCellList();
@@ -123,15 +119,16 @@ class PHPExcel_CachedObjectStorage_Igbinary extends PHPExcel_CachedObjectStorage
* *
* @return void * @return void
*/ */
public function unsetWorksheetCells() { public function unsetWorksheetCells()
if(!is_null($this->_currentObject)) { {
$this->_currentObject->detach(); if (!is_null($this->currentObject)) {
$this->_currentObject = $this->_currentObjectID = null; $this->currentObject->detach();
$this->currentObject = $this->currentObjectID = null;
} }
$this->_cellCache = array(); $this->cellCache = array();
// detach ourself from the worksheet, so that it can then delete this object successfully // detach ourself from the worksheet, so that it can then delete this object successfully
$this->_parent = null; $this->parent = null;
} // function unsetWorksheetCells() } // function unsetWorksheetCells()
@@ -141,12 +138,12 @@ class PHPExcel_CachedObjectStorage_Igbinary extends PHPExcel_CachedObjectStorage
* *
* @return boolean * @return boolean
*/ */
public static function cacheMethodIsAvailable() { public static function cacheMethodIsAvailable()
{
if (!function_exists('igbinary_serialize')) { if (!function_exists('igbinary_serialize')) {
return false; return false;
} }
return true; return true;
} }
} }

View File

@@ -1,8 +1,9 @@
<?php <?php
/** /**
* PHPExcel * PHPExcel_CachedObjectStorage_Memcache
* *
* Copyright (c) 2006 - 2014 PHPExcel * Copyright (c) 2006 - 2015 PHPExcel
* *
* This library is free software; you can redistribute it and/or * This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public * modify it under the terms of the GNU Lesser General Public
@@ -20,41 +21,32 @@
* *
* @category PHPExcel * @category PHPExcel
* @package PHPExcel_CachedObjectStorage * @package PHPExcel_CachedObjectStorage
* @copyright Copyright (c) 2006 - 2014 PHPExcel (http://www.codeplex.com/PHPExcel) * @copyright Copyright (c) 2006 - 2015 PHPExcel (http://www.codeplex.com/PHPExcel)
* @license http://www.gnu.org/licenses/old-licenses/lgpl-2.1.txt LGPL * @license http://www.gnu.org/licenses/old-licenses/lgpl-2.1.txt LGPL
* @version 1.8.0, 2014-03-02 * @version ##VERSION##, ##DATE##
*/ */
class PHPExcel_CachedObjectStorage_Memcache extends PHPExcel_CachedObjectStorage_CacheBase implements PHPExcel_CachedObjectStorage_ICache
{
/**
* PHPExcel_CachedObjectStorage_Memcache
*
* @category PHPExcel
* @package PHPExcel_CachedObjectStorage
* @copyright Copyright (c) 2006 - 2014 PHPExcel (http://www.codeplex.com/PHPExcel)
*/
class PHPExcel_CachedObjectStorage_Memcache extends PHPExcel_CachedObjectStorage_CacheBase implements PHPExcel_CachedObjectStorage_ICache {
/** /**
* Prefix used to uniquely identify cache data for this worksheet * Prefix used to uniquely identify cache data for this worksheet
* *
* @var string * @var string
*/ */
private $_cachePrefix = null; private $cachePrefix = null;
/** /**
* Cache timeout * Cache timeout
* *
* @var integer * @var integer
*/ */
private $_cacheTime = 600; private $cacheTime = 600;
/** /**
* Memcache interface * Memcache interface
* *
* @var resource * @var resource
*/ */
private $_memcache = null; private $memcache = null;
/** /**
@@ -64,20 +56,21 @@ class PHPExcel_CachedObjectStorage_Memcache extends PHPExcel_CachedObjectStorage
* @return void * @return void
* @throws PHPExcel_Exception * @throws PHPExcel_Exception
*/ */
protected function _storeData() { protected function storeData()
if ($this->_currentCellIsDirty && !empty($this->_currentObjectID)) { {
$this->_currentObject->detach(); if ($this->currentCellIsDirty && !empty($this->currentObjectID)) {
$this->currentObject->detach();
$obj = serialize($this->_currentObject); $obj = serialize($this->currentObject);
if (!$this->_memcache->replace($this->_cachePrefix.$this->_currentObjectID.'.cache',$obj,NULL,$this->_cacheTime)) { if (!$this->memcache->replace($this->cachePrefix . $this->currentObjectID . '.cache', $obj, null, $this->cacheTime)) {
if (!$this->_memcache->add($this->_cachePrefix.$this->_currentObjectID.'.cache',$obj,NULL,$this->_cacheTime)) { if (!$this->memcache->add($this->cachePrefix . $this->currentObjectID . '.cache', $obj, null, $this->cacheTime)) {
$this->__destruct(); $this->__destruct();
throw new PHPExcel_Exception('Failed to store cell '.$this->_currentObjectID.' in MemCache'); throw new PHPExcel_Exception("Failed to store cell {$this->currentObjectID} in MemCache");
} }
} }
$this->_currentCellIsDirty = false; $this->currentCellIsDirty = false;
} }
$this->_currentObjectID = $this->_currentObject = null; $this->currentObjectID = $this->currentObject = null;
} // function _storeData() } // function _storeData()
@@ -86,18 +79,19 @@ class PHPExcel_CachedObjectStorage_Memcache extends PHPExcel_CachedObjectStorage
* *
* @param string $pCoord Coordinate address of the cell to update * @param string $pCoord Coordinate address of the cell to update
* @param PHPExcel_Cell $cell Cell to update * @param PHPExcel_Cell $cell Cell to update
* @return void * @return PHPExcel_Cell
* @throws PHPExcel_Exception * @throws PHPExcel_Exception
*/ */
public function addCacheData($pCoord, PHPExcel_Cell $cell) { public function addCacheData($pCoord, PHPExcel_Cell $cell)
if (($pCoord !== $this->_currentObjectID) && ($this->_currentObjectID !== null)) { {
$this->_storeData(); if (($pCoord !== $this->currentObjectID) && ($this->currentObjectID !== null)) {
$this->storeData();
} }
$this->_cellCache[$pCoord] = true; $this->cellCache[$pCoord] = true;
$this->_currentObjectID = $pCoord; $this->currentObjectID = $pCoord;
$this->_currentObject = $cell; $this->currentObject = $cell;
$this->_currentCellIsDirty = true; $this->currentCellIsDirty = true;
return $cell; return $cell;
} // function addCacheData() } // function addCacheData()
@@ -107,17 +101,18 @@ class PHPExcel_CachedObjectStorage_Memcache extends PHPExcel_CachedObjectStorage
* Is a value set in the current PHPExcel_CachedObjectStorage_ICache for an indexed cell? * Is a value set in the current PHPExcel_CachedObjectStorage_ICache for an indexed cell?
* *
* @param string $pCoord Coordinate address of the cell to check * @param string $pCoord Coordinate address of the cell to check
* @return void * @return boolean
* @return boolean * @return boolean
*/ */
public function isDataSet($pCoord) { public function isDataSet($pCoord)
{
// Check if the requested entry is the current object, or exists in the cache // Check if the requested entry is the current object, or exists in the cache
if (parent::isDataSet($pCoord)) { if (parent::isDataSet($pCoord)) {
if ($this->_currentObjectID == $pCoord) { if ($this->currentObjectID == $pCoord) {
return true; return true;
} }
// Check if the requested entry still exists in Memcache // Check if the requested entry still exists in Memcache
$success = $this->_memcache->get($this->_cachePrefix.$pCoord.'.cache'); $success = $this->memcache->get($this->cachePrefix.$pCoord.'.cache');
if ($success === false) { if ($success === false) {
// Entry no longer exists in Memcache, so clear it from the cache array // Entry no longer exists in Memcache, so clear it from the cache array
parent::deleteCacheData($pCoord); parent::deleteCacheData($pCoord);
@@ -126,7 +121,7 @@ class PHPExcel_CachedObjectStorage_Memcache extends PHPExcel_CachedObjectStorage
return true; return true;
} }
return false; return false;
} // function isDataSet() }
/** /**
@@ -136,19 +131,20 @@ class PHPExcel_CachedObjectStorage_Memcache extends PHPExcel_CachedObjectStorage
* @throws PHPExcel_Exception * @throws PHPExcel_Exception
* @return PHPExcel_Cell Cell that was found, or null if not found * @return PHPExcel_Cell Cell that was found, or null if not found
*/ */
public function getCacheData($pCoord) { public function getCacheData($pCoord)
if ($pCoord === $this->_currentObjectID) { {
return $this->_currentObject; if ($pCoord === $this->currentObjectID) {
return $this->currentObject;
} }
$this->_storeData(); $this->storeData();
// Check if the entry that has been requested actually exists // Check if the entry that has been requested actually exists
if (parent::isDataSet($pCoord)) { if (parent::isDataSet($pCoord)) {
$obj = $this->_memcache->get($this->_cachePrefix.$pCoord.'.cache'); $obj = $this->memcache->get($this->cachePrefix . $pCoord . '.cache');
if ($obj === false) { if ($obj === false) {
// Entry no longer exists in Memcache, so clear it from the cache array // Entry no longer exists in Memcache, so clear it from the cache array
parent::deleteCacheData($pCoord); parent::deleteCacheData($pCoord);
throw new PHPExcel_Exception('Cell entry '.$pCoord.' no longer exists in MemCache'); throw new PHPExcel_Exception("Cell entry {$pCoord} no longer exists in MemCache");
} }
} else { } else {
// Return null if requested entry doesn't exist in cache // Return null if requested entry doesn't exist in cache
@@ -156,44 +152,43 @@ class PHPExcel_CachedObjectStorage_Memcache extends PHPExcel_CachedObjectStorage
} }
// Set current entry to the requested entry // Set current entry to the requested entry
$this->_currentObjectID = $pCoord; $this->currentObjectID = $pCoord;
$this->_currentObject = unserialize($obj); $this->currentObject = unserialize($obj);
// Re-attach this as the cell's parent // Re-attach this as the cell's parent
$this->_currentObject->attach($this); $this->currentObject->attach($this);
// Return requested entry // Return requested entry
return $this->_currentObject; return $this->currentObject;
} // function getCacheData() }
/** /**
* Get a list of all cell addresses currently held in cache * Get a list of all cell addresses currently held in cache
* *
* @return array of string * @return string[]
*/ */
public function getCellList() { public function getCellList()
if ($this->_currentObjectID !== null) { {
$this->_storeData(); if ($this->currentObjectID !== null) {
$this->storeData();
} }
return parent::getCellList(); return parent::getCellList();
} }
/** /**
* Delete a cell in cache identified by coordinate address * Delete a cell in cache identified by coordinate address
* *
* @param string $pCoord Coordinate address of the cell to delete * @param string $pCoord Coordinate address of the cell to delete
* @throws PHPExcel_Exception * @throws PHPExcel_Exception
*/ */
public function deleteCacheData($pCoord) { public function deleteCacheData($pCoord)
{
// Delete the entry from Memcache // Delete the entry from Memcache
$this->_memcache->delete($this->_cachePrefix.$pCoord.'.cache'); $this->memcache->delete($this->cachePrefix . $pCoord . '.cache');
// Delete the entry from our cell address array // Delete the entry from our cell address array
parent::deleteCacheData($pCoord); parent::deleteCacheData($pCoord);
} // function deleteCacheData() }
/** /**
* Clone the cell collection * Clone the cell collection
@@ -201,50 +196,50 @@ class PHPExcel_CachedObjectStorage_Memcache extends PHPExcel_CachedObjectStorage
* @param PHPExcel_Worksheet $parent The new worksheet * @param PHPExcel_Worksheet $parent The new worksheet
* @return void * @return void
*/ */
public function copyCellCollection(PHPExcel_Worksheet $parent) { public function copyCellCollection(PHPExcel_Worksheet $parent)
{
parent::copyCellCollection($parent); parent::copyCellCollection($parent);
// Get a new id for the new file name // Get a new id for the new file name
$baseUnique = $this->_getUniqueID(); $baseUnique = $this->getUniqueID();
$newCachePrefix = substr(md5($baseUnique),0,8).'.'; $newCachePrefix = substr(md5($baseUnique), 0, 8) . '.';
$cacheList = $this->getCellList(); $cacheList = $this->getCellList();
foreach($cacheList as $cellID) { foreach ($cacheList as $cellID) {
if ($cellID != $this->_currentObjectID) { if ($cellID != $this->currentObjectID) {
$obj = $this->_memcache->get($this->_cachePrefix.$cellID.'.cache'); $obj = $this->memcache->get($this->cachePrefix.$cellID.'.cache');
if ($obj === false) { if ($obj === false) {
// Entry no longer exists in Memcache, so clear it from the cache array // Entry no longer exists in Memcache, so clear it from the cache array
parent::deleteCacheData($cellID); parent::deleteCacheData($cellID);
throw new PHPExcel_Exception('Cell entry '.$cellID.' no longer exists in MemCache'); throw new PHPExcel_Exception("Cell entry {$cellID} no longer exists in MemCache");
} }
if (!$this->_memcache->add($newCachePrefix.$cellID.'.cache',$obj,NULL,$this->_cacheTime)) { if (!$this->memcache->add($newCachePrefix . $cellID . '.cache', $obj, null, $this->cacheTime)) {
$this->__destruct(); $this->__destruct();
throw new PHPExcel_Exception('Failed to store cell '.$cellID.' in MemCache'); throw new PHPExcel_Exception("Failed to store cell {$cellID} in MemCache");
} }
} }
} }
$this->_cachePrefix = $newCachePrefix; $this->cachePrefix = $newCachePrefix;
} // function copyCellCollection() }
/** /**
* Clear the cell collection and disconnect from our parent * Clear the cell collection and disconnect from our parent
* *
* @return void * @return void
*/ */
public function unsetWorksheetCells() { public function unsetWorksheetCells()
if(!is_null($this->_currentObject)) { {
$this->_currentObject->detach(); if (!is_null($this->currentObject)) {
$this->_currentObject = $this->_currentObjectID = null; $this->currentObject->detach();
$this->currentObject = $this->currentObjectID = null;
} }
// Flush the Memcache cache // Flush the Memcache cache
$this->__destruct(); $this->__destruct();
$this->_cellCache = array(); $this->cellCache = array();
// detach ourself from the worksheet, so that it can then delete this object successfully // detach ourself from the worksheet, so that it can then delete this object successfully
$this->_parent = null; $this->parent = null;
} // function unsetWorksheetCells() }
/** /**
* Initialise this new cell collection * Initialise this new cell collection
@@ -252,26 +247,26 @@ class PHPExcel_CachedObjectStorage_Memcache extends PHPExcel_CachedObjectStorage
* @param PHPExcel_Worksheet $parent The worksheet for this cell collection * @param PHPExcel_Worksheet $parent The worksheet for this cell collection
* @param array of mixed $arguments Additional initialisation arguments * @param array of mixed $arguments Additional initialisation arguments
*/ */
public function __construct(PHPExcel_Worksheet $parent, $arguments) { public function __construct(PHPExcel_Worksheet $parent, $arguments)
{
$memcacheServer = (isset($arguments['memcacheServer'])) ? $arguments['memcacheServer'] : 'localhost'; $memcacheServer = (isset($arguments['memcacheServer'])) ? $arguments['memcacheServer'] : 'localhost';
$memcachePort = (isset($arguments['memcachePort'])) ? $arguments['memcachePort'] : 11211; $memcachePort = (isset($arguments['memcachePort'])) ? $arguments['memcachePort'] : 11211;
$cacheTime = (isset($arguments['cacheTime'])) ? $arguments['cacheTime'] : 600; $cacheTime = (isset($arguments['cacheTime'])) ? $arguments['cacheTime'] : 600;
if (is_null($this->_cachePrefix)) { if (is_null($this->cachePrefix)) {
$baseUnique = $this->_getUniqueID(); $baseUnique = $this->getUniqueID();
$this->_cachePrefix = substr(md5($baseUnique),0,8).'.'; $this->cachePrefix = substr(md5($baseUnique), 0, 8) . '.';
// Set a new Memcache object and connect to the Memcache server // Set a new Memcache object and connect to the Memcache server
$this->_memcache = new Memcache(); $this->memcache = new Memcache();
if (!$this->_memcache->addServer($memcacheServer, $memcachePort, false, 50, 5, 5, true, array($this, 'failureCallback'))) { if (!$this->memcache->addServer($memcacheServer, $memcachePort, false, 50, 5, 5, true, array($this, 'failureCallback'))) {
throw new PHPExcel_Exception('Could not connect to MemCache server at '.$memcacheServer.':'.$memcachePort); throw new PHPExcel_Exception("Could not connect to MemCache server at {$memcacheServer}:{$memcachePort}");
} }
$this->_cacheTime = $cacheTime; $this->cacheTime = $cacheTime;
parent::__construct($parent); parent::__construct($parent);
} }
} // function __construct() }
/** /**
* Memcache error handler * Memcache error handler
@@ -280,20 +275,21 @@ class PHPExcel_CachedObjectStorage_Memcache extends PHPExcel_CachedObjectStorage
* @param integer $port Memcache port * @param integer $port Memcache port
* @throws PHPExcel_Exception * @throws PHPExcel_Exception
*/ */
public function failureCallback($host, $port) { public function failureCallback($host, $port)
throw new PHPExcel_Exception('memcache '.$host.':'.$port.' failed'); {
throw new PHPExcel_Exception("memcache {$host}:{$port} failed");
} }
/** /**
* Destroy this cell collection * Destroy this cell collection
*/ */
public function __destruct() { public function __destruct()
{
$cacheList = $this->getCellList(); $cacheList = $this->getCellList();
foreach($cacheList as $cellID) { foreach ($cacheList as $cellID) {
$this->_memcache->delete($this->_cachePrefix.$cellID.'.cache'); $this->memcache->delete($this->cachePrefix.$cellID . '.cache');
}
} }
} // function __destruct()
/** /**
* Identify whether the caching method is currently available * Identify whether the caching method is currently available
@@ -301,12 +297,12 @@ class PHPExcel_CachedObjectStorage_Memcache extends PHPExcel_CachedObjectStorage
* *
* @return boolean * @return boolean
*/ */
public static function cacheMethodIsAvailable() { public static function cacheMethodIsAvailable()
{
if (!function_exists('memcache_add')) { if (!function_exists('memcache_add')) {
return false; return false;
} }
return true; return true;
} }
} }

View File

@@ -1,8 +1,9 @@
<?php <?php
/** /**
* PHPExcel * PHPExcel_CachedObjectStorage_Memory
* *
* Copyright (c) 2006 - 2014 PHPExcel * Copyright (c) 2006 - 2015 PHPExcel
* *
* This library is free software; you can redistribute it and/or * This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public * modify it under the terms of the GNU Lesser General Public
@@ -20,28 +21,20 @@
* *
* @category PHPExcel * @category PHPExcel
* @package PHPExcel_CachedObjectStorage * @package PHPExcel_CachedObjectStorage
* @copyright Copyright (c) 2006 - 2014 PHPExcel (http://www.codeplex.com/PHPExcel) * @copyright Copyright (c) 2006 - 2015 PHPExcel (http://www.codeplex.com/PHPExcel)
* @license http://www.gnu.org/licenses/old-licenses/lgpl-2.1.txt LGPL * @license http://www.gnu.org/licenses/old-licenses/lgpl-2.1.txt LGPL
* @version 1.8.0, 2014-03-02 * @version ##VERSION##, ##DATE##
*/ */
class PHPExcel_CachedObjectStorage_Memory extends PHPExcel_CachedObjectStorage_CacheBase implements PHPExcel_CachedObjectStorage_ICache
{
/**
* PHPExcel_CachedObjectStorage_Memory
*
* @category PHPExcel
* @package PHPExcel_CachedObjectStorage
* @copyright Copyright (c) 2006 - 2014 PHPExcel (http://www.codeplex.com/PHPExcel)
*/
class PHPExcel_CachedObjectStorage_Memory extends PHPExcel_CachedObjectStorage_CacheBase implements PHPExcel_CachedObjectStorage_ICache {
/** /**
* Dummy method callable from CacheBase, but unused by Memory cache * Dummy method callable from CacheBase, but unused by Memory cache
* *
* @return void * @return void
*/ */
protected function _storeData() { protected function storeData()
} // function _storeData() {
}
/** /**
* Add or Update a cell in cache identified by coordinate address * Add or Update a cell in cache identified by coordinate address
@@ -51,14 +44,15 @@ class PHPExcel_CachedObjectStorage_Memory extends PHPExcel_CachedObjectStorage_C
* @return PHPExcel_Cell * @return PHPExcel_Cell
* @throws PHPExcel_Exception * @throws PHPExcel_Exception
*/ */
public function addCacheData($pCoord, PHPExcel_Cell $cell) { public function addCacheData($pCoord, PHPExcel_Cell $cell)
$this->_cellCache[$pCoord] = $cell; {
$this->cellCache[$pCoord] = $cell;
// Set current entry to the new/updated entry // Set current entry to the new/updated entry
$this->_currentObjectID = $pCoord; $this->currentObjectID = $pCoord;
return $cell; return $cell;
} // function addCacheData() }
/** /**
@@ -68,58 +62,57 @@ class PHPExcel_CachedObjectStorage_Memory extends PHPExcel_CachedObjectStorage_C
* @throws PHPExcel_Exception * @throws PHPExcel_Exception
* @return PHPExcel_Cell Cell that was found, or null if not found * @return PHPExcel_Cell Cell that was found, or null if not found
*/ */
public function getCacheData($pCoord) { public function getCacheData($pCoord)
{
// Check if the entry that has been requested actually exists // Check if the entry that has been requested actually exists
if (!isset($this->_cellCache[$pCoord])) { if (!isset($this->cellCache[$pCoord])) {
$this->_currentObjectID = NULL; $this->currentObjectID = null;
// Return null if requested entry doesn't exist in cache // Return null if requested entry doesn't exist in cache
return null; return null;
} }
// Set current entry to the requested entry // Set current entry to the requested entry
$this->_currentObjectID = $pCoord; $this->currentObjectID = $pCoord;
// Return requested entry // Return requested entry
return $this->_cellCache[$pCoord]; return $this->cellCache[$pCoord];
} // function getCacheData() }
/** /**
* Clone the cell collection * Clone the cell collection
* *
* @param PHPExcel_Worksheet $parent The new worksheet * @param PHPExcel_Worksheet $parent The new worksheet
* @return void
*/ */
public function copyCellCollection(PHPExcel_Worksheet $parent) { public function copyCellCollection(PHPExcel_Worksheet $parent)
{
parent::copyCellCollection($parent); parent::copyCellCollection($parent);
$newCollection = array(); $newCollection = array();
foreach($this->_cellCache as $k => &$cell) { foreach ($this->cellCache as $k => &$cell) {
$newCollection[$k] = clone $cell; $newCollection[$k] = clone $cell;
$newCollection[$k]->attach($this); $newCollection[$k]->attach($this);
} }
$this->_cellCache = $newCollection; $this->cellCache = $newCollection;
} }
/** /**
* Clear the cell collection and disconnect from our parent * Clear the cell collection and disconnect from our parent
* *
* @return void
*/ */
public function unsetWorksheetCells() { public function unsetWorksheetCells()
{
// Because cells are all stored as intact objects in memory, we need to detach each one from the parent // Because cells are all stored as intact objects in memory, we need to detach each one from the parent
foreach($this->_cellCache as $k => &$cell) { foreach ($this->cellCache as $k => &$cell) {
$cell->detach(); $cell->detach();
$this->_cellCache[$k] = null; $this->cellCache[$k] = null;
} }
unset($cell); unset($cell);
$this->_cellCache = array(); $this->cellCache = array();
// detach ourself from the worksheet, so that it can then delete this object successfully // detach ourself from the worksheet, so that it can then delete this object successfully
$this->_parent = null; $this->parent = null;
} // function unsetWorksheetCells() }
} }

View File

@@ -1,8 +1,9 @@
<?php <?php
/** /**
* PHPExcel * PHPExcel_CachedObjectStorage_MemoryGZip
* *
* Copyright (c) 2006 - 2014 PHPExcel * Copyright (c) 2006 - 2015 PHPExcel
* *
* This library is free software; you can redistribute it and/or * This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public * modify it under the terms of the GNU Lesser General Public
@@ -20,21 +21,12 @@
* *
* @category PHPExcel * @category PHPExcel
* @package PHPExcel_CachedObjectStorage * @package PHPExcel_CachedObjectStorage
* @copyright Copyright (c) 2006 - 2014 PHPExcel (http://www.codeplex.com/PHPExcel) * @copyright Copyright (c) 2006 - 2015 PHPExcel (http://www.codeplex.com/PHPExcel)
* @license http://www.gnu.org/licenses/old-licenses/lgpl-2.1.txt LGPL * @license http://www.gnu.org/licenses/old-licenses/lgpl-2.1.txt LGPL
* @version 1.8.0, 2014-03-02 * @version ##VERSION##, ##DATE##
*/ */
class PHPExcel_CachedObjectStorage_MemoryGZip extends PHPExcel_CachedObjectStorage_CacheBase implements PHPExcel_CachedObjectStorage_ICache
{
/**
* PHPExcel_CachedObjectStorage_MemoryGZip
*
* @category PHPExcel
* @package PHPExcel_CachedObjectStorage
* @copyright Copyright (c) 2006 - 2014 PHPExcel (http://www.codeplex.com/PHPExcel)
*/
class PHPExcel_CachedObjectStorage_MemoryGZip extends PHPExcel_CachedObjectStorage_CacheBase implements PHPExcel_CachedObjectStorage_ICache {
/** /**
* Store cell data in cache for the current cell object if it's "dirty", * Store cell data in cache for the current cell object if it's "dirty",
* and the 'nullify' the current cell object * and the 'nullify' the current cell object
@@ -42,15 +34,16 @@ class PHPExcel_CachedObjectStorage_MemoryGZip extends PHPExcel_CachedObjectStora
* @return void * @return void
* @throws PHPExcel_Exception * @throws PHPExcel_Exception
*/ */
protected function _storeData() { protected function storeData()
if ($this->_currentCellIsDirty && !empty($this->_currentObjectID)) { {
$this->_currentObject->detach(); if ($this->currentCellIsDirty && !empty($this->currentObjectID)) {
$this->currentObject->detach();
$this->_cellCache[$this->_currentObjectID] = gzdeflate(serialize($this->_currentObject)); $this->cellCache[$this->currentObjectID] = gzdeflate(serialize($this->currentObject));
$this->_currentCellIsDirty = false; $this->currentCellIsDirty = false;
}
$this->currentObjectID = $this->currentObject = null;
} }
$this->_currentObjectID = $this->_currentObject = null;
} // function _storeData()
/** /**
@@ -58,20 +51,21 @@ class PHPExcel_CachedObjectStorage_MemoryGZip extends PHPExcel_CachedObjectStora
* *
* @param string $pCoord Coordinate address of the cell to update * @param string $pCoord Coordinate address of the cell to update
* @param PHPExcel_Cell $cell Cell to update * @param PHPExcel_Cell $cell Cell to update
* @return void * @return PHPExcel_Cell
* @throws PHPExcel_Exception * @throws PHPExcel_Exception
*/ */
public function addCacheData($pCoord, PHPExcel_Cell $cell) { public function addCacheData($pCoord, PHPExcel_Cell $cell)
if (($pCoord !== $this->_currentObjectID) && ($this->_currentObjectID !== null)) { {
$this->_storeData(); if (($pCoord !== $this->currentObjectID) && ($this->currentObjectID !== null)) {
$this->storeData();
} }
$this->_currentObjectID = $pCoord; $this->currentObjectID = $pCoord;
$this->_currentObject = $cell; $this->currentObject = $cell;
$this->_currentCellIsDirty = true; $this->currentCellIsDirty = true;
return $cell; return $cell;
} // function addCacheData() }
/** /**
@@ -81,37 +75,39 @@ class PHPExcel_CachedObjectStorage_MemoryGZip extends PHPExcel_CachedObjectStora
* @throws PHPExcel_Exception * @throws PHPExcel_Exception
* @return PHPExcel_Cell Cell that was found, or null if not found * @return PHPExcel_Cell Cell that was found, or null if not found
*/ */
public function getCacheData($pCoord) { public function getCacheData($pCoord)
if ($pCoord === $this->_currentObjectID) { {
return $this->_currentObject; if ($pCoord === $this->currentObjectID) {
return $this->currentObject;
} }
$this->_storeData(); $this->storeData();
// Check if the entry that has been requested actually exists // Check if the entry that has been requested actually exists
if (!isset($this->_cellCache[$pCoord])) { if (!isset($this->cellCache[$pCoord])) {
// Return null if requested entry doesn't exist in cache // Return null if requested entry doesn't exist in cache
return null; return null;
} }
// Set current entry to the requested entry // Set current entry to the requested entry
$this->_currentObjectID = $pCoord; $this->currentObjectID = $pCoord;
$this->_currentObject = unserialize(gzinflate($this->_cellCache[$pCoord])); $this->currentObject = unserialize(gzinflate($this->cellCache[$pCoord]));
// Re-attach this as the cell's parent // Re-attach this as the cell's parent
$this->_currentObject->attach($this); $this->currentObject->attach($this);
// Return requested entry // Return requested entry
return $this->_currentObject; return $this->currentObject;
} // function getCacheData() }
/** /**
* Get a list of all cell addresses currently held in cache * Get a list of all cell addresses currently held in cache
* *
* @return array of string * @return string[]
*/ */
public function getCellList() { public function getCellList()
if ($this->_currentObjectID !== null) { {
$this->_storeData(); if ($this->currentObjectID !== null) {
$this->storeData();
} }
return parent::getCellList(); return parent::getCellList();
@@ -123,15 +119,15 @@ class PHPExcel_CachedObjectStorage_MemoryGZip extends PHPExcel_CachedObjectStora
* *
* @return void * @return void
*/ */
public function unsetWorksheetCells() { public function unsetWorksheetCells()
if(!is_null($this->_currentObject)) { {
$this->_currentObject->detach(); if (!is_null($this->currentObject)) {
$this->_currentObject = $this->_currentObjectID = null; $this->currentObject->detach();
$this->currentObject = $this->currentObjectID = null;
} }
$this->_cellCache = array(); $this->cellCache = array();
// detach ourself from the worksheet, so that it can then delete this object successfully // detach ourself from the worksheet, so that it can then delete this object successfully
$this->_parent = null; $this->parent = null;
} // function unsetWorksheetCells() }
} }

View File

@@ -1,8 +1,9 @@
<?php <?php
/** /**
* PHPExcel * PHPExcel_CachedObjectStorage_MemorySerialized
* *
* Copyright (c) 2006 - 2014 PHPExcel * Copyright (c) 2006 - 2015 PHPExcel
* *
* This library is free software; you can redistribute it and/or * This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public * modify it under the terms of the GNU Lesser General Public
@@ -20,21 +21,12 @@
* *
* @category PHPExcel * @category PHPExcel
* @package PHPExcel_CachedObjectStorage * @package PHPExcel_CachedObjectStorage
* @copyright Copyright (c) 2006 - 2014 PHPExcel (http://www.codeplex.com/PHPExcel) * @copyright Copyright (c) 2006 - 2015 PHPExcel (http://www.codeplex.com/PHPExcel)
* @license http://www.gnu.org/licenses/old-licenses/lgpl-2.1.txt LGPL * @license http://www.gnu.org/licenses/old-licenses/lgpl-2.1.txt LGPL
* @version 1.8.0, 2014-03-02 * @version ##VERSION##, ##DATE##
*/ */
class PHPExcel_CachedObjectStorage_MemorySerialized extends PHPExcel_CachedObjectStorage_CacheBase implements PHPExcel_CachedObjectStorage_ICache
{
/**
* PHPExcel_CachedObjectStorage_MemorySerialized
*
* @category PHPExcel
* @package PHPExcel_CachedObjectStorage
* @copyright Copyright (c) 2006 - 2014 PHPExcel (http://www.codeplex.com/PHPExcel)
*/
class PHPExcel_CachedObjectStorage_MemorySerialized extends PHPExcel_CachedObjectStorage_CacheBase implements PHPExcel_CachedObjectStorage_ICache {
/** /**
* Store cell data in cache for the current cell object if it's "dirty", * Store cell data in cache for the current cell object if it's "dirty",
* and the 'nullify' the current cell object * and the 'nullify' the current cell object
@@ -42,37 +34,37 @@ class PHPExcel_CachedObjectStorage_MemorySerialized extends PHPExcel_CachedObjec
* @return void * @return void
* @throws PHPExcel_Exception * @throws PHPExcel_Exception
*/ */
protected function _storeData() { protected function storeData()
if ($this->_currentCellIsDirty && !empty($this->_currentObjectID)) { {
$this->_currentObject->detach(); if ($this->currentCellIsDirty && !empty($this->currentObjectID)) {
$this->currentObject->detach();
$this->_cellCache[$this->_currentObjectID] = serialize($this->_currentObject); $this->cellCache[$this->currentObjectID] = serialize($this->currentObject);
$this->_currentCellIsDirty = false; $this->currentCellIsDirty = false;
}
$this->currentObjectID = $this->currentObject = null;
} }
$this->_currentObjectID = $this->_currentObject = null;
} // function _storeData()
/** /**
* Add or Update a cell in cache identified by coordinate address * Add or Update a cell in cache identified by coordinate address
* *
* @param string $pCoord Coordinate address of the cell to update * @param string $pCoord Coordinate address of the cell to update
* @param PHPExcel_Cell $cell Cell to update * @param PHPExcel_Cell $cell Cell to update
* @return void * @return PHPExcel_Cell
* @throws PHPExcel_Exception * @throws PHPExcel_Exception
*/ */
public function addCacheData($pCoord, PHPExcel_Cell $cell) { public function addCacheData($pCoord, PHPExcel_Cell $cell)
if (($pCoord !== $this->_currentObjectID) && ($this->_currentObjectID !== null)) { {
$this->_storeData(); if (($pCoord !== $this->currentObjectID) && ($this->currentObjectID !== null)) {
$this->storeData();
} }
$this->_currentObjectID = $pCoord; $this->currentObjectID = $pCoord;
$this->_currentObject = $cell; $this->currentObject = $cell;
$this->_currentCellIsDirty = true; $this->currentCellIsDirty = true;
return $cell; return $cell;
} // function addCacheData() }
/** /**
* Get cell at a specific coordinate * Get cell at a specific coordinate
@@ -81,57 +73,57 @@ class PHPExcel_CachedObjectStorage_MemorySerialized extends PHPExcel_CachedObjec
* @throws PHPExcel_Exception * @throws PHPExcel_Exception
* @return PHPExcel_Cell Cell that was found, or null if not found * @return PHPExcel_Cell Cell that was found, or null if not found
*/ */
public function getCacheData($pCoord) { public function getCacheData($pCoord)
if ($pCoord === $this->_currentObjectID) { {
return $this->_currentObject; if ($pCoord === $this->currentObjectID) {
return $this->currentObject;
} }
$this->_storeData(); $this->storeData();
// Check if the entry that has been requested actually exists // Check if the entry that has been requested actually exists
if (!isset($this->_cellCache[$pCoord])) { if (!isset($this->cellCache[$pCoord])) {
// Return null if requested entry doesn't exist in cache // Return null if requested entry doesn't exist in cache
return null; return null;
} }
// Set current entry to the requested entry // Set current entry to the requested entry
$this->_currentObjectID = $pCoord; $this->currentObjectID = $pCoord;
$this->_currentObject = unserialize($this->_cellCache[$pCoord]); $this->currentObject = unserialize($this->cellCache[$pCoord]);
// Re-attach this as the cell's parent // Re-attach this as the cell's parent
$this->_currentObject->attach($this); $this->currentObject->attach($this);
// Return requested entry // Return requested entry
return $this->_currentObject; return $this->currentObject;
} // function getCacheData() }
/** /**
* Get a list of all cell addresses currently held in cache * Get a list of all cell addresses currently held in cache
* *
* @return array of string * @return string[]
*/ */
public function getCellList() { public function getCellList()
if ($this->_currentObjectID !== null) { {
$this->_storeData(); if ($this->currentObjectID !== null) {
$this->storeData();
} }
return parent::getCellList(); return parent::getCellList();
} }
/** /**
* Clear the cell collection and disconnect from our parent * Clear the cell collection and disconnect from our parent
* *
* @return void * @return void
*/ */
public function unsetWorksheetCells() { public function unsetWorksheetCells()
if(!is_null($this->_currentObject)) { {
$this->_currentObject->detach(); if (!is_null($this->currentObject)) {
$this->_currentObject = $this->_currentObjectID = null; $this->currentObject->detach();
$this->currentObject = $this->currentObjectID = null;
} }
$this->_cellCache = array(); $this->cellCache = array();
// detach ourself from the worksheet, so that it can then delete this object successfully // detach ourself from the worksheet, so that it can then delete this object successfully
$this->_parent = null; $this->parent = null;
} // function unsetWorksheetCells() }
} }

View File

@@ -1,8 +1,9 @@
<?php <?php
/** /**
* PHPExcel * PHPExcel_CachedObjectStorage_PHPTemp
* *
* Copyright (c) 2006 - 2014 PHPExcel * Copyright (c) 2006 - 2015 PHPExcel
* *
* This library is free software; you can redistribute it and/or * This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public * modify it under the terms of the GNU Lesser General Public
@@ -20,34 +21,25 @@
* *
* @category PHPExcel * @category PHPExcel
* @package PHPExcel_CachedObjectStorage * @package PHPExcel_CachedObjectStorage
* @copyright Copyright (c) 2006 - 2014 PHPExcel (http://www.codeplex.com/PHPExcel) * @copyright Copyright (c) 2006 - 2015 PHPExcel (http://www.codeplex.com/PHPExcel)
* @license http://www.gnu.org/licenses/old-licenses/lgpl-2.1.txt LGPL * @license http://www.gnu.org/licenses/old-licenses/lgpl-2.1.txt LGPL
* @version 1.8.0, 2014-03-02 * @version ##VERSION##, ##DATE##
*/ */
class PHPExcel_CachedObjectStorage_PHPTemp extends PHPExcel_CachedObjectStorage_CacheBase implements PHPExcel_CachedObjectStorage_ICache
{
/**
* PHPExcel_CachedObjectStorage_PHPTemp
*
* @category PHPExcel
* @package PHPExcel_CachedObjectStorage
* @copyright Copyright (c) 2006 - 2014 PHPExcel (http://www.codeplex.com/PHPExcel)
*/
class PHPExcel_CachedObjectStorage_PHPTemp extends PHPExcel_CachedObjectStorage_CacheBase implements PHPExcel_CachedObjectStorage_ICache {
/** /**
* Name of the file for this cache * Name of the file for this cache
* *
* @var string * @var string
*/ */
private $_fileHandle = null; private $fileHandle = null;
/** /**
* Memory limit to use before reverting to file cache * Memory limit to use before reverting to file cache
* *
* @var integer * @var integer
*/ */
private $_memoryCacheSize = null; private $memoryCacheSize = null;
/** /**
* Store cell data in cache for the current cell object if it's "dirty", * Store cell data in cache for the current cell object if it's "dirty",
@@ -56,20 +48,21 @@ class PHPExcel_CachedObjectStorage_PHPTemp extends PHPExcel_CachedObjectStorage_
* @return void * @return void
* @throws PHPExcel_Exception * @throws PHPExcel_Exception
*/ */
protected function _storeData() { protected function storeData()
if ($this->_currentCellIsDirty && !empty($this->_currentObjectID)) { {
$this->_currentObject->detach(); if ($this->currentCellIsDirty && !empty($this->currentObjectID)) {
$this->currentObject->detach();
fseek($this->_fileHandle,0,SEEK_END); fseek($this->fileHandle, 0, SEEK_END);
$offset = ftell($this->_fileHandle);
fwrite($this->_fileHandle, serialize($this->_currentObject)); $this->cellCache[$this->currentObjectID] = array(
$this->_cellCache[$this->_currentObjectID] = array('ptr' => $offset, 'ptr' => ftell($this->fileHandle),
'sz' => ftell($this->_fileHandle) - $offset 'sz' => fwrite($this->fileHandle, serialize($this->currentObject))
); );
$this->_currentCellIsDirty = false; $this->currentCellIsDirty = false;
}
$this->currentObjectID = $this->currentObject = null;
} }
$this->_currentObjectID = $this->_currentObject = null;
} // function _storeData()
/** /**
@@ -77,20 +70,21 @@ class PHPExcel_CachedObjectStorage_PHPTemp extends PHPExcel_CachedObjectStorage_
* *
* @param string $pCoord Coordinate address of the cell to update * @param string $pCoord Coordinate address of the cell to update
* @param PHPExcel_Cell $cell Cell to update * @param PHPExcel_Cell $cell Cell to update
* @return void * @return PHPExcel_Cell
* @throws PHPExcel_Exception * @throws PHPExcel_Exception
*/ */
public function addCacheData($pCoord, PHPExcel_Cell $cell) { public function addCacheData($pCoord, PHPExcel_Cell $cell)
if (($pCoord !== $this->_currentObjectID) && ($this->_currentObjectID !== null)) { {
$this->_storeData(); if (($pCoord !== $this->currentObjectID) && ($this->currentObjectID !== null)) {
$this->storeData();
} }
$this->_currentObjectID = $pCoord; $this->currentObjectID = $pCoord;
$this->_currentObject = $cell; $this->currentObject = $cell;
$this->_currentCellIsDirty = true; $this->currentCellIsDirty = true;
return $cell; return $cell;
} // function addCacheData() }
/** /**
@@ -100,82 +94,82 @@ class PHPExcel_CachedObjectStorage_PHPTemp extends PHPExcel_CachedObjectStorage_
* @throws PHPExcel_Exception * @throws PHPExcel_Exception
* @return PHPExcel_Cell Cell that was found, or null if not found * @return PHPExcel_Cell Cell that was found, or null if not found
*/ */
public function getCacheData($pCoord) { public function getCacheData($pCoord)
if ($pCoord === $this->_currentObjectID) { {
return $this->_currentObject; if ($pCoord === $this->currentObjectID) {
return $this->currentObject;
} }
$this->_storeData(); $this->storeData();
// Check if the entry that has been requested actually exists // Check if the entry that has been requested actually exists
if (!isset($this->_cellCache[$pCoord])) { if (!isset($this->cellCache[$pCoord])) {
// Return null if requested entry doesn't exist in cache // Return null if requested entry doesn't exist in cache
return null; return null;
} }
// Set current entry to the requested entry // Set current entry to the requested entry
$this->_currentObjectID = $pCoord; $this->currentObjectID = $pCoord;
fseek($this->_fileHandle,$this->_cellCache[$pCoord]['ptr']); fseek($this->fileHandle, $this->cellCache[$pCoord]['ptr']);
$this->_currentObject = unserialize(fread($this->_fileHandle,$this->_cellCache[$pCoord]['sz'])); $this->currentObject = unserialize(fread($this->fileHandle, $this->cellCache[$pCoord]['sz']));
// Re-attach this as the cell's parent // Re-attach this as the cell's parent
$this->_currentObject->attach($this); $this->currentObject->attach($this);
// Return requested entry // Return requested entry
return $this->_currentObject; return $this->currentObject;
} // function getCacheData() }
/** /**
* Get a list of all cell addresses currently held in cache * Get a list of all cell addresses currently held in cache
* *
* @return array of string * @return string[]
*/ */
public function getCellList() { public function getCellList()
if ($this->_currentObjectID !== null) { {
$this->_storeData(); if ($this->currentObjectID !== null) {
$this->storeData();
} }
return parent::getCellList(); return parent::getCellList();
} }
/** /**
* Clone the cell collection * Clone the cell collection
* *
* @param PHPExcel_Worksheet $parent The new worksheet * @param PHPExcel_Worksheet $parent The new worksheet
* @return void * @return void
*/ */
public function copyCellCollection(PHPExcel_Worksheet $parent) { public function copyCellCollection(PHPExcel_Worksheet $parent)
{
parent::copyCellCollection($parent); parent::copyCellCollection($parent);
// Open a new stream for the cell cache data // Open a new stream for the cell cache data
$newFileHandle = fopen('php://temp/maxmemory:'.$this->_memoryCacheSize,'a+'); $newFileHandle = fopen('php://temp/maxmemory:' . $this->memoryCacheSize, 'a+');
// Copy the existing cell cache data to the new stream // Copy the existing cell cache data to the new stream
fseek($this->_fileHandle,0); fseek($this->fileHandle, 0);
while (!feof($this->_fileHandle)) { while (!feof($this->fileHandle)) {
fwrite($newFileHandle,fread($this->_fileHandle, 1024)); fwrite($newFileHandle, fread($this->fileHandle, 1024));
}
$this->fileHandle = $newFileHandle;
} }
$this->_fileHandle = $newFileHandle;
} // function copyCellCollection()
/** /**
* Clear the cell collection and disconnect from our parent * Clear the cell collection and disconnect from our parent
* *
* @return void * @return void
*/ */
public function unsetWorksheetCells() { public function unsetWorksheetCells()
if(!is_null($this->_currentObject)) { {
$this->_currentObject->detach(); if (!is_null($this->currentObject)) {
$this->_currentObject = $this->_currentObjectID = null; $this->currentObject->detach();
$this->currentObject = $this->currentObjectID = null;
} }
$this->_cellCache = array(); $this->cellCache = array();
// detach ourself from the worksheet, so that it can then delete this object successfully // detach ourself from the worksheet, so that it can then delete this object successfully
$this->_parent = null; $this->parent = null;
// Close down the php://temp file // Close down the php://temp file
$this->__destruct(); $this->__destruct();
} // function unsetWorksheetCells() }
/** /**
* Initialise this new cell collection * Initialise this new cell collection
@@ -183,24 +177,24 @@ class PHPExcel_CachedObjectStorage_PHPTemp extends PHPExcel_CachedObjectStorage_
* @param PHPExcel_Worksheet $parent The worksheet for this cell collection * @param PHPExcel_Worksheet $parent The worksheet for this cell collection
* @param array of mixed $arguments Additional initialisation arguments * @param array of mixed $arguments Additional initialisation arguments
*/ */
public function __construct(PHPExcel_Worksheet $parent, $arguments) { public function __construct(PHPExcel_Worksheet $parent, $arguments)
$this->_memoryCacheSize = (isset($arguments['memoryCacheSize'])) ? $arguments['memoryCacheSize'] : '1MB'; {
$this->memoryCacheSize = (isset($arguments['memoryCacheSize'])) ? $arguments['memoryCacheSize'] : '1MB';
parent::__construct($parent); parent::__construct($parent);
if (is_null($this->_fileHandle)) { if (is_null($this->fileHandle)) {
$this->_fileHandle = fopen('php://temp/maxmemory:'.$this->_memoryCacheSize,'a+'); $this->fileHandle = fopen('php://temp/maxmemory:' . $this->memoryCacheSize, 'a+');
}
} }
} // function __construct()
/** /**
* Destroy this cell collection * Destroy this cell collection
*/ */
public function __destruct() { public function __destruct()
if (!is_null($this->_fileHandle)) { {
fclose($this->_fileHandle); if (!is_null($this->fileHandle)) {
fclose($this->fileHandle);
}
$this->fileHandle = null;
} }
$this->_fileHandle = null;
} // function __destruct()
} }

View File

@@ -1,8 +1,9 @@
<?php <?php
/** /**
* PHPExcel * PHPExcel_CachedObjectStorage_SQLite
* *
* Copyright (c) 2006 - 2014 PHPExcel * Copyright (c) 2006 - 2015 PHPExcel
* *
* This library is free software; you can redistribute it and/or * This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public * modify it under the terms of the GNU Lesser General Public
@@ -20,34 +21,25 @@
* *
* @category PHPExcel * @category PHPExcel
* @package PHPExcel_CachedObjectStorage * @package PHPExcel_CachedObjectStorage
* @copyright Copyright (c) 2006 - 2014 PHPExcel (http://www.codeplex.com/PHPExcel) * @copyright Copyright (c) 2006 - 2015 PHPExcel (http://www.codeplex.com/PHPExcel)
* @license http://www.gnu.org/licenses/old-licenses/lgpl-2.1.txt LGPL * @license http://www.gnu.org/licenses/old-licenses/lgpl-2.1.txt LGPL
* @version 1.8.0, 2014-03-02 * @version ##VERSION##, ##DATE##
*/ */
class PHPExcel_CachedObjectStorage_SQLite extends PHPExcel_CachedObjectStorage_CacheBase implements PHPExcel_CachedObjectStorage_ICache
{
/**
* PHPExcel_CachedObjectStorage_SQLite
*
* @category PHPExcel
* @package PHPExcel_CachedObjectStorage
* @copyright Copyright (c) 2006 - 2014 PHPExcel (http://www.codeplex.com/PHPExcel)
*/
class PHPExcel_CachedObjectStorage_SQLite extends PHPExcel_CachedObjectStorage_CacheBase implements PHPExcel_CachedObjectStorage_ICache {
/** /**
* Database table name * Database table name
* *
* @var string * @var string
*/ */
private $_TableName = null; private $TableName = null;
/** /**
* Database handle * Database handle
* *
* @var resource * @var resource
*/ */
private $_DBHandle = null; private $DBHandle = null;
/** /**
* Store cell data in cache for the current cell object if it's "dirty", * Store cell data in cache for the current cell object if it's "dirty",
@@ -56,38 +48,39 @@ class PHPExcel_CachedObjectStorage_SQLite extends PHPExcel_CachedObjectStorage_C
* @return void * @return void
* @throws PHPExcel_Exception * @throws PHPExcel_Exception
*/ */
protected function _storeData() { protected function storeData()
if ($this->_currentCellIsDirty && !empty($this->_currentObjectID)) { {
$this->_currentObject->detach(); if ($this->currentCellIsDirty && !empty($this->currentObjectID)) {
$this->currentObject->detach();
if (!$this->_DBHandle->queryExec("INSERT OR REPLACE INTO kvp_".$this->_TableName." VALUES('".$this->_currentObjectID."','".sqlite_escape_string(serialize($this->_currentObject))."')")) if (!$this->DBHandle->queryExec("INSERT OR REPLACE INTO kvp_".$this->TableName." VALUES('".$this->currentObjectID."','".sqlite_escape_string(serialize($this->currentObject))."')")) {
throw new PHPExcel_Exception(sqlite_error_string($this->_DBHandle->lastError())); throw new PHPExcel_Exception(sqlite_error_string($this->DBHandle->lastError()));
$this->_currentCellIsDirty = false; }
$this->currentCellIsDirty = false;
}
$this->currentObjectID = $this->currentObject = null;
} }
$this->_currentObjectID = $this->_currentObject = null;
} // function _storeData()
/** /**
* Add or Update a cell in cache identified by coordinate address * Add or Update a cell in cache identified by coordinate address
* *
* @param string $pCoord Coordinate address of the cell to update * @param string $pCoord Coordinate address of the cell to update
* @param PHPExcel_Cell $cell Cell to update * @param PHPExcel_Cell $cell Cell to update
* @return void * @return PHPExcel_Cell
* @throws PHPExcel_Exception * @throws PHPExcel_Exception
*/ */
public function addCacheData($pCoord, PHPExcel_Cell $cell) { public function addCacheData($pCoord, PHPExcel_Cell $cell)
if (($pCoord !== $this->_currentObjectID) && ($this->_currentObjectID !== null)) { {
$this->_storeData(); if (($pCoord !== $this->currentObjectID) && ($this->currentObjectID !== null)) {
$this->storeData();
} }
$this->_currentObjectID = $pCoord; $this->currentObjectID = $pCoord;
$this->_currentObject = $cell; $this->currentObject = $cell;
$this->_currentCellIsDirty = true; $this->currentCellIsDirty = true;
return $cell; return $cell;
} // function addCacheData() }
/** /**
* Get cell at a specific coordinate * Get cell at a specific coordinate
@@ -96,33 +89,33 @@ class PHPExcel_CachedObjectStorage_SQLite extends PHPExcel_CachedObjectStorage_C
* @throws PHPExcel_Exception * @throws PHPExcel_Exception
* @return PHPExcel_Cell Cell that was found, or null if not found * @return PHPExcel_Cell Cell that was found, or null if not found
*/ */
public function getCacheData($pCoord) { public function getCacheData($pCoord)
if ($pCoord === $this->_currentObjectID) { {
return $this->_currentObject; if ($pCoord === $this->currentObjectID) {
return $this->currentObject;
} }
$this->_storeData(); $this->storeData();
$query = "SELECT value FROM kvp_".$this->_TableName." WHERE id='".$pCoord."'"; $query = "SELECT value FROM kvp_".$this->TableName." WHERE id='".$pCoord."'";
$cellResultSet = $this->_DBHandle->query($query,SQLITE_ASSOC); $cellResultSet = $this->DBHandle->query($query, SQLITE_ASSOC);
if ($cellResultSet === false) { if ($cellResultSet === false) {
throw new PHPExcel_Exception(sqlite_error_string($this->_DBHandle->lastError())); throw new PHPExcel_Exception(sqlite_error_string($this->DBHandle->lastError()));
} elseif ($cellResultSet->numRows() == 0) { } elseif ($cellResultSet->numRows() == 0) {
// Return null if requested entry doesn't exist in cache // Return null if requested entry doesn't exist in cache
return null; return null;
} }
// Set current entry to the requested entry // Set current entry to the requested entry
$this->_currentObjectID = $pCoord; $this->currentObjectID = $pCoord;
$cellResult = $cellResultSet->fetchSingle(); $cellResult = $cellResultSet->fetchSingle();
$this->_currentObject = unserialize($cellResult); $this->currentObject = unserialize($cellResult);
// Re-attach this as the cell's parent // Re-attach this as the cell's parent
$this->_currentObject->attach($this); $this->currentObject->attach($this);
// Return requested entry // Return requested entry
return $this->_currentObject; return $this->currentObject;
} // function getCacheData() }
/** /**
* Is a value set for an indexed cell? * Is a value set for an indexed cell?
@@ -130,23 +123,23 @@ class PHPExcel_CachedObjectStorage_SQLite extends PHPExcel_CachedObjectStorage_C
* @param string $pCoord Coordinate address of the cell to check * @param string $pCoord Coordinate address of the cell to check
* @return boolean * @return boolean
*/ */
public function isDataSet($pCoord) { public function isDataSet($pCoord)
if ($pCoord === $this->_currentObjectID) { {
if ($pCoord === $this->currentObjectID) {
return true; return true;
} }
// Check if the requested entry exists in the cache // Check if the requested entry exists in the cache
$query = "SELECT id FROM kvp_".$this->_TableName." WHERE id='".$pCoord."'"; $query = "SELECT id FROM kvp_".$this->TableName." WHERE id='".$pCoord."'";
$cellResultSet = $this->_DBHandle->query($query,SQLITE_ASSOC); $cellResultSet = $this->DBHandle->query($query, SQLITE_ASSOC);
if ($cellResultSet === false) { if ($cellResultSet === false) {
throw new PHPExcel_Exception(sqlite_error_string($this->_DBHandle->lastError())); throw new PHPExcel_Exception(sqlite_error_string($this->DBHandle->lastError()));
} elseif ($cellResultSet->numRows() == 0) { } elseif ($cellResultSet->numRows() == 0) {
// Return null if requested entry doesn't exist in cache // Return null if requested entry doesn't exist in cache
return false; return false;
} }
return true; return true;
} // function isDataSet() }
/** /**
* Delete a cell in cache identified by coordinate address * Delete a cell in cache identified by coordinate address
@@ -154,20 +147,21 @@ class PHPExcel_CachedObjectStorage_SQLite extends PHPExcel_CachedObjectStorage_C
* @param string $pCoord Coordinate address of the cell to delete * @param string $pCoord Coordinate address of the cell to delete
* @throws PHPExcel_Exception * @throws PHPExcel_Exception
*/ */
public function deleteCacheData($pCoord) { public function deleteCacheData($pCoord)
if ($pCoord === $this->_currentObjectID) { {
$this->_currentObject->detach(); if ($pCoord === $this->currentObjectID) {
$this->_currentObjectID = $this->_currentObject = null; $this->currentObject->detach();
$this->currentObjectID = $this->currentObject = null;
} }
// Check if the requested entry exists in the cache // Check if the requested entry exists in the cache
$query = "DELETE FROM kvp_".$this->_TableName." WHERE id='".$pCoord."'"; $query = "DELETE FROM kvp_".$this->TableName." WHERE id='".$pCoord."'";
if (!$this->_DBHandle->queryExec($query)) if (!$this->DBHandle->queryExec($query)) {
throw new PHPExcel_Exception(sqlite_error_string($this->_DBHandle->lastError())); throw new PHPExcel_Exception(sqlite_error_string($this->DBHandle->lastError()));
}
$this->_currentCellIsDirty = false;
} // function deleteCacheData()
$this->currentCellIsDirty = false;
}
/** /**
* Move a cell object from one address to another * Move a cell object from one address to another
@@ -176,48 +170,51 @@ class PHPExcel_CachedObjectStorage_SQLite extends PHPExcel_CachedObjectStorage_C
* @param string $toAddress Destination address of the cell to move * @param string $toAddress Destination address of the cell to move
* @return boolean * @return boolean
*/ */
public function moveCell($fromAddress, $toAddress) { public function moveCell($fromAddress, $toAddress)
if ($fromAddress === $this->_currentObjectID) { {
$this->_currentObjectID = $toAddress; if ($fromAddress === $this->currentObjectID) {
$this->currentObjectID = $toAddress;
} }
$query = "DELETE FROM kvp_".$this->_TableName." WHERE id='".$toAddress."'"; $query = "DELETE FROM kvp_".$this->TableName." WHERE id='".$toAddress."'";
$result = $this->_DBHandle->exec($query); $result = $this->DBHandle->exec($query);
if ($result === false) if ($result === false) {
throw new PHPExcel_Exception($this->_DBHandle->lastErrorMsg()); throw new PHPExcel_Exception($this->DBHandle->lastErrorMsg());
}
$query = "UPDATE kvp_".$this->_TableName." SET id='".$toAddress."' WHERE id='".$fromAddress."'"; $query = "UPDATE kvp_".$this->TableName." SET id='".$toAddress."' WHERE id='".$fromAddress."'";
$result = $this->_DBHandle->exec($query); $result = $this->DBHandle->exec($query);
if ($result === false) if ($result === false) {
throw new PHPExcel_Exception($this->_DBHandle->lastErrorMsg()); throw new PHPExcel_Exception($this->DBHandle->lastErrorMsg());
}
return TRUE;
} // function moveCell()
return true;
}
/** /**
* Get a list of all cell addresses currently held in cache * Get a list of all cell addresses currently held in cache
* *
* @return array of string * @return string[]
*/ */
public function getCellList() { public function getCellList()
if ($this->_currentObjectID !== null) { {
$this->_storeData(); if ($this->currentObjectID !== null) {
$this->storeData();
} }
$query = "SELECT id FROM kvp_".$this->_TableName; $query = "SELECT id FROM kvp_".$this->TableName;
$cellIdsResult = $this->_DBHandle->unbufferedQuery($query,SQLITE_ASSOC); $cellIdsResult = $this->DBHandle->unbufferedQuery($query, SQLITE_ASSOC);
if ($cellIdsResult === false) if ($cellIdsResult === false) {
throw new PHPExcel_Exception(sqlite_error_string($this->_DBHandle->lastError())); throw new PHPExcel_Exception(sqlite_error_string($this->DBHandle->lastError()));
}
$cellKeys = array(); $cellKeys = array();
foreach($cellIdsResult as $row) { foreach ($cellIdsResult as $row) {
$cellKeys[] = $row['id']; $cellKeys[] = $row['id'];
} }
return $cellKeys; return $cellKeys;
} // function getCellList() }
/** /**
* Clone the cell collection * Clone the cell collection
@@ -225,69 +222,73 @@ class PHPExcel_CachedObjectStorage_SQLite extends PHPExcel_CachedObjectStorage_C
* @param PHPExcel_Worksheet $parent The new worksheet * @param PHPExcel_Worksheet $parent The new worksheet
* @return void * @return void
*/ */
public function copyCellCollection(PHPExcel_Worksheet $parent) { public function copyCellCollection(PHPExcel_Worksheet $parent)
$this->_currentCellIsDirty; {
$this->_storeData(); $this->currentCellIsDirty;
$this->storeData();
// Get a new id for the new table name // Get a new id for the new table name
$tableName = str_replace('.','_',$this->_getUniqueID()); $tableName = str_replace('.', '_', $this->getUniqueID());
if (!$this->_DBHandle->queryExec('CREATE TABLE kvp_'.$tableName.' (id VARCHAR(12) PRIMARY KEY, value BLOB) if (!$this->DBHandle->queryExec('CREATE TABLE kvp_'.$tableName.' (id VARCHAR(12) PRIMARY KEY, value BLOB)
AS SELECT * FROM kvp_'.$this->_TableName)) AS SELECT * FROM kvp_'.$this->TableName)
throw new PHPExcel_Exception(sqlite_error_string($this->_DBHandle->lastError())); ) {
throw new PHPExcel_Exception(sqlite_error_string($this->DBHandle->lastError()));
}
// Copy the existing cell cache file // Copy the existing cell cache file
$this->_TableName = $tableName; $this->TableName = $tableName;
} // function copyCellCollection() }
/** /**
* Clear the cell collection and disconnect from our parent * Clear the cell collection and disconnect from our parent
* *
* @return void * @return void
*/ */
public function unsetWorksheetCells() { public function unsetWorksheetCells()
if(!is_null($this->_currentObject)) { {
$this->_currentObject->detach(); if (!is_null($this->currentObject)) {
$this->_currentObject = $this->_currentObjectID = null; $this->currentObject->detach();
$this->currentObject = $this->currentObjectID = null;
} }
// detach ourself from the worksheet, so that it can then delete this object successfully // detach ourself from the worksheet, so that it can then delete this object successfully
$this->_parent = null; $this->parent = null;
// Close down the temporary cache file // Close down the temporary cache file
$this->__destruct(); $this->__destruct();
} // function unsetWorksheetCells() }
/** /**
* Initialise this new cell collection * Initialise this new cell collection
* *
* @param PHPExcel_Worksheet $parent The worksheet for this cell collection * @param PHPExcel_Worksheet $parent The worksheet for this cell collection
*/ */
public function __construct(PHPExcel_Worksheet $parent) { public function __construct(PHPExcel_Worksheet $parent)
{
parent::__construct($parent); parent::__construct($parent);
if (is_null($this->_DBHandle)) { if (is_null($this->DBHandle)) {
$this->_TableName = str_replace('.','_',$this->_getUniqueID()); $this->TableName = str_replace('.', '_', $this->getUniqueID());
$_DBName = ':memory:'; $_DBName = ':memory:';
$this->_DBHandle = new SQLiteDatabase($_DBName); $this->DBHandle = new SQLiteDatabase($_DBName);
if ($this->_DBHandle === false) if ($this->DBHandle === false) {
throw new PHPExcel_Exception(sqlite_error_string($this->_DBHandle->lastError())); throw new PHPExcel_Exception(sqlite_error_string($this->DBHandle->lastError()));
if (!$this->_DBHandle->queryExec('CREATE TABLE kvp_'.$this->_TableName.' (id VARCHAR(12) PRIMARY KEY, value BLOB)')) }
throw new PHPExcel_Exception(sqlite_error_string($this->_DBHandle->lastError())); if (!$this->DBHandle->queryExec('CREATE TABLE kvp_'.$this->TableName.' (id VARCHAR(12) PRIMARY KEY, value BLOB)')) {
throw new PHPExcel_Exception(sqlite_error_string($this->DBHandle->lastError()));
}
}
} }
} // function __construct()
/** /**
* Destroy this cell collection * Destroy this cell collection
*/ */
public function __destruct() { public function __destruct()
if (!is_null($this->_DBHandle)) { {
$this->_DBHandle->queryExec('DROP TABLE kvp_'.$this->_TableName); if (!is_null($this->DBHandle)) {
$this->DBHandle->queryExec('DROP TABLE kvp_'.$this->TableName);
}
$this->DBHandle = null;
} }
$this->_DBHandle = null;
} // function __destruct()
/** /**
* Identify whether the caching method is currently available * Identify whether the caching method is currently available
@@ -295,12 +296,12 @@ class PHPExcel_CachedObjectStorage_SQLite extends PHPExcel_CachedObjectStorage_C
* *
* @return boolean * @return boolean
*/ */
public static function cacheMethodIsAvailable() { public static function cacheMethodIsAvailable()
{
if (!function_exists('sqlite_open')) { if (!function_exists('sqlite_open')) {
return false; return false;
} }
return true; return true;
} }
} }

View File

@@ -1,8 +1,9 @@
<?php <?php
/** /**
* PHPExcel * PHPExcel_CachedObjectStorage_SQLite3
* *
* Copyright (c) 2006 - 2014 PHPExcel * Copyright (c) 2006 - 2015 PHPExcel
* *
* This library is free software; you can redistribute it and/or * This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public * modify it under the terms of the GNU Lesser General Public
@@ -20,62 +21,53 @@
* *
* @category PHPExcel * @category PHPExcel
* @package PHPExcel_CachedObjectStorage * @package PHPExcel_CachedObjectStorage
* @copyright Copyright (c) 2006 - 2014 PHPExcel (http://www.codeplex.com/PHPExcel) * @copyright Copyright (c) 2006 - 2015 PHPExcel (http://www.codeplex.com/PHPExcel)
* @license http://www.gnu.org/licenses/old-licenses/lgpl-2.1.txt LGPL * @license http://www.gnu.org/licenses/old-licenses/lgpl-2.1.txt LGPL
* @version 1.8.0, 2014-03-02 * @version ##VERSION##, ##DATE##
*/ */
class PHPExcel_CachedObjectStorage_SQLite3 extends PHPExcel_CachedObjectStorage_CacheBase implements PHPExcel_CachedObjectStorage_ICache
{
/**
* PHPExcel_CachedObjectStorage_SQLite3
*
* @category PHPExcel
* @package PHPExcel_CachedObjectStorage
* @copyright Copyright (c) 2006 - 2014 PHPExcel (http://www.codeplex.com/PHPExcel)
*/
class PHPExcel_CachedObjectStorage_SQLite3 extends PHPExcel_CachedObjectStorage_CacheBase implements PHPExcel_CachedObjectStorage_ICache {
/** /**
* Database table name * Database table name
* *
* @var string * @var string
*/ */
private $_TableName = null; private $TableName = null;
/** /**
* Database handle * Database handle
* *
* @var resource * @var resource
*/ */
private $_DBHandle = null; private $DBHandle = null;
/** /**
* Prepared statement for a SQLite3 select query * Prepared statement for a SQLite3 select query
* *
* @var SQLite3Stmt * @var SQLite3Stmt
*/ */
private $_selectQuery; private $selectQuery;
/** /**
* Prepared statement for a SQLite3 insert query * Prepared statement for a SQLite3 insert query
* *
* @var SQLite3Stmt * @var SQLite3Stmt
*/ */
private $_insertQuery; private $insertQuery;
/** /**
* Prepared statement for a SQLite3 update query * Prepared statement for a SQLite3 update query
* *
* @var SQLite3Stmt * @var SQLite3Stmt
*/ */
private $_updateQuery; private $updateQuery;
/** /**
* Prepared statement for a SQLite3 delete query * Prepared statement for a SQLite3 delete query
* *
* @var SQLite3Stmt * @var SQLite3Stmt
*/ */
private $_deleteQuery; private $deleteQuery;
/** /**
* Store cell data in cache for the current cell object if it's "dirty", * Store cell data in cache for the current cell object if it's "dirty",
@@ -84,41 +76,42 @@ class PHPExcel_CachedObjectStorage_SQLite3 extends PHPExcel_CachedObjectStorage_
* @return void * @return void
* @throws PHPExcel_Exception * @throws PHPExcel_Exception
*/ */
protected function _storeData() { protected function storeData()
if ($this->_currentCellIsDirty && !empty($this->_currentObjectID)) { {
$this->_currentObject->detach(); if ($this->currentCellIsDirty && !empty($this->currentObjectID)) {
$this->currentObject->detach();
$this->_insertQuery->bindValue('id',$this->_currentObjectID,SQLITE3_TEXT); $this->insertQuery->bindValue('id', $this->currentObjectID, SQLITE3_TEXT);
$this->_insertQuery->bindValue('data',serialize($this->_currentObject),SQLITE3_BLOB); $this->insertQuery->bindValue('data', serialize($this->currentObject), SQLITE3_BLOB);
$result = $this->_insertQuery->execute(); $result = $this->insertQuery->execute();
if ($result === false) if ($result === false) {
throw new PHPExcel_Exception($this->_DBHandle->lastErrorMsg()); throw new PHPExcel_Exception($this->DBHandle->lastErrorMsg());
$this->_currentCellIsDirty = false; }
$this->currentCellIsDirty = false;
}
$this->currentObjectID = $this->currentObject = null;
} }
$this->_currentObjectID = $this->_currentObject = null;
} // function _storeData()
/** /**
* Add or Update a cell in cache identified by coordinate address * Add or Update a cell in cache identified by coordinate address
* *
* @param string $pCoord Coordinate address of the cell to update * @param string $pCoord Coordinate address of the cell to update
* @param PHPExcel_Cell $cell Cell to update * @param PHPExcel_Cell $cell Cell to update
* @return void * @return PHPExcel_Cell
* @throws PHPExcel_Exception * @throws PHPExcel_Exception
*/ */
public function addCacheData($pCoord, PHPExcel_Cell $cell) { public function addCacheData($pCoord, PHPExcel_Cell $cell)
if (($pCoord !== $this->_currentObjectID) && ($this->_currentObjectID !== null)) { {
$this->_storeData(); if (($pCoord !== $this->currentObjectID) && ($this->currentObjectID !== null)) {
$this->storeData();
} }
$this->_currentObjectID = $pCoord; $this->currentObjectID = $pCoord;
$this->_currentObject = $cell; $this->currentObject = $cell;
$this->_currentCellIsDirty = true; $this->currentCellIsDirty = true;
return $cell; return $cell;
} // function addCacheData() }
/** /**
* Get cell at a specific coordinate * Get cell at a specific coordinate
@@ -127,34 +120,34 @@ class PHPExcel_CachedObjectStorage_SQLite3 extends PHPExcel_CachedObjectStorage_
* @throws PHPExcel_Exception * @throws PHPExcel_Exception
* @return PHPExcel_Cell Cell that was found, or null if not found * @return PHPExcel_Cell Cell that was found, or null if not found
*/ */
public function getCacheData($pCoord) { public function getCacheData($pCoord)
if ($pCoord === $this->_currentObjectID) { {
return $this->_currentObject; if ($pCoord === $this->currentObjectID) {
return $this->currentObject;
} }
$this->_storeData(); $this->storeData();
$this->_selectQuery->bindValue('id',$pCoord,SQLITE3_TEXT); $this->selectQuery->bindValue('id', $pCoord, SQLITE3_TEXT);
$cellResult = $this->_selectQuery->execute(); $cellResult = $this->selectQuery->execute();
if ($cellResult === FALSE) { if ($cellResult === false) {
throw new PHPExcel_Exception($this->_DBHandle->lastErrorMsg()); throw new PHPExcel_Exception($this->DBHandle->lastErrorMsg());
} }
$cellData = $cellResult->fetchArray(SQLITE3_ASSOC); $cellData = $cellResult->fetchArray(SQLITE3_ASSOC);
if ($cellData === FALSE) { if ($cellData === false) {
// Return null if requested entry doesn't exist in cache // Return null if requested entry doesn't exist in cache
return NULL; return null;
} }
// Set current entry to the requested entry // Set current entry to the requested entry
$this->_currentObjectID = $pCoord; $this->currentObjectID = $pCoord;
$this->_currentObject = unserialize($cellData['value']); $this->currentObject = unserialize($cellData['value']);
// Re-attach this as the cell's parent // Re-attach this as the cell's parent
$this->_currentObject->attach($this); $this->currentObject->attach($this);
// Return requested entry // Return requested entry
return $this->_currentObject; return $this->currentObject;
} // function getCacheData() }
/** /**
* Is a value set for an indexed cell? * Is a value set for an indexed cell?
@@ -162,22 +155,22 @@ class PHPExcel_CachedObjectStorage_SQLite3 extends PHPExcel_CachedObjectStorage_
* @param string $pCoord Coordinate address of the cell to check * @param string $pCoord Coordinate address of the cell to check
* @return boolean * @return boolean
*/ */
public function isDataSet($pCoord) { public function isDataSet($pCoord)
if ($pCoord === $this->_currentObjectID) { {
return TRUE; if ($pCoord === $this->currentObjectID) {
return true;
} }
// Check if the requested entry exists in the cache // Check if the requested entry exists in the cache
$this->_selectQuery->bindValue('id',$pCoord,SQLITE3_TEXT); $this->selectQuery->bindValue('id', $pCoord, SQLITE3_TEXT);
$cellResult = $this->_selectQuery->execute(); $cellResult = $this->selectQuery->execute();
if ($cellResult === FALSE) { if ($cellResult === false) {
throw new PHPExcel_Exception($this->_DBHandle->lastErrorMsg()); throw new PHPExcel_Exception($this->DBHandle->lastErrorMsg());
} }
$cellData = $cellResult->fetchArray(SQLITE3_ASSOC); $cellData = $cellResult->fetchArray(SQLITE3_ASSOC);
return ($cellData === FALSE) ? FALSE : TRUE; return ($cellData === false) ? false : true;
} // function isDataSet() }
/** /**
* Delete a cell in cache identified by coordinate address * Delete a cell in cache identified by coordinate address
@@ -185,21 +178,22 @@ class PHPExcel_CachedObjectStorage_SQLite3 extends PHPExcel_CachedObjectStorage_
* @param string $pCoord Coordinate address of the cell to delete * @param string $pCoord Coordinate address of the cell to delete
* @throws PHPExcel_Exception * @throws PHPExcel_Exception
*/ */
public function deleteCacheData($pCoord) { public function deleteCacheData($pCoord)
if ($pCoord === $this->_currentObjectID) { {
$this->_currentObject->detach(); if ($pCoord === $this->currentObjectID) {
$this->_currentObjectID = $this->_currentObject = NULL; $this->currentObject->detach();
$this->currentObjectID = $this->currentObject = null;
} }
// Check if the requested entry exists in the cache // Check if the requested entry exists in the cache
$this->_deleteQuery->bindValue('id',$pCoord,SQLITE3_TEXT); $this->deleteQuery->bindValue('id', $pCoord, SQLITE3_TEXT);
$result = $this->_deleteQuery->execute(); $result = $this->deleteQuery->execute();
if ($result === FALSE) if ($result === false) {
throw new PHPExcel_Exception($this->_DBHandle->lastErrorMsg()); throw new PHPExcel_Exception($this->DBHandle->lastErrorMsg());
}
$this->_currentCellIsDirty = FALSE;
} // function deleteCacheData()
$this->currentCellIsDirty = false;
}
/** /**
* Move a cell object from one address to another * Move a cell object from one address to another
@@ -208,40 +202,44 @@ class PHPExcel_CachedObjectStorage_SQLite3 extends PHPExcel_CachedObjectStorage_
* @param string $toAddress Destination address of the cell to move * @param string $toAddress Destination address of the cell to move
* @return boolean * @return boolean
*/ */
public function moveCell($fromAddress, $toAddress) { public function moveCell($fromAddress, $toAddress)
if ($fromAddress === $this->_currentObjectID) { {
$this->_currentObjectID = $toAddress; if ($fromAddress === $this->currentObjectID) {
$this->currentObjectID = $toAddress;
} }
$this->_deleteQuery->bindValue('id',$toAddress,SQLITE3_TEXT); $this->deleteQuery->bindValue('id', $toAddress, SQLITE3_TEXT);
$result = $this->_deleteQuery->execute(); $result = $this->deleteQuery->execute();
if ($result === false) if ($result === false) {
throw new PHPExcel_Exception($this->_DBHandle->lastErrorMsg()); throw new PHPExcel_Exception($this->DBHandle->lastErrorMsg());
}
$this->_updateQuery->bindValue('toid',$toAddress,SQLITE3_TEXT); $this->updateQuery->bindValue('toid', $toAddress, SQLITE3_TEXT);
$this->_updateQuery->bindValue('fromid',$fromAddress,SQLITE3_TEXT); $this->updateQuery->bindValue('fromid', $fromAddress, SQLITE3_TEXT);
$result = $this->_updateQuery->execute(); $result = $this->updateQuery->execute();
if ($result === false) if ($result === false) {
throw new PHPExcel_Exception($this->_DBHandle->lastErrorMsg()); throw new PHPExcel_Exception($this->DBHandle->lastErrorMsg());
}
return TRUE;
} // function moveCell()
return true;
}
/** /**
* Get a list of all cell addresses currently held in cache * Get a list of all cell addresses currently held in cache
* *
* @return array of string * @return string[]
*/ */
public function getCellList() { public function getCellList()
if ($this->_currentObjectID !== null) { {
$this->_storeData(); if ($this->currentObjectID !== null) {
$this->storeData();
} }
$query = "SELECT id FROM kvp_".$this->_TableName; $query = "SELECT id FROM kvp_".$this->TableName;
$cellIdsResult = $this->_DBHandle->query($query); $cellIdsResult = $this->DBHandle->query($query);
if ($cellIdsResult === false) if ($cellIdsResult === false) {
throw new PHPExcel_Exception($this->_DBHandle->lastErrorMsg()); throw new PHPExcel_Exception($this->DBHandle->lastErrorMsg());
}
$cellKeys = array(); $cellKeys = array();
while ($row = $cellIdsResult->fetchArray(SQLITE3_ASSOC)) { while ($row = $cellIdsResult->fetchArray(SQLITE3_ASSOC)) {
@@ -249,8 +247,7 @@ class PHPExcel_CachedObjectStorage_SQLite3 extends PHPExcel_CachedObjectStorage_
} }
return $cellKeys; return $cellKeys;
} // function getCellList() }
/** /**
* Clone the cell collection * Clone the cell collection
@@ -258,75 +255,79 @@ class PHPExcel_CachedObjectStorage_SQLite3 extends PHPExcel_CachedObjectStorage_
* @param PHPExcel_Worksheet $parent The new worksheet * @param PHPExcel_Worksheet $parent The new worksheet
* @return void * @return void
*/ */
public function copyCellCollection(PHPExcel_Worksheet $parent) { public function copyCellCollection(PHPExcel_Worksheet $parent)
$this->_currentCellIsDirty; {
$this->_storeData(); $this->currentCellIsDirty;
$this->storeData();
// Get a new id for the new table name // Get a new id for the new table name
$tableName = str_replace('.','_',$this->_getUniqueID()); $tableName = str_replace('.', '_', $this->getUniqueID());
if (!$this->_DBHandle->exec('CREATE TABLE kvp_'.$tableName.' (id VARCHAR(12) PRIMARY KEY, value BLOB) if (!$this->DBHandle->exec('CREATE TABLE kvp_'.$tableName.' (id VARCHAR(12) PRIMARY KEY, value BLOB)
AS SELECT * FROM kvp_'.$this->_TableName)) AS SELECT * FROM kvp_'.$this->TableName)
throw new PHPExcel_Exception($this->_DBHandle->lastErrorMsg()); ) {
throw new PHPExcel_Exception($this->DBHandle->lastErrorMsg());
}
// Copy the existing cell cache file // Copy the existing cell cache file
$this->_TableName = $tableName; $this->TableName = $tableName;
} // function copyCellCollection() }
/** /**
* Clear the cell collection and disconnect from our parent * Clear the cell collection and disconnect from our parent
* *
* @return void * @return void
*/ */
public function unsetWorksheetCells() { public function unsetWorksheetCells()
if(!is_null($this->_currentObject)) { {
$this->_currentObject->detach(); if (!is_null($this->currentObject)) {
$this->_currentObject = $this->_currentObjectID = null; $this->currentObject->detach();
$this->currentObject = $this->currentObjectID = null;
} }
// detach ourself from the worksheet, so that it can then delete this object successfully // detach ourself from the worksheet, so that it can then delete this object successfully
$this->_parent = null; $this->parent = null;
// Close down the temporary cache file // Close down the temporary cache file
$this->__destruct(); $this->__destruct();
} // function unsetWorksheetCells() }
/** /**
* Initialise this new cell collection * Initialise this new cell collection
* *
* @param PHPExcel_Worksheet $parent The worksheet for this cell collection * @param PHPExcel_Worksheet $parent The worksheet for this cell collection
*/ */
public function __construct(PHPExcel_Worksheet $parent) { public function __construct(PHPExcel_Worksheet $parent)
{
parent::__construct($parent); parent::__construct($parent);
if (is_null($this->_DBHandle)) { if (is_null($this->DBHandle)) {
$this->_TableName = str_replace('.','_',$this->_getUniqueID()); $this->TableName = str_replace('.', '_', $this->getUniqueID());
$_DBName = ':memory:'; $_DBName = ':memory:';
$this->_DBHandle = new SQLite3($_DBName); $this->DBHandle = new SQLite3($_DBName);
if ($this->_DBHandle === false) if ($this->DBHandle === false) {
throw new PHPExcel_Exception($this->_DBHandle->lastErrorMsg()); throw new PHPExcel_Exception($this->DBHandle->lastErrorMsg());
if (!$this->_DBHandle->exec('CREATE TABLE kvp_'.$this->_TableName.' (id VARCHAR(12) PRIMARY KEY, value BLOB)')) }
throw new PHPExcel_Exception($this->_DBHandle->lastErrorMsg()); if (!$this->DBHandle->exec('CREATE TABLE kvp_'.$this->TableName.' (id VARCHAR(12) PRIMARY KEY, value BLOB)')) {
throw new PHPExcel_Exception($this->DBHandle->lastErrorMsg());
}
} }
$this->_selectQuery = $this->_DBHandle->prepare("SELECT value FROM kvp_".$this->_TableName." WHERE id = :id"); $this->selectQuery = $this->DBHandle->prepare("SELECT value FROM kvp_".$this->TableName." WHERE id = :id");
$this->_insertQuery = $this->_DBHandle->prepare("INSERT OR REPLACE INTO kvp_".$this->_TableName." VALUES(:id,:data)"); $this->insertQuery = $this->DBHandle->prepare("INSERT OR REPLACE INTO kvp_".$this->TableName." VALUES(:id,:data)");
$this->_updateQuery = $this->_DBHandle->prepare("UPDATE kvp_".$this->_TableName." SET id=:toId WHERE id=:fromId"); $this->updateQuery = $this->DBHandle->prepare("UPDATE kvp_".$this->TableName." SET id=:toId WHERE id=:fromId");
$this->_deleteQuery = $this->_DBHandle->prepare("DELETE FROM kvp_".$this->_TableName." WHERE id = :id"); $this->deleteQuery = $this->DBHandle->prepare("DELETE FROM kvp_".$this->TableName." WHERE id = :id");
} // function __construct() }
/** /**
* Destroy this cell collection * Destroy this cell collection
*/ */
public function __destruct() { public function __destruct()
if (!is_null($this->_DBHandle)) { {
$this->_DBHandle->exec('DROP TABLE kvp_'.$this->_TableName); if (!is_null($this->DBHandle)) {
$this->_DBHandle->close(); $this->DBHandle->exec('DROP TABLE kvp_'.$this->TableName);
$this->DBHandle->close();
}
$this->DBHandle = null;
} }
$this->_DBHandle = null;
} // function __destruct()
/** /**
* Identify whether the caching method is currently available * Identify whether the caching method is currently available
@@ -334,12 +335,12 @@ class PHPExcel_CachedObjectStorage_SQLite3 extends PHPExcel_CachedObjectStorage_
* *
* @return boolean * @return boolean
*/ */
public static function cacheMethodIsAvailable() { public static function cacheMethodIsAvailable()
if (!class_exists('SQLite3',FALSE)) { {
if (!class_exists('SQLite3', false)) {
return false; return false;
} }
return true; return true;
} }
} }

View File

@@ -1,8 +1,9 @@
<?php <?php
/** /**
* PHPExcel * PHPExcel_CachedObjectStorage_Wincache
* *
* Copyright (c) 2006 - 2014 PHPExcel * Copyright (c) 2006 - 2015 PHPExcel
* *
* This library is free software; you can redistribute it and/or * This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public * modify it under the terms of the GNU Lesser General Public
@@ -20,34 +21,25 @@
* *
* @category PHPExcel * @category PHPExcel
* @package PHPExcel_CachedObjectStorage * @package PHPExcel_CachedObjectStorage
* @copyright Copyright (c) 2006 - 2014 PHPExcel (http://www.codeplex.com/PHPExcel) * @copyright Copyright (c) 2006 - 2015 PHPExcel (http://www.codeplex.com/PHPExcel)
* @license http://www.gnu.org/licenses/old-licenses/lgpl-2.1.txt LGPL * @license http://www.gnu.org/licenses/old-licenses/lgpl-2.1.txt LGPL
* @version 1.8.0, 2014-03-02 * @version ##VERSION##, ##DATE##
*/ */
class PHPExcel_CachedObjectStorage_Wincache extends PHPExcel_CachedObjectStorage_CacheBase implements PHPExcel_CachedObjectStorage_ICache
{
/**
* PHPExcel_CachedObjectStorage_Wincache
*
* @category PHPExcel
* @package PHPExcel_CachedObjectStorage
* @copyright Copyright (c) 2006 - 2014 PHPExcel (http://www.codeplex.com/PHPExcel)
*/
class PHPExcel_CachedObjectStorage_Wincache extends PHPExcel_CachedObjectStorage_CacheBase implements PHPExcel_CachedObjectStorage_ICache {
/** /**
* Prefix used to uniquely identify cache data for this worksheet * Prefix used to uniquely identify cache data for this worksheet
* *
* @var string * @var string
*/ */
private $_cachePrefix = null; private $cachePrefix = null;
/** /**
* Cache timeout * Cache timeout
* *
* @var integer * @var integer
*/ */
private $_cacheTime = 600; private $cacheTime = 600;
/** /**
@@ -57,50 +49,50 @@ class PHPExcel_CachedObjectStorage_Wincache extends PHPExcel_CachedObjectStorage
* @return void * @return void
* @throws PHPExcel_Exception * @throws PHPExcel_Exception
*/ */
protected function _storeData() { protected function storeData()
if ($this->_currentCellIsDirty && !empty($this->_currentObjectID)) { {
$this->_currentObject->detach(); if ($this->currentCellIsDirty && !empty($this->currentObjectID)) {
$this->currentObject->detach();
$obj = serialize($this->_currentObject); $obj = serialize($this->currentObject);
if (wincache_ucache_exists($this->_cachePrefix.$this->_currentObjectID.'.cache')) { if (wincache_ucache_exists($this->cachePrefix.$this->currentObjectID.'.cache')) {
if (!wincache_ucache_set($this->_cachePrefix.$this->_currentObjectID.'.cache', $obj, $this->_cacheTime)) { if (!wincache_ucache_set($this->cachePrefix.$this->currentObjectID.'.cache', $obj, $this->cacheTime)) {
$this->__destruct(); $this->__destruct();
throw new PHPExcel_Exception('Failed to store cell '.$this->_currentObjectID.' in WinCache'); throw new PHPExcel_Exception('Failed to store cell '.$this->currentObjectID.' in WinCache');
} }
} else { } else {
if (!wincache_ucache_add($this->_cachePrefix.$this->_currentObjectID.'.cache', $obj, $this->_cacheTime)) { if (!wincache_ucache_add($this->cachePrefix.$this->currentObjectID.'.cache', $obj, $this->cacheTime)) {
$this->__destruct(); $this->__destruct();
throw new PHPExcel_Exception('Failed to store cell '.$this->_currentObjectID.' in WinCache'); throw new PHPExcel_Exception('Failed to store cell '.$this->currentObjectID.' in WinCache');
} }
} }
$this->_currentCellIsDirty = false; $this->currentCellIsDirty = false;
} }
$this->_currentObjectID = $this->_currentObject = null; $this->currentObjectID = $this->currentObject = null;
} // function _storeData() }
/** /**
* Add or Update a cell in cache identified by coordinate address * Add or Update a cell in cache identified by coordinate address
* *
* @param string $pCoord Coordinate address of the cell to update * @param string $pCoord Coordinate address of the cell to update
* @param PHPExcel_Cell $cell Cell to update * @param PHPExcel_Cell $cell Cell to update
* @return void * @return PHPExcel_Cell
* @throws PHPExcel_Exception * @throws PHPExcel_Exception
*/ */
public function addCacheData($pCoord, PHPExcel_Cell $cell) { public function addCacheData($pCoord, PHPExcel_Cell $cell)
if (($pCoord !== $this->_currentObjectID) && ($this->_currentObjectID !== null)) { {
$this->_storeData(); if (($pCoord !== $this->currentObjectID) && ($this->currentObjectID !== null)) {
$this->storeData();
} }
$this->_cellCache[$pCoord] = true; $this->cellCache[$pCoord] = true;
$this->_currentObjectID = $pCoord; $this->currentObjectID = $pCoord;
$this->_currentObject = $cell; $this->currentObject = $cell;
$this->_currentCellIsDirty = true; $this->currentCellIsDirty = true;
return $cell; return $cell;
} // function addCacheData() }
/** /**
* Is a value set in the current PHPExcel_CachedObjectStorage_ICache for an indexed cell? * Is a value set in the current PHPExcel_CachedObjectStorage_ICache for an indexed cell?
@@ -108,14 +100,15 @@ class PHPExcel_CachedObjectStorage_Wincache extends PHPExcel_CachedObjectStorage
* @param string $pCoord Coordinate address of the cell to check * @param string $pCoord Coordinate address of the cell to check
* @return boolean * @return boolean
*/ */
public function isDataSet($pCoord) { public function isDataSet($pCoord)
{
// Check if the requested entry is the current object, or exists in the cache // Check if the requested entry is the current object, or exists in the cache
if (parent::isDataSet($pCoord)) { if (parent::isDataSet($pCoord)) {
if ($this->_currentObjectID == $pCoord) { if ($this->currentObjectID == $pCoord) {
return true; return true;
} }
// Check if the requested entry still exists in cache // Check if the requested entry still exists in cache
$success = wincache_ucache_exists($this->_cachePrefix.$pCoord.'.cache'); $success = wincache_ucache_exists($this->cachePrefix.$pCoord.'.cache');
if ($success === false) { if ($success === false) {
// Entry no longer exists in Wincache, so clear it from the cache array // Entry no longer exists in Wincache, so clear it from the cache array
parent::deleteCacheData($pCoord); parent::deleteCacheData($pCoord);
@@ -124,7 +117,7 @@ class PHPExcel_CachedObjectStorage_Wincache extends PHPExcel_CachedObjectStorage
return true; return true;
} }
return false; return false;
} // function isDataSet() }
/** /**
@@ -134,17 +127,18 @@ class PHPExcel_CachedObjectStorage_Wincache extends PHPExcel_CachedObjectStorage
* @throws PHPExcel_Exception * @throws PHPExcel_Exception
* @return PHPExcel_Cell Cell that was found, or null if not found * @return PHPExcel_Cell Cell that was found, or null if not found
*/ */
public function getCacheData($pCoord) { public function getCacheData($pCoord)
if ($pCoord === $this->_currentObjectID) { {
return $this->_currentObject; if ($pCoord === $this->currentObjectID) {
return $this->currentObject;
} }
$this->_storeData(); $this->storeData();
// Check if the entry that has been requested actually exists // Check if the entry that has been requested actually exists
$obj = null; $obj = null;
if (parent::isDataSet($pCoord)) { if (parent::isDataSet($pCoord)) {
$success = false; $success = false;
$obj = wincache_ucache_get($this->_cachePrefix.$pCoord.'.cache', $success); $obj = wincache_ucache_get($this->cachePrefix.$pCoord.'.cache', $success);
if ($success === false) { if ($success === false) {
// Entry no longer exists in WinCache, so clear it from the cache array // Entry no longer exists in WinCache, so clear it from the cache array
parent::deleteCacheData($pCoord); parent::deleteCacheData($pCoord);
@@ -156,44 +150,44 @@ class PHPExcel_CachedObjectStorage_Wincache extends PHPExcel_CachedObjectStorage
} }
// Set current entry to the requested entry // Set current entry to the requested entry
$this->_currentObjectID = $pCoord; $this->currentObjectID = $pCoord;
$this->_currentObject = unserialize($obj); $this->currentObject = unserialize($obj);
// Re-attach this as the cell's parent // Re-attach this as the cell's parent
$this->_currentObject->attach($this); $this->currentObject->attach($this);
// Return requested entry // Return requested entry
return $this->_currentObject; return $this->currentObject;
} // function getCacheData() }
/** /**
* Get a list of all cell addresses currently held in cache * Get a list of all cell addresses currently held in cache
* *
* @return array of string * @return string[]
*/ */
public function getCellList() { public function getCellList()
if ($this->_currentObjectID !== null) { {
$this->_storeData(); if ($this->currentObjectID !== null) {
$this->storeData();
} }
return parent::getCellList(); return parent::getCellList();
} }
/** /**
* Delete a cell in cache identified by coordinate address * Delete a cell in cache identified by coordinate address
* *
* @param string $pCoord Coordinate address of the cell to delete * @param string $pCoord Coordinate address of the cell to delete
* @throws PHPExcel_Exception * @throws PHPExcel_Exception
*/ */
public function deleteCacheData($pCoord) { public function deleteCacheData($pCoord)
{
// Delete the entry from Wincache // Delete the entry from Wincache
wincache_ucache_delete($this->_cachePrefix.$pCoord.'.cache'); wincache_ucache_delete($this->cachePrefix.$pCoord.'.cache');
// Delete the entry from our cell address array // Delete the entry from our cell address array
parent::deleteCacheData($pCoord); parent::deleteCacheData($pCoord);
} // function deleteCacheData() }
/** /**
* Clone the cell collection * Clone the cell collection
@@ -201,29 +195,30 @@ class PHPExcel_CachedObjectStorage_Wincache extends PHPExcel_CachedObjectStorage
* @param PHPExcel_Worksheet $parent The new worksheet * @param PHPExcel_Worksheet $parent The new worksheet
* @return void * @return void
*/ */
public function copyCellCollection(PHPExcel_Worksheet $parent) { public function copyCellCollection(PHPExcel_Worksheet $parent)
{
parent::copyCellCollection($parent); parent::copyCellCollection($parent);
// Get a new id for the new file name // Get a new id for the new file name
$baseUnique = $this->_getUniqueID(); $baseUnique = $this->getUniqueID();
$newCachePrefix = substr(md5($baseUnique),0,8).'.'; $newCachePrefix = substr(md5($baseUnique), 0, 8) . '.';
$cacheList = $this->getCellList(); $cacheList = $this->getCellList();
foreach($cacheList as $cellID) { foreach ($cacheList as $cellID) {
if ($cellID != $this->_currentObjectID) { if ($cellID != $this->currentObjectID) {
$success = false; $success = false;
$obj = wincache_ucache_get($this->_cachePrefix.$cellID.'.cache', $success); $obj = wincache_ucache_get($this->cachePrefix.$cellID.'.cache', $success);
if ($success === false) { if ($success === false) {
// Entry no longer exists in WinCache, so clear it from the cache array // Entry no longer exists in WinCache, so clear it from the cache array
parent::deleteCacheData($cellID); parent::deleteCacheData($cellID);
throw new PHPExcel_Exception('Cell entry '.$cellID.' no longer exists in Wincache'); throw new PHPExcel_Exception('Cell entry '.$cellID.' no longer exists in Wincache');
} }
if (!wincache_ucache_add($newCachePrefix.$cellID.'.cache', $obj, $this->_cacheTime)) { if (!wincache_ucache_add($newCachePrefix.$cellID.'.cache', $obj, $this->cacheTime)) {
$this->__destruct(); $this->__destruct();
throw new PHPExcel_Exception('Failed to store cell '.$cellID.' in Wincache'); throw new PHPExcel_Exception('Failed to store cell '.$cellID.' in Wincache');
} }
} }
} }
$this->_cachePrefix = $newCachePrefix; $this->cachePrefix = $newCachePrefix;
} // function copyCellCollection() }
/** /**
@@ -231,21 +226,21 @@ class PHPExcel_CachedObjectStorage_Wincache extends PHPExcel_CachedObjectStorage
* *
* @return void * @return void
*/ */
public function unsetWorksheetCells() { public function unsetWorksheetCells()
if(!is_null($this->_currentObject)) { {
$this->_currentObject->detach(); if (!is_null($this->currentObject)) {
$this->_currentObject = $this->_currentObjectID = null; $this->currentObject->detach();
$this->currentObject = $this->currentObjectID = null;
} }
// Flush the WinCache cache // Flush the WinCache cache
$this->__destruct(); $this->__destruct();
$this->_cellCache = array(); $this->cellCache = array();
// detach ourself from the worksheet, so that it can then delete this object successfully // detach ourself from the worksheet, so that it can then delete this object successfully
$this->_parent = null; $this->parent = null;
} // function unsetWorksheetCells() }
/** /**
* Initialise this new cell collection * Initialise this new cell collection
@@ -253,29 +248,29 @@ class PHPExcel_CachedObjectStorage_Wincache extends PHPExcel_CachedObjectStorage
* @param PHPExcel_Worksheet $parent The worksheet for this cell collection * @param PHPExcel_Worksheet $parent The worksheet for this cell collection
* @param array of mixed $arguments Additional initialisation arguments * @param array of mixed $arguments Additional initialisation arguments
*/ */
public function __construct(PHPExcel_Worksheet $parent, $arguments) { public function __construct(PHPExcel_Worksheet $parent, $arguments)
{
$cacheTime = (isset($arguments['cacheTime'])) ? $arguments['cacheTime'] : 600; $cacheTime = (isset($arguments['cacheTime'])) ? $arguments['cacheTime'] : 600;
if (is_null($this->_cachePrefix)) { if (is_null($this->cachePrefix)) {
$baseUnique = $this->_getUniqueID(); $baseUnique = $this->getUniqueID();
$this->_cachePrefix = substr(md5($baseUnique),0,8).'.'; $this->cachePrefix = substr(md5($baseUnique), 0, 8).'.';
$this->_cacheTime = $cacheTime; $this->cacheTime = $cacheTime;
parent::__construct($parent); parent::__construct($parent);
} }
} // function __construct() }
/** /**
* Destroy this cell collection * Destroy this cell collection
*/ */
public function __destruct() { public function __destruct()
{
$cacheList = $this->getCellList(); $cacheList = $this->getCellList();
foreach($cacheList as $cellID) { foreach ($cacheList as $cellID) {
wincache_ucache_delete($this->_cachePrefix.$cellID.'.cache'); wincache_ucache_delete($this->cachePrefix.$cellID.'.cache');
}
} }
} // function __destruct()
/** /**
* Identify whether the caching method is currently available * Identify whether the caching method is currently available
@@ -283,12 +278,12 @@ class PHPExcel_CachedObjectStorage_Wincache extends PHPExcel_CachedObjectStorage
* *
* @return boolean * @return boolean
*/ */
public static function cacheMethodIsAvailable() { public static function cacheMethodIsAvailable()
{
if (!function_exists('wincache_ucache_add')) { if (!function_exists('wincache_ucache_add')) {
return false; return false;
} }
return true; return true;
} }
} }

View File

@@ -1,9 +1,9 @@
<?php <?php
/** /**
* PHPExcel * PHPExcel_CachedObjectStorageFactory
* *
* Copyright (c) 2006 - 2014 PHPExcel * Copyright (c) 2006 - 2015 PHPExcel
* *
* This library is free software; you can redistribute it and/or * This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public * modify it under the terms of the GNU Lesser General Public
@@ -21,18 +21,9 @@
* *
* @category PHPExcel * @category PHPExcel
* @package PHPExcel_CachedObjectStorage * @package PHPExcel_CachedObjectStorage
* @copyright Copyright (c) 2006 - 2014 PHPExcel (http://www.codeplex.com/PHPExcel) * @copyright Copyright (c) 2006 - 2015 PHPExcel (http://www.codeplex.com/PHPExcel)
* @license http://www.gnu.org/licenses/old-licenses/lgpl-2.1.txt LGPL * @license http://www.gnu.org/licenses/old-licenses/lgpl-2.1.txt LGPL
* @version 1.8.0, 2014-03-02 * @version ##VERSION##, ##DATE##
*/
/**
* PHPExcel_CachedObjectStorageFactory
*
* @category PHPExcel
* @package PHPExcel_CachedObjectStorage
* @copyright Copyright (c) 2006 - 2014 PHPExcel (http://www.codeplex.com/PHPExcel)
*/ */
class PHPExcel_CachedObjectStorageFactory class PHPExcel_CachedObjectStorageFactory
{ {
@@ -48,28 +39,26 @@ class PHPExcel_CachedObjectStorageFactory
const cache_to_sqlite = 'SQLite'; const cache_to_sqlite = 'SQLite';
const cache_to_sqlite3 = 'SQLite3'; const cache_to_sqlite3 = 'SQLite3';
/** /**
* Name of the method used for cell cacheing * Name of the method used for cell cacheing
* *
* @var string * @var string
*/ */
private static $_cacheStorageMethod = NULL; private static $cacheStorageMethod = null;
/** /**
* Name of the class used for cell cacheing * Name of the class used for cell cacheing
* *
* @var string * @var string
*/ */
private static $_cacheStorageClass = NULL; private static $cacheStorageClass = null;
/** /**
* List of all possible cache storage methods * List of all possible cache storage methods
* *
* @var string[] * @var string[]
*/ */
private static $_storageMethods = array( private static $storageMethods = array(
self::cache_in_memory, self::cache_in_memory,
self::cache_in_memory_gzip, self::cache_in_memory_gzip,
self::cache_in_memory_serialized, self::cache_in_memory_serialized,
@@ -83,13 +72,12 @@ class PHPExcel_CachedObjectStorageFactory
self::cache_to_sqlite3, self::cache_to_sqlite3,
); );
/** /**
* Default arguments for each cache storage method * Default arguments for each cache storage method
* *
* @var array of mixed array * @var array of mixed array
*/ */
private static $_storageMethodDefaultParameters = array( private static $storageMethodDefaultParameters = array(
self::cache_in_memory => array( self::cache_in_memory => array(
), ),
self::cache_in_memory_gzip => array( self::cache_in_memory_gzip => array(
@@ -100,7 +88,7 @@ class PHPExcel_CachedObjectStorageFactory
), ),
self::cache_to_phpTemp => array( 'memoryCacheSize' => '1MB' self::cache_to_phpTemp => array( 'memoryCacheSize' => '1MB'
), ),
self::cache_to_discISAM => array( 'dir' => NULL self::cache_to_discISAM => array( 'dir' => null
), ),
self::cache_to_apc => array( 'cacheTime' => 600 self::cache_to_apc => array( 'cacheTime' => 600
), ),
@@ -116,36 +104,32 @@ class PHPExcel_CachedObjectStorageFactory
), ),
); );
/** /**
* Arguments for the active cache storage method * Arguments for the active cache storage method
* *
* @var array of mixed array * @var array of mixed array
*/ */
private static $_storageMethodParameters = array(); private static $storageMethodParameters = array();
/** /**
* Return the current cache storage method * Return the current cache storage method
* *
* @return string|NULL * @return string|null
**/ **/
public static function getCacheStorageMethod() public static function getCacheStorageMethod()
{ {
return self::$_cacheStorageMethod; return self::$cacheStorageMethod;
} // function getCacheStorageMethod() }
/** /**
* Return the current cache storage class * Return the current cache storage class
* *
* @return PHPExcel_CachedObjectStorage_ICache|NULL * @return PHPExcel_CachedObjectStorage_ICache|null
**/ **/
public static function getCacheStorageClass() public static function getCacheStorageClass()
{ {
return self::$_cacheStorageClass; return self::$cacheStorageClass;
} // function getCacheStorageClass() }
/** /**
* Return the list of all possible cache storage methods * Return the list of all possible cache storage methods
@@ -154,9 +138,8 @@ class PHPExcel_CachedObjectStorageFactory
**/ **/
public static function getAllCacheStorageMethods() public static function getAllCacheStorageMethods()
{ {
return self::$_storageMethods; return self::$storageMethods;
} // function getCacheStorageMethods() }
/** /**
* Return the list of all available cache storage methods * Return the list of all available cache storage methods
@@ -166,15 +149,14 @@ class PHPExcel_CachedObjectStorageFactory
public static function getCacheStorageMethods() public static function getCacheStorageMethods()
{ {
$activeMethods = array(); $activeMethods = array();
foreach(self::$_storageMethods as $storageMethod) { foreach (self::$storageMethods as $storageMethod) {
$cacheStorageClass = 'PHPExcel_CachedObjectStorage_' . $storageMethod; $cacheStorageClass = 'PHPExcel_CachedObjectStorage_' . $storageMethod;
if (call_user_func(array($cacheStorageClass, 'cacheMethodIsAvailable'))) { if (call_user_func(array($cacheStorageClass, 'cacheMethodIsAvailable'))) {
$activeMethods[] = $storageMethod; $activeMethods[] = $storageMethod;
} }
} }
return $activeMethods; return $activeMethods;
} // function getCacheStorageMethods() }
/** /**
* Identify the cache storage method to use * Identify the cache storage method to use
@@ -186,30 +168,29 @@ class PHPExcel_CachedObjectStorageFactory
**/ **/
public static function initialize($method = self::cache_in_memory, $arguments = array()) public static function initialize($method = self::cache_in_memory, $arguments = array())
{ {
if (!in_array($method,self::$_storageMethods)) { if (!in_array($method, self::$storageMethods)) {
return FALSE; return false;
} }
$cacheStorageClass = 'PHPExcel_CachedObjectStorage_'.$method; $cacheStorageClass = 'PHPExcel_CachedObjectStorage_'.$method;
if (!call_user_func(array( $cacheStorageClass, if (!call_user_func(array( $cacheStorageClass,
'cacheMethodIsAvailable'))) { 'cacheMethodIsAvailable'))) {
return FALSE; return false;
} }
self::$_storageMethodParameters[$method] = self::$_storageMethodDefaultParameters[$method]; self::$storageMethodParameters[$method] = self::$storageMethodDefaultParameters[$method];
foreach($arguments as $k => $v) { foreach ($arguments as $k => $v) {
if (array_key_exists($k, self::$_storageMethodParameters[$method])) { if (array_key_exists($k, self::$storageMethodParameters[$method])) {
self::$_storageMethodParameters[$method][$k] = $v; self::$storageMethodParameters[$method][$k] = $v;
} }
} }
if (self::$_cacheStorageMethod === NULL) { if (self::$cacheStorageMethod === null) {
self::$_cacheStorageClass = 'PHPExcel_CachedObjectStorage_' . $method; self::$cacheStorageClass = 'PHPExcel_CachedObjectStorage_' . $method;
self::$_cacheStorageMethod = $method; self::$cacheStorageMethod = $method;
}
return true;
} }
return TRUE;
} // function initialize()
/** /**
* Initialise the cache storage * Initialise the cache storage
@@ -219,23 +200,23 @@ class PHPExcel_CachedObjectStorageFactory
**/ **/
public static function getInstance(PHPExcel_Worksheet $parent) public static function getInstance(PHPExcel_Worksheet $parent)
{ {
$cacheMethodIsAvailable = TRUE; $cacheMethodIsAvailable = true;
if (self::$_cacheStorageMethod === NULL) { if (self::$cacheStorageMethod === null) {
$cacheMethodIsAvailable = self::initialize(); $cacheMethodIsAvailable = self::initialize();
} }
if ($cacheMethodIsAvailable) { if ($cacheMethodIsAvailable) {
$instance = new self::$_cacheStorageClass( $parent, $instance = new self::$cacheStorageClass(
self::$_storageMethodParameters[self::$_cacheStorageMethod] $parent,
self::$storageMethodParameters[self::$cacheStorageMethod]
); );
if ($instance !== NULL) { if ($instance !== null) {
return $instance; return $instance;
} }
} }
return FALSE; return false;
} // function getInstance() }
/** /**
* Clear the cache storage * Clear the cache storage
@@ -243,9 +224,8 @@ class PHPExcel_CachedObjectStorageFactory
**/ **/
public static function finalize() public static function finalize()
{ {
self::$_cacheStorageMethod = NULL; self::$cacheStorageMethod = null;
self::$_cacheStorageClass = NULL; self::$cacheStorageClass = null;
self::$_storageMethodParameters = array(); self::$storageMethodParameters = array();
} }
} }

View File

@@ -1,8 +1,9 @@
<?php <?php
/** /**
* PHPExcel * PHPExcel_CalcEngine_CyclicReferenceStack
* *
* Copyright (c) 2006 - 2014 PHPExcel * Copyright (c) 2006 - 2015 PHPExcel
* *
* This library is free software; you can redistribute it and/or * This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public * modify it under the terms of the GNU Lesser General Public
@@ -20,36 +21,27 @@
* *
* @category PHPExcel * @category PHPExcel
* @package PHPExcel_Calculation * @package PHPExcel_Calculation
* @copyright Copyright (c) 2006 - 2014 PHPExcel (http://www.codeplex.com/PHPExcel) * @copyright Copyright (c) 2006 - 2015 PHPExcel (http://www.codeplex.com/PHPExcel)
* @license http://www.gnu.org/licenses/old-licenses/lgpl-2.1.txt LGPL * @license http://www.gnu.org/licenses/old-licenses/lgpl-2.1.txt LGPL
* @version 1.8.0, 2014-03-02 * @version ##VERSION##, ##DATE##
*/ */
class PHPExcel_CalcEngine_CyclicReferenceStack
{
/**
* PHPExcel_CalcEngine_CyclicReferenceStack
*
* @category PHPExcel_CalcEngine_CyclicReferenceStack
* @package PHPExcel_Calculation
* @copyright Copyright (c) 2006 - 2014 PHPExcel (http://www.codeplex.com/PHPExcel)
*/
class PHPExcel_CalcEngine_CyclicReferenceStack {
/** /**
* The call stack for calculated cells * The call stack for calculated cells
* *
* @var mixed[] * @var mixed[]
*/ */
private $_stack = array(); private $stack = array();
/** /**
* Return the number of entries on the stack * Return the number of entries on the stack
* *
* @return integer * @return integer
*/ */
public function count() { public function count()
return count($this->_stack); {
return count($this->stack);
} }
/** /**
@@ -57,42 +49,46 @@ class PHPExcel_CalcEngine_CyclicReferenceStack {
* *
* @param mixed $value * @param mixed $value
*/ */
public function push($value) { public function push($value)
$this->_stack[] = $value; {
} // function push() $this->stack[$value] = $value;
}
/** /**
* Pop the last entry from the stack * Pop the last entry from the stack
* *
* @return mixed * @return mixed
*/ */
public function pop() { public function pop()
return array_pop($this->_stack); {
} // function pop() return array_pop($this->stack);
}
/** /**
* Test to see if a specified entry exists on the stack * Test to see if a specified entry exists on the stack
* *
* @param mixed $value The value to test * @param mixed $value The value to test
*/ */
public function onStack($value) { public function onStack($value)
return in_array($value, $this->_stack); {
return isset($this->stack[$value]);
} }
/** /**
* Clear the stack * Clear the stack
*/ */
public function clear() { public function clear()
$this->_stack = array(); {
} // function push() $this->stack = array();
}
/** /**
* Return an array of all entries on the stack * Return an array of all entries on the stack
* *
* @return mixed[] * @return mixed[]
*/ */
public function showStack() { public function showStack()
return $this->_stack; {
return $this->stack;
} }
}
} // class PHPExcel_CalcEngine_CyclicReferenceStack

View File

@@ -1,8 +1,9 @@
<?php <?php
/** /**
* PHPExcel * PHPExcel_CalcEngine_Logger
* *
* Copyright (c) 2006 - 2014 PHPExcel * Copyright (c) 2006 - 2015 PHPExcel
* *
* This library is free software; you can redistribute it and/or * This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public * modify it under the terms of the GNU Lesser General Public
@@ -20,20 +21,12 @@
* *
* @category PHPExcel * @category PHPExcel
* @package PHPExcel_Calculation * @package PHPExcel_Calculation
* @copyright Copyright (c) 2006 - 2014 PHPExcel (http://www.codeplex.com/PHPExcel) * @copyright Copyright (c) 2006 - 2015 PHPExcel (http://www.codeplex.com/PHPExcel)
* @license http://www.gnu.org/licenses/old-licenses/lgpl-2.1.txt LGPL * @license http://www.gnu.org/licenses/old-licenses/lgpl-2.1.txt LGPL
* @version 1.8.0, 2014-03-02 * @version ##VERSION##, ##DATE##
*/ */
class PHPExcel_CalcEngine_Logger
/** {
* PHPExcel_CalcEngine_Logger
*
* @category PHPExcel
* @package PHPExcel_Calculation
* @copyright Copyright (c) 2006 - 2014 PHPExcel (http://www.codeplex.com/PHPExcel)
*/
class PHPExcel_CalcEngine_Logger {
/** /**
* Flag to determine whether a debug log should be generated by the calculation engine * Flag to determine whether a debug log should be generated by the calculation engine
* If true, then a debug log will be generated * If true, then a debug log will be generated
@@ -41,7 +34,7 @@ class PHPExcel_CalcEngine_Logger {
* *
* @var boolean * @var boolean
*/ */
private $_writeDebugLog = FALSE; private $writeDebugLog = false;
/** /**
* Flag to determine whether a debug log should be echoed by the calculation engine * Flag to determine whether a debug log should be echoed by the calculation engine
@@ -51,30 +44,30 @@ class PHPExcel_CalcEngine_Logger {
* *
* @var boolean * @var boolean
*/ */
private $_echoDebugLog = FALSE; private $echoDebugLog = false;
/** /**
* The debug log generated by the calculation engine * The debug log generated by the calculation engine
* *
* @var string[] * @var string[]
*/ */
private $_debugLog = array(); private $debugLog = array();
/** /**
* The calculation engine cell reference stack * The calculation engine cell reference stack
* *
* @var PHPExcel_CalcEngine_CyclicReferenceStack * @var PHPExcel_CalcEngine_CyclicReferenceStack
*/ */
private $_cellStack; private $cellStack;
/** /**
* Instantiate a Calculation engine logger * Instantiate a Calculation engine logger
* *
* @param PHPExcel_CalcEngine_CyclicReferenceStack $stack * @param PHPExcel_CalcEngine_CyclicReferenceStack $stack
*/ */
public function __construct(PHPExcel_CalcEngine_CyclicReferenceStack $stack) { public function __construct(PHPExcel_CalcEngine_CyclicReferenceStack $stack)
$this->_cellStack = $stack; {
$this->cellStack = $stack;
} }
/** /**
@@ -82,8 +75,9 @@ class PHPExcel_CalcEngine_Logger {
* *
* @param boolean $pValue * @param boolean $pValue
*/ */
public function setWriteDebugLog($pValue = FALSE) { public function setWriteDebugLog($pValue = false)
$this->_writeDebugLog = $pValue; {
$this->writeDebugLog = $pValue;
} }
/** /**
@@ -91,8 +85,9 @@ class PHPExcel_CalcEngine_Logger {
* *
* @return boolean * @return boolean
*/ */
public function getWriteDebugLog() { public function getWriteDebugLog()
return $this->_writeDebugLog; {
return $this->writeDebugLog;
} }
/** /**
@@ -100,8 +95,9 @@ class PHPExcel_CalcEngine_Logger {
* *
* @param boolean $pValue * @param boolean $pValue
*/ */
public function setEchoDebugLog($pValue = FALSE) { public function setEchoDebugLog($pValue = false)
$this->_echoDebugLog = $pValue; {
$this->echoDebugLog = $pValue;
} }
/** /**
@@ -109,45 +105,47 @@ class PHPExcel_CalcEngine_Logger {
* *
* @return boolean * @return boolean
*/ */
public function getEchoDebugLog() { public function getEchoDebugLog()
return $this->_echoDebugLog; {
return $this->echoDebugLog;
} }
/** /**
* Write an entry to the calculation engine debug log * Write an entry to the calculation engine debug log
*/ */
public function writeDebugLog() { public function writeDebugLog()
{
// Only write the debug log if logging is enabled // Only write the debug log if logging is enabled
if ($this->_writeDebugLog) { if ($this->writeDebugLog) {
$message = implode(func_get_args()); $message = implode(func_get_args());
$cellReference = implode(' -> ', $this->_cellStack->showStack()); $cellReference = implode(' -> ', $this->cellStack->showStack());
if ($this->_echoDebugLog) { if ($this->echoDebugLog) {
echo $cellReference, echo $cellReference,
($this->_cellStack->count() > 0 ? ' => ' : ''), ($this->cellStack->count() > 0 ? ' => ' : ''),
$message, $message,
PHP_EOL; PHP_EOL;
} }
$this->_debugLog[] = $cellReference . $this->debugLog[] = $cellReference .
($this->_cellStack->count() > 0 ? ' => ' : '') . ($this->cellStack->count() > 0 ? ' => ' : '') .
$message; $message;
} }
} // function _writeDebug() }
/** /**
* Clear the calculation engine debug log * Clear the calculation engine debug log
*/ */
public function clearLog() { public function clearLog()
$this->_debugLog = array(); {
} // function flushLogger() $this->debugLog = array();
}
/** /**
* Return the calculation engine debug log * Return the calculation engine debug log
* *
* @return string[] * @return string[]
*/ */
public function getLog() { public function getLog()
return $this->_debugLog; {
} // function flushLogger() return $this->debugLog;
}
} // class PHPExcel_CalcEngine_Logger }

File diff suppressed because it is too large Load Diff

View File

@@ -1,8 +1,18 @@
<?php <?php
/** PHPExcel root directory */
if (!defined('PHPEXCEL_ROOT')) {
/**
* @ignore
*/
define('PHPEXCEL_ROOT', dirname(__FILE__) . '/../../');
require(PHPEXCEL_ROOT . 'PHPExcel/Autoloader.php');
}
/** /**
* PHPExcel * PHPExcel_Calculation_Database
* *
* Copyright (c) 2006 - 2014 PHPExcel * Copyright (c) 2006 - 2015 PHPExcel
* *
* This library is free software; you can redistribute it and/or * This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public * modify it under the terms of the GNU Lesser General Public
@@ -20,34 +30,14 @@
* *
* @category PHPExcel * @category PHPExcel
* @package PHPExcel_Calculation * @package PHPExcel_Calculation
* @copyright Copyright (c) 2006 - 2014 PHPExcel (http://www.codeplex.com/PHPExcel) * @copyright Copyright (c) 2006 - 2015 PHPExcel (http://www.codeplex.com/PHPExcel)
* @license http://www.gnu.org/licenses/old-licenses/lgpl-2.1.txt LGPL * @license http://www.gnu.org/licenses/old-licenses/lgpl-2.1.txt LGPL
* @version 1.8.0, 2014-03-02 * @version ##VERSION##, ##DATE##
*/ */
class PHPExcel_Calculation_Database
{
/** PHPExcel root directory */
if (!defined('PHPEXCEL_ROOT')) {
/** /**
* @ignore * fieldExtract
*/
define('PHPEXCEL_ROOT', dirname(__FILE__) . '/../../');
require(PHPEXCEL_ROOT . 'PHPExcel/Autoloader.php');
}
/**
* PHPExcel_Calculation_Database
*
* @category PHPExcel
* @package PHPExcel_Calculation
* @copyright Copyright (c) 2006 - 2014 PHPExcel (http://www.codeplex.com/PHPExcel)
*/
class PHPExcel_Calculation_Database {
/**
* __fieldExtract
* *
* Extracts the column ID to use for the data field. * Extracts the column ID to use for the data field.
* *
@@ -64,20 +54,21 @@ class PHPExcel_Calculation_Database {
* @return string|NULL * @return string|NULL
* *
*/ */
private static function __fieldExtract($database,$field) { private static function fieldExtract($database, $field)
{
$field = strtoupper(PHPExcel_Calculation_Functions::flattenSingleValue($field)); $field = strtoupper(PHPExcel_Calculation_Functions::flattenSingleValue($field));
$fieldNames = array_map('strtoupper',array_shift($database)); $fieldNames = array_map('strtoupper', array_shift($database));
if (is_numeric($field)) { if (is_numeric($field)) {
$keys = array_keys($fieldNames); $keys = array_keys($fieldNames);
return $keys[$field-1]; return $keys[$field-1];
} }
$key = array_search($field,$fieldNames); $key = array_search($field, $fieldNames);
return ($key) ? $key : NULL; return ($key) ? $key : null;
} }
/** /**
* __filter * filter
* *
* Parses the selection criteria, extracts the database rows that match those criteria, and * Parses the selection criteria, extracts the database rows that match those criteria, and
* returns that subset of rows. * returns that subset of rows.
@@ -95,47 +86,48 @@ class PHPExcel_Calculation_Database {
* @return array of mixed * @return array of mixed
* *
*/ */
private static function __filter($database,$criteria) { private static function filter($database, $criteria)
{
$fieldNames = array_shift($database); $fieldNames = array_shift($database);
$criteriaNames = array_shift($criteria); $criteriaNames = array_shift($criteria);
// Convert the criteria into a set of AND/OR conditions with [:placeholders] // Convert the criteria into a set of AND/OR conditions with [:placeholders]
$testConditions = $testValues = array(); $testConditions = $testValues = array();
$testConditionsCount = 0; $testConditionsCount = 0;
foreach($criteriaNames as $key => $criteriaName) { foreach ($criteriaNames as $key => $criteriaName) {
$testCondition = array(); $testCondition = array();
$testConditionCount = 0; $testConditionCount = 0;
foreach($criteria as $row => $criterion) { foreach ($criteria as $row => $criterion) {
if ($criterion[$key] > '') { if ($criterion[$key] > '') {
$testCondition[] = '[:'.$criteriaName.']'.PHPExcel_Calculation_Functions::_ifCondition($criterion[$key]); $testCondition[] = '[:'.$criteriaName.']'.PHPExcel_Calculation_Functions::ifCondition($criterion[$key]);
$testConditionCount++; $testConditionCount++;
} }
} }
if ($testConditionCount > 1) { if ($testConditionCount > 1) {
$testConditions[] = 'OR('.implode(',',$testCondition).')'; $testConditions[] = 'OR(' . implode(',', $testCondition) . ')';
$testConditionsCount++; $testConditionsCount++;
} elseif($testConditionCount == 1) { } elseif ($testConditionCount == 1) {
$testConditions[] = $testCondition[0]; $testConditions[] = $testCondition[0];
$testConditionsCount++; $testConditionsCount++;
} }
} }
if ($testConditionsCount > 1) { if ($testConditionsCount > 1) {
$testConditionSet = 'AND('.implode(',',$testConditions).')'; $testConditionSet = 'AND(' . implode(',', $testConditions) . ')';
} elseif($testConditionsCount == 1) { } elseif ($testConditionsCount == 1) {
$testConditionSet = $testConditions[0]; $testConditionSet = $testConditions[0];
} }
// Loop through each row of the database // Loop through each row of the database
foreach($database as $dataRow => $dataValues) { foreach ($database as $dataRow => $dataValues) {
// Substitute actual values from the database row for our [:placeholders] // Substitute actual values from the database row for our [:placeholders]
$testConditionList = $testConditionSet; $testConditionList = $testConditionSet;
foreach($criteriaNames as $key => $criteriaName) { foreach ($criteriaNames as $key => $criteriaName) {
$k = array_search($criteriaName,$fieldNames); $k = array_search($criteriaName, $fieldNames);
if (isset($dataValues[$k])) { if (isset($dataValues[$k])) {
$dataValue = $dataValues[$k]; $dataValue = $dataValues[$k];
$dataValue = (is_string($dataValue)) ? PHPExcel_Calculation::_wrapResult(strtoupper($dataValue)) : $dataValue; $dataValue = (is_string($dataValue)) ? PHPExcel_Calculation::wrapResult(strtoupper($dataValue)) : $dataValue;
$testConditionList = str_replace('[:'.$criteriaName.']',$dataValue,$testConditionList); $testConditionList = str_replace('[:' . $criteriaName . ']', $dataValue, $testConditionList);
} }
} }
// evaluate the criteria against the row data // evaluate the criteria against the row data
@@ -150,6 +142,19 @@ class PHPExcel_Calculation_Database {
} }
private static function getFilteredColumn($database, $field, $criteria)
{
// reduce the database to a set of rows that match all the criteria
$database = self::filter($database, $criteria);
// extract an array of values for the requested column
$colData = array();
foreach ($database as $row) {
$colData[] = $row[$field];
}
return $colData;
}
/** /**
* DAVERAGE * DAVERAGE
* *
@@ -177,22 +182,18 @@ class PHPExcel_Calculation_Database {
* @return float * @return float
* *
*/ */
public static function DAVERAGE($database,$field,$criteria) { public static function DAVERAGE($database, $field, $criteria)
$field = self::__fieldExtract($database,$field); {
$field = self::fieldExtract($database, $field);
if (is_null($field)) { if (is_null($field)) {
return NULL; return null;
}
// reduce the database to a set of rows that match all the criteria
$database = self::__filter($database,$criteria);
// extract an array of values for the requested column
$colData = array();
foreach($database as $row) {
$colData[] = $row[$field];
} }
// Return // Return
return PHPExcel_Calculation_Statistical::AVERAGE($colData); return PHPExcel_Calculation_Statistical::AVERAGE(
} // function DAVERAGE() self::getFilteredColumn($database, $field, $criteria)
);
}
/** /**
@@ -229,23 +230,18 @@ class PHPExcel_Calculation_Database {
* database that match the criteria. * database that match the criteria.
* *
*/ */
public static function DCOUNT($database,$field,$criteria) { public static function DCOUNT($database, $field, $criteria)
$field = self::__fieldExtract($database,$field); {
$field = self::fieldExtract($database, $field);
if (is_null($field)) { if (is_null($field)) {
return NULL; return null;
}
// reduce the database to a set of rows that match all the criteria
$database = self::__filter($database,$criteria);
// extract an array of values for the requested column
$colData = array();
foreach($database as $row) {
$colData[] = $row[$field];
} }
// Return // Return
return PHPExcel_Calculation_Statistical::COUNT($colData); return PHPExcel_Calculation_Statistical::COUNT(
} // function DCOUNT() self::getFilteredColumn($database, $field, $criteria)
);
}
/** /**
@@ -278,23 +274,26 @@ class PHPExcel_Calculation_Database {
* database that match the criteria. * database that match the criteria.
* *
*/ */
public static function DCOUNTA($database,$field,$criteria) { public static function DCOUNTA($database, $field, $criteria)
$field = self::__fieldExtract($database,$field); {
$field = self::fieldExtract($database, $field);
if (is_null($field)) { if (is_null($field)) {
return NULL; return null;
} }
// reduce the database to a set of rows that match all the criteria // reduce the database to a set of rows that match all the criteria
$database = self::__filter($database,$criteria); $database = self::filter($database, $criteria);
// extract an array of values for the requested column // extract an array of values for the requested column
$colData = array(); $colData = array();
foreach($database as $row) { foreach ($database as $row) {
$colData[] = $row[$field]; $colData[] = $row[$field];
} }
// Return // Return
return PHPExcel_Calculation_Statistical::COUNTA($colData); return PHPExcel_Calculation_Statistical::COUNTA(
} // function DCOUNTA() self::getFilteredColumn($database, $field, $criteria)
);
}
/** /**
@@ -325,27 +324,21 @@ class PHPExcel_Calculation_Database {
* @return mixed * @return mixed
* *
*/ */
public static function DGET($database,$field,$criteria) { public static function DGET($database, $field, $criteria)
$field = self::__fieldExtract($database,$field); {
$field = self::fieldExtract($database, $field);
if (is_null($field)) { if (is_null($field)) {
return NULL; return null;
}
// reduce the database to a set of rows that match all the criteria
$database = self::__filter($database,$criteria);
// extract an array of values for the requested column
$colData = array();
foreach($database as $row) {
$colData[] = $row[$field];
} }
// Return // Return
$colData = self::getFilteredColumn($database, $field, $criteria);
if (count($colData) > 1) { if (count($colData) > 1) {
return PHPExcel_Calculation_Functions::NaN(); return PHPExcel_Calculation_Functions::NaN();
} }
return $colData[0]; return $colData[0];
} // function DGET() }
/** /**
@@ -376,23 +369,18 @@ class PHPExcel_Calculation_Database {
* @return float * @return float
* *
*/ */
public static function DMAX($database,$field,$criteria) { public static function DMAX($database, $field, $criteria)
$field = self::__fieldExtract($database,$field); {
$field = self::fieldExtract($database, $field);
if (is_null($field)) { if (is_null($field)) {
return NULL; return null;
}
// reduce the database to a set of rows that match all the criteria
$database = self::__filter($database,$criteria);
// extract an array of values for the requested column
$colData = array();
foreach($database as $row) {
$colData[] = $row[$field];
} }
// Return // Return
return PHPExcel_Calculation_Statistical::MAX($colData); return PHPExcel_Calculation_Statistical::MAX(
} // function DMAX() self::getFilteredColumn($database, $field, $criteria)
);
}
/** /**
@@ -423,23 +411,18 @@ class PHPExcel_Calculation_Database {
* @return float * @return float
* *
*/ */
public static function DMIN($database,$field,$criteria) { public static function DMIN($database, $field, $criteria)
$field = self::__fieldExtract($database,$field); {
$field = self::fieldExtract($database, $field);
if (is_null($field)) { if (is_null($field)) {
return NULL; return null;
}
// reduce the database to a set of rows that match all the criteria
$database = self::__filter($database,$criteria);
// extract an array of values for the requested column
$colData = array();
foreach($database as $row) {
$colData[] = $row[$field];
} }
// Return // Return
return PHPExcel_Calculation_Statistical::MIN($colData); return PHPExcel_Calculation_Statistical::MIN(
} // function DMIN() self::getFilteredColumn($database, $field, $criteria)
);
}
/** /**
@@ -469,23 +452,18 @@ class PHPExcel_Calculation_Database {
* @return float * @return float
* *
*/ */
public static function DPRODUCT($database,$field,$criteria) { public static function DPRODUCT($database, $field, $criteria)
$field = self::__fieldExtract($database,$field); {
$field = self::fieldExtract($database, $field);
if (is_null($field)) { if (is_null($field)) {
return NULL; return null;
}
// reduce the database to a set of rows that match all the criteria
$database = self::__filter($database,$criteria);
// extract an array of values for the requested column
$colData = array();
foreach($database as $row) {
$colData[] = $row[$field];
} }
// Return // Return
return PHPExcel_Calculation_MathTrig::PRODUCT($colData); return PHPExcel_Calculation_MathTrig::PRODUCT(
} // function DPRODUCT() self::getFilteredColumn($database, $field, $criteria)
);
}
/** /**
@@ -516,23 +494,18 @@ class PHPExcel_Calculation_Database {
* @return float * @return float
* *
*/ */
public static function DSTDEV($database,$field,$criteria) { public static function DSTDEV($database, $field, $criteria)
$field = self::__fieldExtract($database,$field); {
$field = self::fieldExtract($database, $field);
if (is_null($field)) { if (is_null($field)) {
return NULL; return null;
}
// reduce the database to a set of rows that match all the criteria
$database = self::__filter($database,$criteria);
// extract an array of values for the requested column
$colData = array();
foreach($database as $row) {
$colData[] = $row[$field];
} }
// Return // Return
return PHPExcel_Calculation_Statistical::STDEV($colData); return PHPExcel_Calculation_Statistical::STDEV(
} // function DSTDEV() self::getFilteredColumn($database, $field, $criteria)
);
}
/** /**
@@ -563,23 +536,18 @@ class PHPExcel_Calculation_Database {
* @return float * @return float
* *
*/ */
public static function DSTDEVP($database,$field,$criteria) { public static function DSTDEVP($database, $field, $criteria)
$field = self::__fieldExtract($database,$field); {
$field = self::fieldExtract($database, $field);
if (is_null($field)) { if (is_null($field)) {
return NULL; return null;
}
// reduce the database to a set of rows that match all the criteria
$database = self::__filter($database,$criteria);
// extract an array of values for the requested column
$colData = array();
foreach($database as $row) {
$colData[] = $row[$field];
} }
// Return // Return
return PHPExcel_Calculation_Statistical::STDEVP($colData); return PHPExcel_Calculation_Statistical::STDEVP(
} // function DSTDEVP() self::getFilteredColumn($database, $field, $criteria)
);
}
/** /**
@@ -609,23 +577,18 @@ class PHPExcel_Calculation_Database {
* @return float * @return float
* *
*/ */
public static function DSUM($database,$field,$criteria) { public static function DSUM($database, $field, $criteria)
$field = self::__fieldExtract($database,$field); {
$field = self::fieldExtract($database, $field);
if (is_null($field)) { if (is_null($field)) {
return NULL; return null;
}
// reduce the database to a set of rows that match all the criteria
$database = self::__filter($database,$criteria);
// extract an array of values for the requested column
$colData = array();
foreach($database as $row) {
$colData[] = $row[$field];
} }
// Return // Return
return PHPExcel_Calculation_MathTrig::SUM($colData); return PHPExcel_Calculation_MathTrig::SUM(
} // function DSUM() self::getFilteredColumn($database, $field, $criteria)
);
}
/** /**
@@ -656,23 +619,18 @@ class PHPExcel_Calculation_Database {
* @return float * @return float
* *
*/ */
public static function DVAR($database,$field,$criteria) { public static function DVAR($database, $field, $criteria)
$field = self::__fieldExtract($database,$field); {
$field = self::fieldExtract($database, $field);
if (is_null($field)) { if (is_null($field)) {
return NULL; return null;
}
// reduce the database to a set of rows that match all the criteria
$database = self::__filter($database,$criteria);
// extract an array of values for the requested column
$colData = array();
foreach($database as $row) {
$colData[] = $row[$field];
} }
// Return // Return
return PHPExcel_Calculation_Statistical::VARFunc($colData); return PHPExcel_Calculation_Statistical::VARFunc(
} // function DVAR() self::getFilteredColumn($database, $field, $criteria)
);
}
/** /**
@@ -703,23 +661,16 @@ class PHPExcel_Calculation_Database {
* @return float * @return float
* *
*/ */
public static function DVARP($database,$field,$criteria) { public static function DVARP($database, $field, $criteria)
$field = self::__fieldExtract($database,$field); {
$field = self::fieldExtract($database, $field);
if (is_null($field)) { if (is_null($field)) {
return NULL; return null;
}
// reduce the database to a set of rows that match all the criteria
$database = self::__filter($database,$criteria);
// extract an array of values for the requested column
$colData = array();
foreach($database as $row) {
$colData[] = $row[$field];
} }
// Return // Return
return PHPExcel_Calculation_Statistical::VARP($colData); return PHPExcel_Calculation_Statistical::VARP(
} // function DVARP() self::getFilteredColumn($database, $field, $criteria)
);
}
} // class PHPExcel_Calculation_Database }

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@@ -1,8 +1,9 @@
<?php <?php
/** /**
* PHPExcel * PHPExcel_Calculation_Exception
* *
* Copyright (c) 2006 - 2014 PHPExcel * Copyright (c) 2006 - 2015 PHPExcel
* *
* This library is free software; you can redistribute it and/or * This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public * modify it under the terms of the GNU Lesser General Public
@@ -20,20 +21,12 @@
* *
* @category PHPExcel * @category PHPExcel
* @package PHPExcel_Calculation * @package PHPExcel_Calculation
* @copyright Copyright (c) 2006 - 2014 PHPExcel (http://www.codeplex.com/PHPExcel) * @copyright Copyright (c) 2006 - 2015 PHPExcel (http://www.codeplex.com/PHPExcel)
* @license http://www.gnu.org/licenses/old-licenses/lgpl-2.1.txt LGPL * @license http://www.gnu.org/licenses/old-licenses/lgpl-2.1.txt LGPL
* @version 1.8.0, 2014-03-02 * @version ##VERSION##, ##DATE##
*/ */
class PHPExcel_Calculation_Exception extends PHPExcel_Exception
{
/**
* PHPExcel_Calculation_Exception
*
* @category PHPExcel
* @package PHPExcel_Calculation
* @copyright Copyright (c) 2006 - 2014 PHPExcel (http://www.codeplex.com/PHPExcel)
*/
class PHPExcel_Calculation_Exception extends PHPExcel_Exception {
/** /**
* Error handler callback * Error handler callback
* *
@@ -43,7 +36,8 @@ class PHPExcel_Calculation_Exception extends PHPExcel_Exception {
* @param mixed $line * @param mixed $line
* @param mixed $context * @param mixed $context
*/ */
public static function errorHandlerCallback($code, $string, $file, $line, $context) { public static function errorHandlerCallback($code, $string, $file, $line, $context)
{
$e = new self($string, $code); $e = new self($string, $code);
$e->line = $line; $e->line = $line;
$e->file = $file; $e->file = $file;

View File

@@ -1,8 +1,9 @@
<?php <?php
/** /**
* PHPExcel * PHPExcel_Calculation_ExceptionHandler
* *
* Copyright (c) 2006 - 2014 PHPExcel * Copyright (c) 2006 - 2015 PHPExcel
* *
* This library is free software; you can redistribute it and/or * This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public * modify it under the terms of the GNU Lesser General Public
@@ -20,30 +21,25 @@
* *
* @category PHPExcel * @category PHPExcel
* @package PHPExcel_Calculation * @package PHPExcel_Calculation
* @copyright Copyright (c) 2006 - 2014 PHPExcel (http://www.codeplex.com/PHPExcel) * @copyright Copyright (c) 2006 - 2015 PHPExcel (http://www.codeplex.com/PHPExcel)
* @license http://www.gnu.org/licenses/old-licenses/lgpl-2.1.txt LGPL * @license http://www.gnu.org/licenses/old-licenses/lgpl-2.1.txt LGPL
* @version 1.8.0, 2014-03-02 * @version ##VERSION##, ##DATE##
*/ */
class PHPExcel_Calculation_ExceptionHandler
/** {
* PHPExcel_Calculation_ExceptionHandler
*
* @category PHPExcel
* @package PHPExcel_Calculation
* @copyright Copyright (c) 2006 - 2014 PHPExcel (http://www.codeplex.com/PHPExcel)
*/
class PHPExcel_Calculation_ExceptionHandler {
/** /**
* Register errorhandler * Register errorhandler
*/ */
public function __construct() { public function __construct()
{
set_error_handler(array('PHPExcel_Calculation_Exception', 'errorHandlerCallback'), E_ALL); set_error_handler(array('PHPExcel_Calculation_Exception', 'errorHandlerCallback'), E_ALL);
} }
/** /**
* Unregister errorhandler * Unregister errorhandler
*/ */
public function __destruct() { public function __destruct()
{
restore_error_handler(); restore_error_handler();
} }
} }

File diff suppressed because it is too large Load Diff

View File

@@ -1,30 +1,4 @@
<?php <?php
/**
* PHPExcel
*
* Copyright (c) 2006 - 2014 PHPExcel
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
* version 2.1 of the License, or (at your option) any later version.
*
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with this library; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
*
* @category PHPExcel
* @package PHPExcel_Calculation
* @copyright Copyright (c) 2006 - 2014 PHPExcel (http://www.codeplex.com/PHPExcel)
* @license http://www.gnu.org/licenses/old-licenses/lgpl-2.1.txt LGPL
* @version 1.8.0, 2014-03-02
*/
/* /*
PARTLY BASED ON: PARTLY BASED ON:
@@ -52,11 +26,32 @@ PARTLY BASED ON:
/** /**
* PHPExcel_Calculation_FormulaParser * PHPExcel_Calculation_FormulaParser
* *
* Copyright (c) 2006 - 2015 PHPExcel
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
* version 2.1 of the License, or (at your option) any later version.
*
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with this library; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
*
* @category PHPExcel * @category PHPExcel
* @package PHPExcel_Calculation * @package PHPExcel_Calculation
* @copyright Copyright (c) 2006 - 2014 PHPExcel (http://www.codeplex.com/PHPExcel) * @copyright Copyright (c) 2006 - 2015 PHPExcel (http://www.codeplex.com/PHPExcel)
* @license http://www.gnu.org/licenses/old-licenses/lgpl-2.1.txt LGPL
* @version ##VERSION##, ##DATE##
*/ */
class PHPExcel_Calculation_FormulaParser {
class PHPExcel_Calculation_FormulaParser
{
/* Character constants */ /* Character constants */
const QUOTE_DOUBLE = '"'; const QUOTE_DOUBLE = '"';
const QUOTE_SINGLE = '\''; const QUOTE_SINGLE = '\'';
@@ -80,14 +75,14 @@ class PHPExcel_Calculation_FormulaParser {
* *
* @var string * @var string
*/ */
private $_formula; private $formula;
/** /**
* Tokens * Tokens
* *
* @var PHPExcel_Calculation_FormulaToken[] * @var PHPExcel_Calculation_FormulaToken[]
*/ */
private $_tokens = array(); private $tokens = array();
/** /**
* Create a new PHPExcel_Calculation_FormulaParser * Create a new PHPExcel_Calculation_FormulaParser
@@ -103,9 +98,9 @@ class PHPExcel_Calculation_FormulaParser {
} }
// Initialise values // Initialise values
$this->_formula = trim($pFormula); $this->formula = trim($pFormula);
// Parse! // Parse!
$this->_parseToTokens(); $this->parseToTokens();
} }
/** /**
@@ -113,8 +108,9 @@ class PHPExcel_Calculation_FormulaParser {
* *
* @return string * @return string
*/ */
public function getFormula() { public function getFormula()
return $this->_formula; {
return $this->formula;
} }
/** /**
@@ -124,9 +120,10 @@ class PHPExcel_Calculation_FormulaParser {
* @return string * @return string
* @throws PHPExcel_Calculation_Exception * @throws PHPExcel_Calculation_Exception
*/ */
public function getToken($pId = 0) { public function getToken($pId = 0)
if (isset($this->_tokens[$pId])) { {
return $this->_tokens[$pId]; if (isset($this->tokens[$pId])) {
return $this->tokens[$pId];
} else { } else {
throw new PHPExcel_Calculation_Exception("Token with id $pId does not exist."); throw new PHPExcel_Calculation_Exception("Token with id $pId does not exist.");
} }
@@ -137,8 +134,9 @@ class PHPExcel_Calculation_FormulaParser {
* *
* @return string * @return string
*/ */
public function getTokenCount() { public function getTokenCount()
return count($this->_tokens); {
return count($this->tokens);
} }
/** /**
@@ -146,20 +144,24 @@ class PHPExcel_Calculation_FormulaParser {
* *
* @return PHPExcel_Calculation_FormulaToken[] * @return PHPExcel_Calculation_FormulaToken[]
*/ */
public function getTokens() { public function getTokens()
return $this->_tokens; {
return $this->tokens;
} }
/** /**
* Parse to tokens * Parse to tokens
*/ */
private function _parseToTokens() { private function parseToTokens()
{
// No attempt is made to verify formulas; assumes formulas are derived from Excel, where // No attempt is made to verify formulas; assumes formulas are derived from Excel, where
// they can only exist if valid; stack overflows/underflows sunk as nulls without exceptions. // they can only exist if valid; stack overflows/underflows sunk as nulls without exceptions.
// Check if the formula has a valid starting = // Check if the formula has a valid starting =
$formulaLength = strlen($this->_formula); $formulaLength = strlen($this->formula);
if ($formulaLength < 2 || $this->_formula{0} != '=') return; if ($formulaLength < 2 || $this->formula{0} != '=') {
return;
}
// Helper variables // Helper variables
$tokens1 = $tokens2 = $stack = array(); $tokens1 = $tokens2 = $stack = array();
@@ -179,8 +181,8 @@ class PHPExcel_Calculation_FormulaParser {
// embeds are doubled // embeds are doubled
// end marks token // end marks token
if ($inString) { if ($inString) {
if ($this->_formula{$index} == PHPExcel_Calculation_FormulaParser::QUOTE_DOUBLE) { if ($this->formula{$index} == PHPExcel_Calculation_FormulaParser::QUOTE_DOUBLE) {
if ((($index + 2) <= $formulaLength) && ($this->_formula{$index + 1} == PHPExcel_Calculation_FormulaParser::QUOTE_DOUBLE)) { if ((($index + 2) <= $formulaLength) && ($this->formula{$index + 1} == PHPExcel_Calculation_FormulaParser::QUOTE_DOUBLE)) {
$value .= PHPExcel_Calculation_FormulaParser::QUOTE_DOUBLE; $value .= PHPExcel_Calculation_FormulaParser::QUOTE_DOUBLE;
++$index; ++$index;
} else { } else {
@@ -189,7 +191,7 @@ class PHPExcel_Calculation_FormulaParser {
$value = ""; $value = "";
} }
} else { } else {
$value .= $this->_formula{$index}; $value .= $this->formula{$index};
} }
++$index; ++$index;
continue; continue;
@@ -199,15 +201,15 @@ class PHPExcel_Calculation_FormulaParser {
// embeds are double // embeds are double
// end does not mark a token // end does not mark a token
if ($inPath) { if ($inPath) {
if ($this->_formula{$index} == PHPExcel_Calculation_FormulaParser::QUOTE_SINGLE) { if ($this->formula{$index} == PHPExcel_Calculation_FormulaParser::QUOTE_SINGLE) {
if ((($index + 2) <= $formulaLength) && ($this->_formula{$index + 1} == PHPExcel_Calculation_FormulaParser::QUOTE_SINGLE)) { if ((($index + 2) <= $formulaLength) && ($this->formula{$index + 1} == PHPExcel_Calculation_FormulaParser::QUOTE_SINGLE)) {
$value .= PHPExcel_Calculation_FormulaParser::QUOTE_SINGLE; $value .= PHPExcel_Calculation_FormulaParser::QUOTE_SINGLE;
++$index; ++$index;
} else { } else {
$inPath = false; $inPath = false;
} }
} else { } else {
$value .= $this->_formula{$index}; $value .= $this->formula{$index};
} }
++$index; ++$index;
continue; continue;
@@ -217,10 +219,10 @@ class PHPExcel_Calculation_FormulaParser {
// no embeds (changed to "()" by Excel) // no embeds (changed to "()" by Excel)
// end does not mark a token // end does not mark a token
if ($inRange) { if ($inRange) {
if ($this->_formula{$index} == PHPExcel_Calculation_FormulaParser::BRACKET_CLOSE) { if ($this->formula{$index} == PHPExcel_Calculation_FormulaParser::BRACKET_CLOSE) {
$inRange = false; $inRange = false;
} }
$value .= $this->_formula{$index}; $value .= $this->formula{$index};
++$index; ++$index;
continue; continue;
} }
@@ -228,7 +230,7 @@ class PHPExcel_Calculation_FormulaParser {
// error values // error values
// end marks a token, determined from absolute list of values // end marks a token, determined from absolute list of values
if ($inError) { if ($inError) {
$value .= $this->_formula{$index}; $value .= $this->formula{$index};
++$index; ++$index;
if (in_array($value, $ERRORS)) { if (in_array($value, $ERRORS)) {
$inError = false; $inError = false;
@@ -239,10 +241,10 @@ class PHPExcel_Calculation_FormulaParser {
} }
// scientific notation check // scientific notation check
if (strpos(PHPExcel_Calculation_FormulaParser::OPERATORS_SN, $this->_formula{$index}) !== false) { if (strpos(PHPExcel_Calculation_FormulaParser::OPERATORS_SN, $this->formula{$index}) !== false) {
if (strlen($value) > 1) { if (strlen($value) > 1) {
if (preg_match("/^[1-9]{1}(\.[0-9]+)?E{1}$/", $this->_formula{$index}) != 0) { if (preg_match("/^[1-9]{1}(\.[0-9]+)?E{1}$/", $this->formula{$index}) != 0) {
$value .= $this->_formula{$index}; $value .= $this->formula{$index};
++$index; ++$index;
continue; continue;
} }
@@ -252,8 +254,9 @@ class PHPExcel_Calculation_FormulaParser {
// independent character evaluation (order not important) // independent character evaluation (order not important)
// establish state-dependent character evaluations // establish state-dependent character evaluations
if ($this->_formula{$index} == PHPExcel_Calculation_FormulaParser::QUOTE_DOUBLE) { if ($this->formula{$index} == PHPExcel_Calculation_FormulaParser::QUOTE_DOUBLE) {
if (strlen($value > 0)) { // unexpected if (strlen($value > 0)) {
// unexpected
$tokens1[] = new PHPExcel_Calculation_FormulaToken($value, PHPExcel_Calculation_FormulaToken::TOKEN_TYPE_UNKNOWN); $tokens1[] = new PHPExcel_Calculation_FormulaToken($value, PHPExcel_Calculation_FormulaToken::TOKEN_TYPE_UNKNOWN);
$value = ""; $value = "";
} }
@@ -262,8 +265,9 @@ class PHPExcel_Calculation_FormulaParser {
continue; continue;
} }
if ($this->_formula{$index} == PHPExcel_Calculation_FormulaParser::QUOTE_SINGLE) { if ($this->formula{$index} == PHPExcel_Calculation_FormulaParser::QUOTE_SINGLE) {
if (strlen($value) > 0) { // unexpected if (strlen($value) > 0) {
// unexpected
$tokens1[] = new PHPExcel_Calculation_FormulaToken($value, PHPExcel_Calculation_FormulaToken::TOKEN_TYPE_UNKNOWN); $tokens1[] = new PHPExcel_Calculation_FormulaToken($value, PHPExcel_Calculation_FormulaToken::TOKEN_TYPE_UNKNOWN);
$value = ""; $value = "";
} }
@@ -272,15 +276,16 @@ class PHPExcel_Calculation_FormulaParser {
continue; continue;
} }
if ($this->_formula{$index} == PHPExcel_Calculation_FormulaParser::BRACKET_OPEN) { if ($this->formula{$index} == PHPExcel_Calculation_FormulaParser::BRACKET_OPEN) {
$inRange = true; $inRange = true;
$value .= PHPExcel_Calculation_FormulaParser::BRACKET_OPEN; $value .= PHPExcel_Calculation_FormulaParser::BRACKET_OPEN;
++$index; ++$index;
continue; continue;
} }
if ($this->_formula{$index} == PHPExcel_Calculation_FormulaParser::ERROR_START) { if ($this->formula{$index} == PHPExcel_Calculation_FormulaParser::ERROR_START) {
if (strlen($value) > 0) { // unexpected if (strlen($value) > 0) {
// unexpected
$tokens1[] = new PHPExcel_Calculation_FormulaToken($value, PHPExcel_Calculation_FormulaToken::TOKEN_TYPE_UNKNOWN); $tokens1[] = new PHPExcel_Calculation_FormulaToken($value, PHPExcel_Calculation_FormulaToken::TOKEN_TYPE_UNKNOWN);
$value = ""; $value = "";
} }
@@ -291,8 +296,9 @@ class PHPExcel_Calculation_FormulaParser {
} }
// mark start and end of arrays and array rows // mark start and end of arrays and array rows
if ($this->_formula{$index} == PHPExcel_Calculation_FormulaParser::BRACE_OPEN) { if ($this->formula{$index} == PHPExcel_Calculation_FormulaParser::BRACE_OPEN) {
if (strlen($value) > 0) { // unexpected if (strlen($value) > 0) {
// unexpected
$tokens1[] = new PHPExcel_Calculation_FormulaToken($value, PHPExcel_Calculation_FormulaToken::TOKEN_TYPE_UNKNOWN); $tokens1[] = new PHPExcel_Calculation_FormulaToken($value, PHPExcel_Calculation_FormulaToken::TOKEN_TYPE_UNKNOWN);
$value = ""; $value = "";
} }
@@ -309,7 +315,7 @@ class PHPExcel_Calculation_FormulaParser {
continue; continue;
} }
if ($this->_formula{$index} == PHPExcel_Calculation_FormulaParser::SEMICOLON) { if ($this->formula{$index} == PHPExcel_Calculation_FormulaParser::SEMICOLON) {
if (strlen($value) > 0) { if (strlen($value) > 0) {
$tokens1[] = new PHPExcel_Calculation_FormulaToken($value, PHPExcel_Calculation_FormulaToken::TOKEN_TYPE_OPERAND); $tokens1[] = new PHPExcel_Calculation_FormulaToken($value, PHPExcel_Calculation_FormulaToken::TOKEN_TYPE_OPERAND);
$value = ""; $value = "";
@@ -331,7 +337,7 @@ class PHPExcel_Calculation_FormulaParser {
continue; continue;
} }
if ($this->_formula{$index} == PHPExcel_Calculation_FormulaParser::BRACE_CLOSE) { if ($this->formula{$index} == PHPExcel_Calculation_FormulaParser::BRACE_CLOSE) {
if (strlen($value) > 0) { if (strlen($value) > 0) {
$tokens1[] = new PHPExcel_Calculation_FormulaToken($value, PHPExcel_Calculation_FormulaToken::TOKEN_TYPE_OPERAND); $tokens1[] = new PHPExcel_Calculation_FormulaToken($value, PHPExcel_Calculation_FormulaToken::TOKEN_TYPE_OPERAND);
$value = ""; $value = "";
@@ -352,14 +358,14 @@ class PHPExcel_Calculation_FormulaParser {
} }
// trim white-space // trim white-space
if ($this->_formula{$index} == PHPExcel_Calculation_FormulaParser::WHITESPACE) { if ($this->formula{$index} == PHPExcel_Calculation_FormulaParser::WHITESPACE) {
if (strlen($value) > 0) { if (strlen($value) > 0) {
$tokens1[] = new PHPExcel_Calculation_FormulaToken($value, PHPExcel_Calculation_FormulaToken::TOKEN_TYPE_OPERAND); $tokens1[] = new PHPExcel_Calculation_FormulaToken($value, PHPExcel_Calculation_FormulaToken::TOKEN_TYPE_OPERAND);
$value = ""; $value = "";
} }
$tokens1[] = new PHPExcel_Calculation_FormulaToken("", PHPExcel_Calculation_FormulaToken::TOKEN_TYPE_WHITESPACE); $tokens1[] = new PHPExcel_Calculation_FormulaToken("", PHPExcel_Calculation_FormulaToken::TOKEN_TYPE_WHITESPACE);
++$index; ++$index;
while (($this->_formula{$index} == PHPExcel_Calculation_FormulaParser::WHITESPACE) && ($index < $formulaLength)) { while (($this->formula{$index} == PHPExcel_Calculation_FormulaParser::WHITESPACE) && ($index < $formulaLength)) {
++$index; ++$index;
} }
continue; continue;
@@ -367,41 +373,41 @@ class PHPExcel_Calculation_FormulaParser {
// multi-character comparators // multi-character comparators
if (($index + 2) <= $formulaLength) { if (($index + 2) <= $formulaLength) {
if (in_array(substr($this->_formula, $index, 2), $COMPARATORS_MULTI)) { if (in_array(substr($this->formula, $index, 2), $COMPARATORS_MULTI)) {
if (strlen($value) > 0) { if (strlen($value) > 0) {
$tokens1[] = new PHPExcel_Calculation_FormulaToken($value, PHPExcel_Calculation_FormulaToken::TOKEN_TYPE_OPERAND); $tokens1[] = new PHPExcel_Calculation_FormulaToken($value, PHPExcel_Calculation_FormulaToken::TOKEN_TYPE_OPERAND);
$value = ""; $value = "";
} }
$tokens1[] = new PHPExcel_Calculation_FormulaToken(substr($this->_formula, $index, 2), PHPExcel_Calculation_FormulaToken::TOKEN_TYPE_OPERATORINFIX, PHPExcel_Calculation_FormulaToken::TOKEN_SUBTYPE_LOGICAL); $tokens1[] = new PHPExcel_Calculation_FormulaToken(substr($this->formula, $index, 2), PHPExcel_Calculation_FormulaToken::TOKEN_TYPE_OPERATORINFIX, PHPExcel_Calculation_FormulaToken::TOKEN_SUBTYPE_LOGICAL);
$index += 2; $index += 2;
continue; continue;
} }
} }
// standard infix operators // standard infix operators
if (strpos(PHPExcel_Calculation_FormulaParser::OPERATORS_INFIX, $this->_formula{$index}) !== false) { if (strpos(PHPExcel_Calculation_FormulaParser::OPERATORS_INFIX, $this->formula{$index}) !== false) {
if (strlen($value) > 0) { if (strlen($value) > 0) {
$tokens1[] =new PHPExcel_Calculation_FormulaToken($value, PHPExcel_Calculation_FormulaToken::TOKEN_TYPE_OPERAND); $tokens1[] =new PHPExcel_Calculation_FormulaToken($value, PHPExcel_Calculation_FormulaToken::TOKEN_TYPE_OPERAND);
$value = ""; $value = "";
} }
$tokens1[] = new PHPExcel_Calculation_FormulaToken($this->_formula{$index}, PHPExcel_Calculation_FormulaToken::TOKEN_TYPE_OPERATORINFIX); $tokens1[] = new PHPExcel_Calculation_FormulaToken($this->formula{$index}, PHPExcel_Calculation_FormulaToken::TOKEN_TYPE_OPERATORINFIX);
++$index; ++$index;
continue; continue;
} }
// standard postfix operators (only one) // standard postfix operators (only one)
if (strpos(PHPExcel_Calculation_FormulaParser::OPERATORS_POSTFIX, $this->_formula{$index}) !== false) { if (strpos(PHPExcel_Calculation_FormulaParser::OPERATORS_POSTFIX, $this->formula{$index}) !== false) {
if (strlen($value) > 0) { if (strlen($value) > 0) {
$tokens1[] = new PHPExcel_Calculation_FormulaToken($value, PHPExcel_Calculation_FormulaToken::TOKEN_TYPE_OPERAND); $tokens1[] = new PHPExcel_Calculation_FormulaToken($value, PHPExcel_Calculation_FormulaToken::TOKEN_TYPE_OPERAND);
$value = ""; $value = "";
} }
$tokens1[] = new PHPExcel_Calculation_FormulaToken($this->_formula{$index}, PHPExcel_Calculation_FormulaToken::TOKEN_TYPE_OPERATORPOSTFIX); $tokens1[] = new PHPExcel_Calculation_FormulaToken($this->formula{$index}, PHPExcel_Calculation_FormulaToken::TOKEN_TYPE_OPERATORPOSTFIX);
++$index; ++$index;
continue; continue;
} }
// start subexpression or function // start subexpression or function
if ($this->_formula{$index} == PHPExcel_Calculation_FormulaParser::PAREN_OPEN) { if ($this->formula{$index} == PHPExcel_Calculation_FormulaParser::PAREN_OPEN) {
if (strlen($value) > 0) { if (strlen($value) > 0) {
$tmp = new PHPExcel_Calculation_FormulaToken($value, PHPExcel_Calculation_FormulaToken::TOKEN_TYPE_FUNCTION, PHPExcel_Calculation_FormulaToken::TOKEN_SUBTYPE_START); $tmp = new PHPExcel_Calculation_FormulaToken($value, PHPExcel_Calculation_FormulaToken::TOKEN_TYPE_FUNCTION, PHPExcel_Calculation_FormulaToken::TOKEN_SUBTYPE_START);
$tokens1[] = $tmp; $tokens1[] = $tmp;
@@ -417,7 +423,7 @@ class PHPExcel_Calculation_FormulaParser {
} }
// function, subexpression, or array parameters, or operand unions // function, subexpression, or array parameters, or operand unions
if ($this->_formula{$index} == PHPExcel_Calculation_FormulaParser::COMMA) { if ($this->formula{$index} == PHPExcel_Calculation_FormulaParser::COMMA) {
if (strlen($value) > 0) { if (strlen($value) > 0) {
$tokens1[] = new PHPExcel_Calculation_FormulaToken($value, PHPExcel_Calculation_FormulaToken::TOKEN_TYPE_OPERAND); $tokens1[] = new PHPExcel_Calculation_FormulaToken($value, PHPExcel_Calculation_FormulaToken::TOKEN_TYPE_OPERAND);
$value = ""; $value = "";
@@ -438,7 +444,7 @@ class PHPExcel_Calculation_FormulaParser {
} }
// stop subexpression // stop subexpression
if ($this->_formula{$index} == PHPExcel_Calculation_FormulaParser::PAREN_CLOSE) { if ($this->formula{$index} == PHPExcel_Calculation_FormulaParser::PAREN_CLOSE) {
if (strlen($value) > 0) { if (strlen($value) > 0) {
$tokens1[] = new PHPExcel_Calculation_FormulaToken($value, PHPExcel_Calculation_FormulaToken::TOKEN_TYPE_OPERAND); $tokens1[] = new PHPExcel_Calculation_FormulaToken($value, PHPExcel_Calculation_FormulaToken::TOKEN_TYPE_OPERAND);
$value = ""; $value = "";
@@ -454,7 +460,7 @@ class PHPExcel_Calculation_FormulaParser {
} }
// token accumulation // token accumulation
$value .= $this->_formula{$index}; $value .= $this->formula{$index};
++$index; ++$index;
} }
@@ -516,7 +522,7 @@ class PHPExcel_Calculation_FormulaParser {
// move tokens to final list, switching infix "-" operators to prefix when appropriate, switching infix "+" operators // move tokens to final list, switching infix "-" operators to prefix when appropriate, switching infix "+" operators
// to noop when appropriate, identifying operand and infix-operator subtypes, and pulling "@" from function names // to noop when appropriate, identifying operand and infix-operator subtypes, and pulling "@" from function names
$this->_tokens = array(); $this->tokens = array();
$tokenCount = count($tokens2); $tokenCount = count($tokens2);
for ($i = 0; $i < $tokenCount; ++$i) { for ($i = 0; $i < $tokenCount; ++$i) {
@@ -539,53 +545,55 @@ class PHPExcel_Calculation_FormulaParser {
if ($token->getTokenType() == PHPExcel_Calculation_FormulaToken::TOKEN_TYPE_OPERATORINFIX && $token->getValue() == "-") { if ($token->getTokenType() == PHPExcel_Calculation_FormulaToken::TOKEN_TYPE_OPERATORINFIX && $token->getValue() == "-") {
if ($i == 0) { if ($i == 0) {
$token->setTokenType(PHPExcel_Calculation_FormulaToken::TOKEN_TYPE_OPERATORPREFIX); $token->setTokenType(PHPExcel_Calculation_FormulaToken::TOKEN_TYPE_OPERATORPREFIX);
} else if ( } elseif ((($previousToken->getTokenType() == PHPExcel_Calculation_FormulaToken::TOKEN_TYPE_FUNCTION) &&
(($previousToken->getTokenType() == PHPExcel_Calculation_FormulaToken::TOKEN_TYPE_FUNCTION) && ($previousToken->getTokenSubType() == PHPExcel_Calculation_FormulaToken::TOKEN_SUBTYPE_STOP)) || ($previousToken->getTokenSubType() == PHPExcel_Calculation_FormulaToken::TOKEN_SUBTYPE_STOP)) ||
(($previousToken->getTokenType() == PHPExcel_Calculation_FormulaToken::TOKEN_TYPE_SUBEXPRESSION) && ($previousToken->getTokenSubType() == PHPExcel_Calculation_FormulaToken::TOKEN_SUBTYPE_STOP)) || (($previousToken->getTokenType() == PHPExcel_Calculation_FormulaToken::TOKEN_TYPE_SUBEXPRESSION) &&
($previousToken->getTokenSubType() == PHPExcel_Calculation_FormulaToken::TOKEN_SUBTYPE_STOP)) ||
($previousToken->getTokenType() == PHPExcel_Calculation_FormulaToken::TOKEN_TYPE_OPERATORPOSTFIX) || ($previousToken->getTokenType() == PHPExcel_Calculation_FormulaToken::TOKEN_TYPE_OPERATORPOSTFIX) ||
($previousToken->getTokenType() == PHPExcel_Calculation_FormulaToken::TOKEN_TYPE_OPERAND) ($previousToken->getTokenType() == PHPExcel_Calculation_FormulaToken::TOKEN_TYPE_OPERAND)) {
) {
$token->setTokenSubType(PHPExcel_Calculation_FormulaToken::TOKEN_SUBTYPE_MATH); $token->setTokenSubType(PHPExcel_Calculation_FormulaToken::TOKEN_SUBTYPE_MATH);
} else { } else {
$token->setTokenType(PHPExcel_Calculation_FormulaToken::TOKEN_TYPE_OPERATORPREFIX); $token->setTokenType(PHPExcel_Calculation_FormulaToken::TOKEN_TYPE_OPERATORPREFIX);
} }
$this->_tokens[] = $token; $this->tokens[] = $token;
continue; continue;
} }
if ($token->getTokenType() == PHPExcel_Calculation_FormulaToken::TOKEN_TYPE_OPERATORINFIX && $token->getValue() == "+") { if ($token->getTokenType() == PHPExcel_Calculation_FormulaToken::TOKEN_TYPE_OPERATORINFIX && $token->getValue() == "+") {
if ($i == 0) { if ($i == 0) {
continue; continue;
} else if ( } elseif ((($previousToken->getTokenType() == PHPExcel_Calculation_FormulaToken::TOKEN_TYPE_FUNCTION) &&
(($previousToken->getTokenType() == PHPExcel_Calculation_FormulaToken::TOKEN_TYPE_FUNCTION) && ($previousToken->getTokenSubType() == PHPExcel_Calculation_FormulaToken::TOKEN_SUBTYPE_STOP)) || ($previousToken->getTokenSubType() == PHPExcel_Calculation_FormulaToken::TOKEN_SUBTYPE_STOP)) ||
(($previousToken->getTokenType() == PHPExcel_Calculation_FormulaToken::TOKEN_TYPE_SUBEXPRESSION) && ($previousToken->getTokenSubType() == PHPExcel_Calculation_FormulaToken::TOKEN_SUBTYPE_STOP)) || (($previousToken->getTokenType() == PHPExcel_Calculation_FormulaToken::TOKEN_TYPE_SUBEXPRESSION) &&
($previousToken->getTokenSubType() == PHPExcel_Calculation_FormulaToken::TOKEN_SUBTYPE_STOP)) ||
($previousToken->getTokenType() == PHPExcel_Calculation_FormulaToken::TOKEN_TYPE_OPERATORPOSTFIX) || ($previousToken->getTokenType() == PHPExcel_Calculation_FormulaToken::TOKEN_TYPE_OPERATORPOSTFIX) ||
($previousToken->getTokenType() == PHPExcel_Calculation_FormulaToken::TOKEN_TYPE_OPERAND) ($previousToken->getTokenType() == PHPExcel_Calculation_FormulaToken::TOKEN_TYPE_OPERAND)) {
) {
$token->setTokenSubType(PHPExcel_Calculation_FormulaToken::TOKEN_SUBTYPE_MATH); $token->setTokenSubType(PHPExcel_Calculation_FormulaToken::TOKEN_SUBTYPE_MATH);
} else { } else {
continue; continue;
} }
$this->_tokens[] = $token; $this->tokens[] = $token;
continue; continue;
} }
if ($token->getTokenType() == PHPExcel_Calculation_FormulaToken::TOKEN_TYPE_OPERATORINFIX && $token->getTokenSubType() == PHPExcel_Calculation_FormulaToken::TOKEN_SUBTYPE_NOTHING) { if ($token->getTokenType() == PHPExcel_Calculation_FormulaToken::TOKEN_TYPE_OPERATORINFIX &&
$token->getTokenSubType() == PHPExcel_Calculation_FormulaToken::TOKEN_SUBTYPE_NOTHING) {
if (strpos("<>=", substr($token->getValue(), 0, 1)) !== false) { if (strpos("<>=", substr($token->getValue(), 0, 1)) !== false) {
$token->setTokenSubType(PHPExcel_Calculation_FormulaToken::TOKEN_SUBTYPE_LOGICAL); $token->setTokenSubType(PHPExcel_Calculation_FormulaToken::TOKEN_SUBTYPE_LOGICAL);
} else if ($token->getValue() == "&") { } elseif ($token->getValue() == "&") {
$token->setTokenSubType(PHPExcel_Calculation_FormulaToken::TOKEN_SUBTYPE_CONCATENATION); $token->setTokenSubType(PHPExcel_Calculation_FormulaToken::TOKEN_SUBTYPE_CONCATENATION);
} else { } else {
$token->setTokenSubType(PHPExcel_Calculation_FormulaToken::TOKEN_SUBTYPE_MATH); $token->setTokenSubType(PHPExcel_Calculation_FormulaToken::TOKEN_SUBTYPE_MATH);
} }
$this->_tokens[] = $token; $this->tokens[] = $token;
continue; continue;
} }
if ($token->getTokenType() == PHPExcel_Calculation_FormulaToken::TOKEN_TYPE_OPERAND && $token->getTokenSubType() == PHPExcel_Calculation_FormulaToken::TOKEN_SUBTYPE_NOTHING) { if ($token->getTokenType() == PHPExcel_Calculation_FormulaToken::TOKEN_TYPE_OPERAND &&
$token->getTokenSubType() == PHPExcel_Calculation_FormulaToken::TOKEN_SUBTYPE_NOTHING) {
if (!is_numeric($token->getValue())) { if (!is_numeric($token->getValue())) {
if (strtoupper($token->getValue()) == "TRUE" || strtoupper($token->getValue() == "FALSE")) { if (strtoupper($token->getValue()) == "TRUE" || strtoupper($token->getValue() == "FALSE")) {
$token->setTokenSubType(PHPExcel_Calculation_FormulaToken::TOKEN_SUBTYPE_LOGICAL); $token->setTokenSubType(PHPExcel_Calculation_FormulaToken::TOKEN_SUBTYPE_LOGICAL);
@@ -596,7 +604,7 @@ class PHPExcel_Calculation_FormulaParser {
$token->setTokenSubType(PHPExcel_Calculation_FormulaToken::TOKEN_SUBTYPE_NUMBER); $token->setTokenSubType(PHPExcel_Calculation_FormulaToken::TOKEN_SUBTYPE_NUMBER);
} }
$this->_tokens[] = $token; $this->tokens[] = $token;
continue; continue;
} }
@@ -608,7 +616,7 @@ class PHPExcel_Calculation_FormulaParser {
} }
} }
$this->_tokens[] = $token; $this->tokens[] = $token;
} }
} }
} }

View File

@@ -1,30 +1,4 @@
<?php <?php
/**
* PHPExcel
*
* Copyright (c) 2006 - 2014 PHPExcel
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
* version 2.1 of the License, or (at your option) any later version.
*
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with this library; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
*
* @category PHPExcel
* @package PHPExcel_Calculation
* @copyright Copyright (c) 2006 - 2014 PHPExcel (http://www.codeplex.com/PHPExcel)
* @license http://www.gnu.org/licenses/old-licenses/lgpl-2.1.txt LGPL
* @version 1.8.0, 2014-03-02
*/
/* /*
PARTLY BASED ON: PARTLY BASED ON:
@@ -49,15 +23,35 @@ PARTLY BASED ON:
http://ewbi.blogs.com/develops/2004/12/excel_formula_p.html http://ewbi.blogs.com/develops/2004/12/excel_formula_p.html
*/ */
/** /**
* PHPExcel_Calculation_FormulaToken * PHPExcel_Calculation_FormulaToken
* *
* Copyright (c) 2006 - 2015 PHPExcel
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
* version 2.1 of the License, or (at your option) any later version.
*
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with this library; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
*
* @category PHPExcel * @category PHPExcel
* @package PHPExcel_Calculation * @package PHPExcel_Calculation
* @copyright Copyright (c) 2006 - 2014 PHPExcel (http://www.codeplex.com/PHPExcel) * @copyright Copyright (c) 2006 - 2015 PHPExcel (http://www.codeplex.com/PHPExcel)
* @license http://www.gnu.org/licenses/old-licenses/lgpl-2.1.txt LGPL
* @version ##VERSION##, ##DATE##
*/ */
class PHPExcel_Calculation_FormulaToken {
class PHPExcel_Calculation_FormulaToken
{
/* Token types */ /* Token types */
const TOKEN_TYPE_NOOP = 'Noop'; const TOKEN_TYPE_NOOP = 'Noop';
const TOKEN_TYPE_OPERAND = 'Operand'; const TOKEN_TYPE_OPERAND = 'Operand';
@@ -89,21 +83,21 @@ class PHPExcel_Calculation_FormulaToken {
* *
* @var string * @var string
*/ */
private $_value; private $value;
/** /**
* Token Type (represented by TOKEN_TYPE_*) * Token Type (represented by TOKEN_TYPE_*)
* *
* @var string * @var string
*/ */
private $_tokenType; private $tokenType;
/** /**
* Token SubType (represented by TOKEN_SUBTYPE_*) * Token SubType (represented by TOKEN_SUBTYPE_*)
* *
* @var string * @var string
*/ */
private $_tokenSubType; private $tokenSubType;
/** /**
* Create a new PHPExcel_Calculation_FormulaToken * Create a new PHPExcel_Calculation_FormulaToken
@@ -115,9 +109,9 @@ class PHPExcel_Calculation_FormulaToken {
public function __construct($pValue, $pTokenType = PHPExcel_Calculation_FormulaToken::TOKEN_TYPE_UNKNOWN, $pTokenSubType = PHPExcel_Calculation_FormulaToken::TOKEN_SUBTYPE_NOTHING) public function __construct($pValue, $pTokenType = PHPExcel_Calculation_FormulaToken::TOKEN_TYPE_UNKNOWN, $pTokenSubType = PHPExcel_Calculation_FormulaToken::TOKEN_SUBTYPE_NOTHING)
{ {
// Initialise values // Initialise values
$this->_value = $pValue; $this->value = $pValue;
$this->_tokenType = $pTokenType; $this->tokenType = $pTokenType;
$this->_tokenSubType = $pTokenSubType; $this->tokenSubType = $pTokenSubType;
} }
/** /**
@@ -125,8 +119,9 @@ class PHPExcel_Calculation_FormulaToken {
* *
* @return string * @return string
*/ */
public function getValue() { public function getValue()
return $this->_value; {
return $this->value;
} }
/** /**
@@ -134,8 +129,9 @@ class PHPExcel_Calculation_FormulaToken {
* *
* @param string $value * @param string $value
*/ */
public function setValue($value) { public function setValue($value)
$this->_value = $value; {
$this->value = $value;
} }
/** /**
@@ -143,8 +139,9 @@ class PHPExcel_Calculation_FormulaToken {
* *
* @return string * @return string
*/ */
public function getTokenType() { public function getTokenType()
return $this->_tokenType; {
return $this->tokenType;
} }
/** /**
@@ -152,8 +149,9 @@ class PHPExcel_Calculation_FormulaToken {
* *
* @param string $value * @param string $value
*/ */
public function setTokenType($value = PHPExcel_Calculation_FormulaToken::TOKEN_TYPE_UNKNOWN) { public function setTokenType($value = PHPExcel_Calculation_FormulaToken::TOKEN_TYPE_UNKNOWN)
$this->_tokenType = $value; {
$this->tokenType = $value;
} }
/** /**
@@ -161,8 +159,9 @@ class PHPExcel_Calculation_FormulaToken {
* *
* @return string * @return string
*/ */
public function getTokenSubType() { public function getTokenSubType()
return $this->_tokenSubType; {
return $this->tokenSubType;
} }
/** /**
@@ -170,7 +169,8 @@ class PHPExcel_Calculation_FormulaToken {
* *
* @param string $value * @param string $value
*/ */
public function setTokenSubType($value = PHPExcel_Calculation_FormulaToken::TOKEN_SUBTYPE_NOTHING) { public function setTokenSubType($value = PHPExcel_Calculation_FormulaToken::TOKEN_SUBTYPE_NOTHING)
$this->_tokenSubType = $value; {
$this->tokenSubType = $value;
} }
} }

View File

@@ -1,8 +1,9 @@
<?php <?php
/** /**
* PHPExcel * PHPExcel_Calculation_Function
* *
* Copyright (c) 2006 - 2014 PHPExcel * Copyright (c) 2006 - 2015 PHPExcel
* *
* This library is free software; you can redistribute it and/or * This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public * modify it under the terms of the GNU Lesser General Public
@@ -20,20 +21,12 @@
* *
* @category PHPExcel * @category PHPExcel
* @package PHPExcel_Calculation * @package PHPExcel_Calculation
* @copyright Copyright (c) 2006 - 2014 PHPExcel (http://www.codeplex.com/PHPExcel) * @copyright Copyright (c) 2006 - 2015 PHPExcel (http://www.codeplex.com/PHPExcel)
* @license http://www.gnu.org/licenses/old-licenses/lgpl-2.1.txt LGPL * @license http://www.gnu.org/licenses/old-licenses/lgpl-2.1.txt LGPL
* @version 1.8.0, 2014-03-02 * @version ##VERSION##, ##DATE##
*/ */
class PHPExcel_Calculation_Function
{
/**
* PHPExcel_Calculation_Function
*
* @category PHPExcel
* @package PHPExcel_Calculation
* @copyright Copyright (c) 2006 - 2014 PHPExcel (http://www.codeplex.com/PHPExcel)
*/
class PHPExcel_Calculation_Function {
/* Function categories */ /* Function categories */
const CATEGORY_CUBE = 'Cube'; const CATEGORY_CUBE = 'Cube';
const CATEGORY_DATABASE = 'Database'; const CATEGORY_DATABASE = 'Database';
@@ -52,21 +45,21 @@ class PHPExcel_Calculation_Function {
* *
* @var string * @var string
*/ */
private $_category; private $category;
/** /**
* Excel name * Excel name
* *
* @var string * @var string
*/ */
private $_excelName; private $excelName;
/** /**
* PHPExcel name * PHPExcel name
* *
* @var string * @var string
*/ */
private $_phpExcelName; private $phpExcelName;
/** /**
* Create a new PHPExcel_Calculation_Function * Create a new PHPExcel_Calculation_Function
@@ -76,13 +69,13 @@ class PHPExcel_Calculation_Function {
* @param string $pPHPExcelName PHPExcel function mapping * @param string $pPHPExcelName PHPExcel function mapping
* @throws PHPExcel_Calculation_Exception * @throws PHPExcel_Calculation_Exception
*/ */
public function __construct($pCategory = NULL, $pExcelName = NULL, $pPHPExcelName = NULL) public function __construct($pCategory = null, $pExcelName = null, $pPHPExcelName = null)
{ {
if (($pCategory !== NULL) && ($pExcelName !== NULL) && ($pPHPExcelName !== NULL)) { if (($pCategory !== null) && ($pExcelName !== null) && ($pPHPExcelName !== null)) {
// Initialise values // Initialise values
$this->_category = $pCategory; $this->category = $pCategory;
$this->_excelName = $pExcelName; $this->excelName = $pExcelName;
$this->_phpExcelName = $pPHPExcelName; $this->phpExcelName = $pPHPExcelName;
} else { } else {
throw new PHPExcel_Calculation_Exception("Invalid parameters passed."); throw new PHPExcel_Calculation_Exception("Invalid parameters passed.");
} }
@@ -93,8 +86,9 @@ class PHPExcel_Calculation_Function {
* *
* @return string * @return string
*/ */
public function getCategory() { public function getCategory()
return $this->_category; {
return $this->category;
} }
/** /**
@@ -103,9 +97,10 @@ class PHPExcel_Calculation_Function {
* @param string $value * @param string $value
* @throws PHPExcel_Calculation_Exception * @throws PHPExcel_Calculation_Exception
*/ */
public function setCategory($value = null) { public function setCategory($value = null)
{
if (!is_null($value)) { if (!is_null($value)) {
$this->_category = $value; $this->category = $value;
} else { } else {
throw new PHPExcel_Calculation_Exception("Invalid parameter passed."); throw new PHPExcel_Calculation_Exception("Invalid parameter passed.");
} }
@@ -116,8 +111,9 @@ class PHPExcel_Calculation_Function {
* *
* @return string * @return string
*/ */
public function getExcelName() { public function getExcelName()
return $this->_excelName; {
return $this->excelName;
} }
/** /**
@@ -125,8 +121,9 @@ class PHPExcel_Calculation_Function {
* *
* @param string $value * @param string $value
*/ */
public function setExcelName($value) { public function setExcelName($value)
$this->_excelName = $value; {
$this->excelName = $value;
} }
/** /**
@@ -134,8 +131,9 @@ class PHPExcel_Calculation_Function {
* *
* @return string * @return string
*/ */
public function getPHPExcelName() { public function getPHPExcelName()
return $this->_phpExcelName; {
return $this->phpExcelName;
} }
/** /**
@@ -143,7 +141,8 @@ class PHPExcel_Calculation_Function {
* *
* @param string $value * @param string $value
*/ */
public function setPHPExcelName($value) { public function setPHPExcelName($value)
$this->_phpExcelName = $value; {
$this->phpExcelName = $value;
} }
} }

View File

@@ -1,30 +1,4 @@
<?php <?php
/**
* PHPExcel
*
* Copyright (c) 2006 - 2014 PHPExcel
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
* version 2.1 of the License, or (at your option) any later version.
*
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with this library; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
*
* @category PHPExcel
* @package PHPExcel_Calculation
* @copyright Copyright (c) 2006 - 2014 PHPExcel (http://www.codeplex.com/PHPExcel)
* @license http://www.gnu.org/licenses/old-licenses/lgpl-2.1.txt LGPL
* @version 1.8.0, 2014-03-02
*/
/** PHPExcel root directory */ /** PHPExcel root directory */
if (!defined('PHPEXCEL_ROOT')) { if (!defined('PHPEXCEL_ROOT')) {
@@ -52,11 +26,30 @@ define('PRECISION', 8.88E-016);
/** /**
* PHPExcel_Calculation_Functions * PHPExcel_Calculation_Functions
* *
* Copyright (c) 2006 - 2015 PHPExcel
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
* version 2.1 of the License, or (at your option) any later version.
*
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with this library; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
*
* @category PHPExcel * @category PHPExcel
* @package PHPExcel_Calculation * @package PHPExcel_Calculation
* @copyright Copyright (c) 2006 - 2014 PHPExcel (http://www.codeplex.com/PHPExcel) * @copyright Copyright (c) 2006 - 2015 PHPExcel (http://www.codeplex.com/PHPExcel)
* @license http://www.gnu.org/licenses/old-licenses/lgpl-2.1.txt LGPL
* @version ##VERSION##, ##DATE##
*/ */
class PHPExcel_Calculation_Functions { class PHPExcel_Calculation_Functions
{
/** constants */ /** constants */
const COMPATIBILITY_EXCEL = 'Excel'; const COMPATIBILITY_EXCEL = 'Excel';
@@ -82,7 +75,7 @@ class PHPExcel_Calculation_Functions {
* @access private * @access private
* @var string * @var string
*/ */
protected static $ReturnDateType = self::RETURNDATE_EXCEL; protected static $returnDateType = self::RETURNDATE_EXCEL;
/** /**
* List of error codes * List of error codes
@@ -90,7 +83,8 @@ class PHPExcel_Calculation_Functions {
* @access private * @access private
* @var array * @var array
*/ */
protected static $_errorCodes = array( 'null' => '#NULL!', protected static $errorCodes = array(
'null' => '#NULL!',
'divisionbyzero' => '#DIV/0!', 'divisionbyzero' => '#DIV/0!',
'value' => '#VALUE!', 'value' => '#VALUE!',
'reference' => '#REF!', 'reference' => '#REF!',
@@ -113,15 +107,16 @@ class PHPExcel_Calculation_Functions {
* PHPExcel_Calculation_Functions::COMPATIBILITY_OPENOFFICE 'OpenOfficeCalc' * PHPExcel_Calculation_Functions::COMPATIBILITY_OPENOFFICE 'OpenOfficeCalc'
* @return boolean (Success or Failure) * @return boolean (Success or Failure)
*/ */
public static function setCompatibilityMode($compatibilityMode) { public static function setCompatibilityMode($compatibilityMode)
{
if (($compatibilityMode == self::COMPATIBILITY_EXCEL) || if (($compatibilityMode == self::COMPATIBILITY_EXCEL) ||
($compatibilityMode == self::COMPATIBILITY_GNUMERIC) || ($compatibilityMode == self::COMPATIBILITY_GNUMERIC) ||
($compatibilityMode == self::COMPATIBILITY_OPENOFFICE)) { ($compatibilityMode == self::COMPATIBILITY_OPENOFFICE)) {
self::$compatibilityMode = $compatibilityMode; self::$compatibilityMode = $compatibilityMode;
return True; return true;
}
return false;
} }
return False;
} // function setCompatibilityMode()
/** /**
@@ -135,9 +130,10 @@ class PHPExcel_Calculation_Functions {
* PHPExcel_Calculation_Functions::COMPATIBILITY_GNUMERIC 'Gnumeric' * PHPExcel_Calculation_Functions::COMPATIBILITY_GNUMERIC 'Gnumeric'
* PHPExcel_Calculation_Functions::COMPATIBILITY_OPENOFFICE 'OpenOfficeCalc' * PHPExcel_Calculation_Functions::COMPATIBILITY_OPENOFFICE 'OpenOfficeCalc'
*/ */
public static function getCompatibilityMode() { public static function getCompatibilityMode()
{
return self::$compatibilityMode; return self::$compatibilityMode;
} // function getCompatibilityMode() }
/** /**
@@ -152,15 +148,16 @@ class PHPExcel_Calculation_Functions {
* PHPExcel_Calculation_Functions::RETURNDATE_EXCEL 'E' * PHPExcel_Calculation_Functions::RETURNDATE_EXCEL 'E'
* @return boolean Success or failure * @return boolean Success or failure
*/ */
public static function setReturnDateType($returnDateType) { public static function setReturnDateType($returnDateType)
{
if (($returnDateType == self::RETURNDATE_PHP_NUMERIC) || if (($returnDateType == self::RETURNDATE_PHP_NUMERIC) ||
($returnDateType == self::RETURNDATE_PHP_OBJECT) || ($returnDateType == self::RETURNDATE_PHP_OBJECT) ||
($returnDateType == self::RETURNDATE_EXCEL)) { ($returnDateType == self::RETURNDATE_EXCEL)) {
self::$ReturnDateType = $returnDateType; self::$returnDateType = $returnDateType;
return True; return true;
}
return false;
} }
return False;
} // function setReturnDateType()
/** /**
@@ -174,9 +171,10 @@ class PHPExcel_Calculation_Functions {
* PHPExcel_Calculation_Functions::RETURNDATE_PHP_OBJECT 'O' * PHPExcel_Calculation_Functions::RETURNDATE_PHP_OBJECT 'O'
* PHPExcel_Calculation_Functions::RETURNDATE_EXCEL 'E' * PHPExcel_Calculation_Functions::RETURNDATE_EXCEL 'E'
*/ */
public static function getReturnDateType() { public static function getReturnDateType()
return self::$ReturnDateType; {
} // function getReturnDateType() return self::$returnDateType;
}
/** /**
@@ -186,9 +184,10 @@ class PHPExcel_Calculation_Functions {
* @category Error Returns * @category Error Returns
* @return string #Not Yet Implemented * @return string #Not Yet Implemented
*/ */
public static function DUMMY() { public static function DUMMY()
{
return '#Not Yet Implemented'; return '#Not Yet Implemented';
} // function DUMMY() }
/** /**
@@ -198,9 +197,10 @@ class PHPExcel_Calculation_Functions {
* @category Error Returns * @category Error Returns
* @return string #Not Yet Implemented * @return string #Not Yet Implemented
*/ */
public static function DIV0() { public static function DIV0()
return self::$_errorCodes['divisionbyzero']; {
} // function DIV0() return self::$errorCodes['divisionbyzero'];
}
/** /**
@@ -216,9 +216,10 @@ class PHPExcel_Calculation_Functions {
* @category Logical Functions * @category Logical Functions
* @return string #N/A! * @return string #N/A!
*/ */
public static function NA() { public static function NA()
return self::$_errorCodes['na']; {
} // function NA() return self::$errorCodes['na'];
}
/** /**
@@ -230,9 +231,10 @@ class PHPExcel_Calculation_Functions {
* @category Error Returns * @category Error Returns
* @return string #NUM! * @return string #NUM!
*/ */
public static function NaN() { public static function NaN()
return self::$_errorCodes['num']; {
} // function NaN() return self::$errorCodes['num'];
}
/** /**
@@ -244,9 +246,10 @@ class PHPExcel_Calculation_Functions {
* @category Error Returns * @category Error Returns
* @return string #NAME? * @return string #NAME?
*/ */
public static function NAME() { public static function NAME()
return self::$_errorCodes['name']; {
} // function NAME() return self::$errorCodes['name'];
}
/** /**
@@ -258,9 +261,10 @@ class PHPExcel_Calculation_Functions {
* @category Error Returns * @category Error Returns
* @return string #REF! * @return string #REF!
*/ */
public static function REF() { public static function REF()
return self::$_errorCodes['reference']; {
} // function REF() return self::$errorCodes['reference'];
}
/** /**
@@ -272,9 +276,10 @@ class PHPExcel_Calculation_Functions {
* @category Error Returns * @category Error Returns
* @return string #NULL! * @return string #NULL!
*/ */
public static function NULL() { public static function NULL()
return self::$_errorCodes['null']; {
} // function NULL() return self::$errorCodes['null'];
}
/** /**
@@ -286,46 +291,53 @@ class PHPExcel_Calculation_Functions {
* @category Error Returns * @category Error Returns
* @return string #VALUE! * @return string #VALUE!
*/ */
public static function VALUE() { public static function VALUE()
return self::$_errorCodes['value']; {
} // function VALUE() return self::$errorCodes['value'];
public static function isMatrixValue($idx) {
return ((substr_count($idx,'.') <= 1) || (preg_match('/\.[A-Z]/',$idx) > 0));
} }
public static function isValue($idx) { public static function isMatrixValue($idx)
return (substr_count($idx,'.') == 0); {
return ((substr_count($idx, '.') <= 1) || (preg_match('/\.[A-Z]/', $idx) > 0));
} }
public static function isCellValue($idx) { public static function isValue($idx)
return (substr_count($idx,'.') > 1); {
return (substr_count($idx, '.') == 0);
} }
public static function _ifCondition($condition) { public static function isCellValue($idx)
{
return (substr_count($idx, '.') > 1);
}
public static function ifCondition($condition)
{
$condition = PHPExcel_Calculation_Functions::flattenSingleValue($condition); $condition = PHPExcel_Calculation_Functions::flattenSingleValue($condition);
if (!isset($condition{0})) if (!isset($condition{0})) {
$condition = '=""'; $condition = '=""';
if (!in_array($condition{0},array('>', '<', '='))) { }
if (!is_numeric($condition)) { $condition = PHPExcel_Calculation::_wrapResult(strtoupper($condition)); } if (!in_array($condition{0}, array('>', '<', '='))) {
return '='.$condition; if (!is_numeric($condition)) {
$condition = PHPExcel_Calculation::wrapResult(strtoupper($condition));
}
return '=' . $condition;
} else { } else {
preg_match('/([<>=]+)(.*)/',$condition,$matches); preg_match('/([<>=]+)(.*)/', $condition, $matches);
list(,$operator,$operand) = $matches; list(, $operator, $operand) = $matches;
if (!is_numeric($operand)) { if (!is_numeric($operand)) {
$operand = str_replace('"', '""', $operand); $operand = str_replace('"', '""', $operand);
$operand = PHPExcel_Calculation::_wrapResult(strtoupper($operand)); $operand = PHPExcel_Calculation::wrapResult(strtoupper($operand));
} }
return $operator.$operand; return $operator.$operand;
} }
} // function _ifCondition() }
/** /**
* ERROR_TYPE * ERROR_TYPE
@@ -333,18 +345,19 @@ class PHPExcel_Calculation_Functions {
* @param mixed $value Value to check * @param mixed $value Value to check
* @return boolean * @return boolean
*/ */
public static function ERROR_TYPE($value = '') { public static function ERROR_TYPE($value = '')
{
$value = self::flattenSingleValue($value); $value = self::flattenSingleValue($value);
$i = 1; $i = 1;
foreach(self::$_errorCodes as $errorCode) { foreach (self::$errorCodes as $errorCode) {
if ($value === $errorCode) { if ($value === $errorCode) {
return $i; return $i;
} }
++$i; ++$i;
} }
return self::NA(); return self::NA();
} // function ERROR_TYPE() }
/** /**
@@ -353,13 +366,14 @@ class PHPExcel_Calculation_Functions {
* @param mixed $value Value to check * @param mixed $value Value to check
* @return boolean * @return boolean
*/ */
public static function IS_BLANK($value = NULL) { public static function IS_BLANK($value = null)
{
if (!is_null($value)) { if (!is_null($value)) {
$value = self::flattenSingleValue($value); $value = self::flattenSingleValue($value);
} }
return is_null($value); return is_null($value);
} // function IS_BLANK() }
/** /**
@@ -368,11 +382,12 @@ class PHPExcel_Calculation_Functions {
* @param mixed $value Value to check * @param mixed $value Value to check
* @return boolean * @return boolean
*/ */
public static function IS_ERR($value = '') { public static function IS_ERR($value = '')
{
$value = self::flattenSingleValue($value); $value = self::flattenSingleValue($value);
return self::IS_ERROR($value) && (!self::IS_NA($value)); return self::IS_ERROR($value) && (!self::IS_NA($value));
} // function IS_ERR() }
/** /**
@@ -381,13 +396,15 @@ class PHPExcel_Calculation_Functions {
* @param mixed $value Value to check * @param mixed $value Value to check
* @return boolean * @return boolean
*/ */
public static function IS_ERROR($value = '') { public static function IS_ERROR($value = '')
{
$value = self::flattenSingleValue($value); $value = self::flattenSingleValue($value);
if (!is_string($value)) if (!is_string($value)) {
return false; return false;
return in_array($value, array_values(self::$_errorCodes)); }
} // function IS_ERROR() return in_array($value, array_values(self::$errorCodes));
}
/** /**
@@ -396,11 +413,12 @@ class PHPExcel_Calculation_Functions {
* @param mixed $value Value to check * @param mixed $value Value to check
* @return boolean * @return boolean
*/ */
public static function IS_NA($value = '') { public static function IS_NA($value = '')
{
$value = self::flattenSingleValue($value); $value = self::flattenSingleValue($value);
return ($value === self::NA()); return ($value === self::NA());
} // function IS_NA() }
/** /**
@@ -409,15 +427,18 @@ class PHPExcel_Calculation_Functions {
* @param mixed $value Value to check * @param mixed $value Value to check
* @return boolean * @return boolean
*/ */
public static function IS_EVEN($value = NULL) { public static function IS_EVEN($value = null)
{
$value = self::flattenSingleValue($value); $value = self::flattenSingleValue($value);
if ($value === NULL) if ($value === null) {
return self::NAME(); return self::NAME();
if ((is_bool($value)) || ((is_string($value)) && (!is_numeric($value)))) } elseif ((is_bool($value)) || ((is_string($value)) && (!is_numeric($value)))) {
return self::VALUE(); return self::VALUE();
}
return ($value % 2 == 0); return ($value % 2 == 0);
} // function IS_EVEN() }
/** /**
@@ -426,15 +447,18 @@ class PHPExcel_Calculation_Functions {
* @param mixed $value Value to check * @param mixed $value Value to check
* @return boolean * @return boolean
*/ */
public static function IS_ODD($value = NULL) { public static function IS_ODD($value = null)
{
$value = self::flattenSingleValue($value); $value = self::flattenSingleValue($value);
if ($value === NULL) if ($value === null) {
return self::NAME(); return self::NAME();
if ((is_bool($value)) || ((is_string($value)) && (!is_numeric($value)))) } elseif ((is_bool($value)) || ((is_string($value)) && (!is_numeric($value)))) {
return self::VALUE(); return self::VALUE();
}
return (abs($value) % 2 == 1); return (abs($value) % 2 == 1);
} // function IS_ODD() }
/** /**
@@ -443,14 +467,15 @@ class PHPExcel_Calculation_Functions {
* @param mixed $value Value to check * @param mixed $value Value to check
* @return boolean * @return boolean
*/ */
public static function IS_NUMBER($value = NULL) { public static function IS_NUMBER($value = null)
{
$value = self::flattenSingleValue($value); $value = self::flattenSingleValue($value);
if (is_string($value)) { if (is_string($value)) {
return False; return false;
} }
return is_numeric($value); return is_numeric($value);
} // function IS_NUMBER() }
/** /**
@@ -459,11 +484,12 @@ class PHPExcel_Calculation_Functions {
* @param mixed $value Value to check * @param mixed $value Value to check
* @return boolean * @return boolean
*/ */
public static function IS_LOGICAL($value = NULL) { public static function IS_LOGICAL($value = null)
{
$value = self::flattenSingleValue($value); $value = self::flattenSingleValue($value);
return is_bool($value); return is_bool($value);
} // function IS_LOGICAL() }
/** /**
@@ -472,11 +498,12 @@ class PHPExcel_Calculation_Functions {
* @param mixed $value Value to check * @param mixed $value Value to check
* @return boolean * @return boolean
*/ */
public static function IS_TEXT($value = NULL) { public static function IS_TEXT($value = null)
{
$value = self::flattenSingleValue($value); $value = self::flattenSingleValue($value);
return (is_string($value) && !self::IS_ERROR($value)); return (is_string($value) && !self::IS_ERROR($value));
} // function IS_TEXT() }
/** /**
@@ -485,9 +512,10 @@ class PHPExcel_Calculation_Functions {
* @param mixed $value Value to check * @param mixed $value Value to check
* @return boolean * @return boolean
*/ */
public static function IS_NONTEXT($value = NULL) { public static function IS_NONTEXT($value = null)
{
return !self::IS_TEXT($value); return !self::IS_TEXT($value);
} // function IS_NONTEXT() }
/** /**
@@ -495,9 +523,10 @@ class PHPExcel_Calculation_Functions {
* *
* @return string Version information * @return string Version information
*/ */
public static function VERSION() { public static function VERSION()
return 'PHPExcel 1.8.0, 2014-03-02'; {
} // function VERSION() return 'PHPExcel ##VERSION##, ##DATE##';
}
/** /**
@@ -515,21 +544,20 @@ class PHPExcel_Calculation_Functions {
* An error value The error value * An error value The error value
* Anything else 0 * Anything else 0
*/ */
public static function N($value = NULL) { public static function N($value = null)
{
while (is_array($value)) { while (is_array($value)) {
$value = array_shift($value); $value = array_shift($value);
} }
switch (gettype($value)) { switch (gettype($value)) {
case 'double' : case 'double':
case 'float' : case 'float':
case 'integer' : case 'integer':
return $value; return $value;
break; case 'boolean':
case 'boolean' :
return (integer) $value; return (integer) $value;
break; case 'string':
case 'string' :
// Errors // Errors
if ((strlen($value) > 0) && ($value{0} == '#')) { if ((strlen($value) > 0) && ($value{0} == '#')) {
return $value; return $value;
@@ -537,7 +565,7 @@ class PHPExcel_Calculation_Functions {
break; break;
} }
return 0; return 0;
} // function N() }
/** /**
@@ -554,11 +582,12 @@ class PHPExcel_Calculation_Functions {
* An error value 16 * An error value 16
* Array or Matrix 64 * Array or Matrix 64
*/ */
public static function TYPE($value = NULL) { public static function TYPE($value = null)
{
$value = self::flattenArrayIndexed($value); $value = self::flattenArrayIndexed($value);
if (is_array($value) && (count($value) > 1)) { if (is_array($value) && (count($value) > 1)) {
$a = array_keys($value); end($value);
$a = array_pop($a); $a = key($value);
// Range of cells is an error // Range of cells is an error
if (self::isCellValue($a)) { if (self::isCellValue($a)) {
return 16; return 16;
@@ -566,20 +595,19 @@ class PHPExcel_Calculation_Functions {
} elseif (self::isMatrixValue($a)) { } elseif (self::isMatrixValue($a)) {
return 64; return 64;
} }
} elseif(empty($value)) { } elseif (empty($value)) {
// Empty Cell // Empty Cell
return 1; return 1;
} }
$value = self::flattenSingleValue($value); $value = self::flattenSingleValue($value);
if (($value === NULL) || (is_float($value)) || (is_int($value))) { if (($value === null) || (is_float($value)) || (is_int($value))) {
return 1; return 1;
} elseif(is_bool($value)) { } elseif (is_bool($value)) {
return 4; return 4;
} elseif(is_array($value)) { } elseif (is_array($value)) {
return 64; return 64;
break; } elseif (is_string($value)) {
} elseif(is_string($value)) {
// Errors // Errors
if ((strlen($value) > 0) && ($value{0} == '#')) { if ((strlen($value) > 0) && ($value{0} == '#')) {
return 16; return 16;
@@ -587,7 +615,7 @@ class PHPExcel_Calculation_Functions {
return 2; return 2;
} }
return 0; return 0;
} // function TYPE() }
/** /**
@@ -596,7 +624,8 @@ class PHPExcel_Calculation_Functions {
* @param array $array Array to be flattened * @param array $array Array to be flattened
* @return array Flattened array * @return array Flattened array
*/ */
public static function flattenArray($array) { public static function flattenArray($array)
{
if (!is_array($array)) { if (!is_array($array)) {
return (array) $array; return (array) $array;
} }
@@ -619,7 +648,7 @@ class PHPExcel_Calculation_Functions {
} }
return $arrayValues; return $arrayValues;
} // function flattenArray() }
/** /**
@@ -628,7 +657,8 @@ class PHPExcel_Calculation_Functions {
* @param array $array Array to be flattened * @param array $array Array to be flattened
* @return array Flattened array * @return array Flattened array
*/ */
public static function flattenArrayIndexed($array) { public static function flattenArrayIndexed($array)
{
if (!is_array($array)) { if (!is_array($array)) {
return (array) $array; return (array) $array;
} }
@@ -651,7 +681,7 @@ class PHPExcel_Calculation_Functions {
} }
return $arrayValues; return $arrayValues;
} // function flattenArrayIndexed() }
/** /**
@@ -660,15 +690,15 @@ class PHPExcel_Calculation_Functions {
* @param mixed $value Array or scalar value * @param mixed $value Array or scalar value
* @return mixed * @return mixed
*/ */
public static function flattenSingleValue($value = '') { public static function flattenSingleValue($value = '')
{
while (is_array($value)) { while (is_array($value)) {
$value = array_pop($value); $value = array_pop($value);
} }
return $value; return $value;
} // function flattenSingleValue() }
}
} // class PHPExcel_Calculation_Functions
// //
@@ -677,19 +707,22 @@ class PHPExcel_Calculation_Functions {
// So we test if they do exist for this version of PHP/operating platform; and if not we create them // So we test if they do exist for this version of PHP/operating platform; and if not we create them
// //
if (!function_exists('acosh')) { if (!function_exists('acosh')) {
function acosh($x) { function acosh($x)
{
return 2 * log(sqrt(($x + 1) / 2) + sqrt(($x - 1) / 2)); return 2 * log(sqrt(($x + 1) / 2) + sqrt(($x - 1) / 2));
} // function acosh() } // function acosh()
} }
if (!function_exists('asinh')) { if (!function_exists('asinh')) {
function asinh($x) { function asinh($x)
{
return log($x + sqrt(1 + $x * $x)); return log($x + sqrt(1 + $x * $x));
} // function asinh() } // function asinh()
} }
if (!function_exists('atanh')) { if (!function_exists('atanh')) {
function atanh($x) { function atanh($x)
{
return (log(1 + $x) - log(1 - $x)) / 2; return (log(1 + $x) - log(1 - $x)) / 2;
} // function atanh() } // function atanh()
} }
@@ -701,22 +734,23 @@ if (!function_exists('atanh')) {
// //
if ((!function_exists('mb_str_replace')) && if ((!function_exists('mb_str_replace')) &&
(function_exists('mb_substr')) && (function_exists('mb_strlen')) && (function_exists('mb_strpos'))) { (function_exists('mb_substr')) && (function_exists('mb_strlen')) && (function_exists('mb_strpos'))) {
function mb_str_replace($search, $replace, $subject) { function mb_str_replace($search, $replace, $subject)
if(is_array($subject)) { {
if (is_array($subject)) {
$ret = array(); $ret = array();
foreach($subject as $key => $val) { foreach ($subject as $key => $val) {
$ret[$key] = mb_str_replace($search, $replace, $val); $ret[$key] = mb_str_replace($search, $replace, $val);
} }
return $ret; return $ret;
} }
foreach((array) $search as $key => $s) { foreach ((array) $search as $key => $s) {
if($s == '') { if ($s == '' && $s !== 0) {
continue; continue;
} }
$r = !is_array($replace) ? $replace : (array_key_exists($key, $replace) ? $replace[$key] : ''); $r = !is_array($replace) ? $replace : (array_key_exists($key, $replace) ? $replace[$key] : '');
$pos = mb_strpos($subject, $s, 0, 'UTF-8'); $pos = mb_strpos($subject, $s, 0, 'UTF-8');
while($pos !== false) { while ($pos !== false) {
$subject = mb_substr($subject, 0, $pos, 'UTF-8') . $r . mb_substr($subject, $pos + mb_strlen($s, 'UTF-8'), 65535, 'UTF-8'); $subject = mb_substr($subject, 0, $pos, 'UTF-8') . $r . mb_substr($subject, $pos + mb_strlen($s, 'UTF-8'), 65535, 'UTF-8');
$pos = mb_strpos($subject, $s, $pos + mb_strlen($r, 'UTF-8'), 'UTF-8'); $pos = mb_strpos($subject, $s, $pos + mb_strlen($r, 'UTF-8'), 'UTF-8');
} }

View File

@@ -1,8 +1,18 @@
<?php <?php
/** PHPExcel root directory */
if (!defined('PHPEXCEL_ROOT')) {
/**
* @ignore
*/
define('PHPEXCEL_ROOT', dirname(__FILE__) . '/../../');
require(PHPEXCEL_ROOT . 'PHPExcel/Autoloader.php');
}
/** /**
* PHPExcel * PHPExcel_Calculation_Logical
* *
* Copyright (c) 2006 - 2014 PHPExcel * Copyright (c) 2006 - 2015 PHPExcel
* *
* This library is free software; you can redistribute it and/or * This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public * modify it under the terms of the GNU Lesser General Public
@@ -20,31 +30,12 @@
* *
* @category PHPExcel * @category PHPExcel
* @package PHPExcel_Calculation * @package PHPExcel_Calculation
* @copyright Copyright (c) 2006 - 2014 PHPExcel (http://www.codeplex.com/PHPExcel) * @copyright Copyright (c) 2006 - 2015 PHPExcel (http://www.codeplex.com/PHPExcel)
* @license http://www.gnu.org/licenses/old-licenses/lgpl-2.1.txt LGPL * @license http://www.gnu.org/licenses/old-licenses/lgpl-2.1.txt LGPL
* @version 1.8.0, 2014-03-02 * @version ##VERSION##, ##DATE##
*/ */
class PHPExcel_Calculation_Logical
{
/** PHPExcel root directory */
if (!defined('PHPEXCEL_ROOT')) {
/**
* @ignore
*/
define('PHPEXCEL_ROOT', dirname(__FILE__) . '/../../');
require(PHPEXCEL_ROOT . 'PHPExcel/Autoloader.php');
}
/**
* PHPExcel_Calculation_Logical
*
* @category PHPExcel
* @package PHPExcel_Calculation
* @copyright Copyright (c) 2006 - 2014 PHPExcel (http://www.codeplex.com/PHPExcel)
*/
class PHPExcel_Calculation_Logical {
/** /**
* TRUE * TRUE
* *
@@ -57,9 +48,10 @@ class PHPExcel_Calculation_Logical {
* @category Logical Functions * @category Logical Functions
* @return boolean True * @return boolean True
*/ */
public static function TRUE() { public static function TRUE()
return TRUE; {
} // function TRUE() return true;
}
/** /**
@@ -74,9 +66,10 @@ class PHPExcel_Calculation_Logical {
* @category Logical Functions * @category Logical Functions
* @return boolean False * @return boolean False
*/ */
public static function FALSE() { public static function FALSE()
return FALSE; {
} // function FALSE() return false;
}
/** /**
@@ -100,9 +93,10 @@ class PHPExcel_Calculation_Logical {
* @param mixed $arg,... Data values * @param mixed $arg,... Data values
* @return boolean The logical AND of the arguments. * @return boolean The logical AND of the arguments.
*/ */
public static function LOGICAL_AND() { public static function LOGICAL_AND()
{
// Return value // Return value
$returnValue = TRUE; $returnValue = true;
// Loop through the arguments // Loop through the arguments
$aArgs = PHPExcel_Calculation_Functions::flattenArray(func_get_args()); $aArgs = PHPExcel_Calculation_Functions::flattenArray(func_get_args());
@@ -116,9 +110,9 @@ class PHPExcel_Calculation_Logical {
} elseif (is_string($arg)) { } elseif (is_string($arg)) {
$arg = strtoupper($arg); $arg = strtoupper($arg);
if (($arg == 'TRUE') || ($arg == PHPExcel_Calculation::getTRUE())) { if (($arg == 'TRUE') || ($arg == PHPExcel_Calculation::getTRUE())) {
$arg = TRUE; $arg = true;
} elseif (($arg == 'FALSE') || ($arg == PHPExcel_Calculation::getFALSE())) { } elseif (($arg == 'FALSE') || ($arg == PHPExcel_Calculation::getFALSE())) {
$arg = FALSE; $arg = false;
} else { } else {
return PHPExcel_Calculation_Functions::VALUE(); return PHPExcel_Calculation_Functions::VALUE();
} }
@@ -131,7 +125,7 @@ class PHPExcel_Calculation_Logical {
return PHPExcel_Calculation_Functions::VALUE(); return PHPExcel_Calculation_Functions::VALUE();
} }
return $returnValue; return $returnValue;
} // function LOGICAL_AND() }
/** /**
@@ -155,9 +149,10 @@ class PHPExcel_Calculation_Logical {
* @param mixed $arg,... Data values * @param mixed $arg,... Data values
* @return boolean The logical OR of the arguments. * @return boolean The logical OR of the arguments.
*/ */
public static function LOGICAL_OR() { public static function LOGICAL_OR()
{
// Return value // Return value
$returnValue = FALSE; $returnValue = false;
// Loop through the arguments // Loop through the arguments
$aArgs = PHPExcel_Calculation_Functions::flattenArray(func_get_args()); $aArgs = PHPExcel_Calculation_Functions::flattenArray(func_get_args());
@@ -171,9 +166,9 @@ class PHPExcel_Calculation_Logical {
} elseif (is_string($arg)) { } elseif (is_string($arg)) {
$arg = strtoupper($arg); $arg = strtoupper($arg);
if (($arg == 'TRUE') || ($arg == PHPExcel_Calculation::getTRUE())) { if (($arg == 'TRUE') || ($arg == PHPExcel_Calculation::getTRUE())) {
$arg = TRUE; $arg = true;
} elseif (($arg == 'FALSE') || ($arg == PHPExcel_Calculation::getFALSE())) { } elseif (($arg == 'FALSE') || ($arg == PHPExcel_Calculation::getFALSE())) {
$arg = FALSE; $arg = false;
} else { } else {
return PHPExcel_Calculation_Functions::VALUE(); return PHPExcel_Calculation_Functions::VALUE();
} }
@@ -186,7 +181,7 @@ class PHPExcel_Calculation_Logical {
return PHPExcel_Calculation_Functions::VALUE(); return PHPExcel_Calculation_Functions::VALUE();
} }
return $returnValue; return $returnValue;
} // function LOGICAL_OR() }
/** /**
@@ -209,21 +204,22 @@ class PHPExcel_Calculation_Logical {
* @param mixed $logical A value or expression that can be evaluated to TRUE or FALSE * @param mixed $logical A value or expression that can be evaluated to TRUE or FALSE
* @return boolean The boolean inverse of the argument. * @return boolean The boolean inverse of the argument.
*/ */
public static function NOT($logical=FALSE) { public static function NOT($logical = false)
{
$logical = PHPExcel_Calculation_Functions::flattenSingleValue($logical); $logical = PHPExcel_Calculation_Functions::flattenSingleValue($logical);
if (is_string($logical)) { if (is_string($logical)) {
$logical = strtoupper($logical); $logical = strtoupper($logical);
if (($logical == 'TRUE') || ($logical == PHPExcel_Calculation::getTRUE())) { if (($logical == 'TRUE') || ($logical == PHPExcel_Calculation::getTRUE())) {
return FALSE; return false;
} elseif (($logical == 'FALSE') || ($logical == PHPExcel_Calculation::getFALSE())) { } elseif (($logical == 'FALSE') || ($logical == PHPExcel_Calculation::getFALSE())) {
return TRUE; return true;
} else { } else {
return PHPExcel_Calculation_Functions::VALUE(); return PHPExcel_Calculation_Functions::VALUE();
} }
} }
return !$logical; return !$logical;
} // function NOT() }
/** /**
* STATEMENT_IF * STATEMENT_IF
@@ -257,13 +253,14 @@ class PHPExcel_Calculation_Logical {
* @param mixed $returnIfFalse Optional value to return when condition is false * @param mixed $returnIfFalse Optional value to return when condition is false
* @return mixed The value of returnIfTrue or returnIfFalse determined by condition * @return mixed The value of returnIfTrue or returnIfFalse determined by condition
*/ */
public static function STATEMENT_IF($condition = TRUE, $returnIfTrue = 0, $returnIfFalse = FALSE) { public static function STATEMENT_IF($condition = true, $returnIfTrue = 0, $returnIfFalse = false)
$condition = (is_null($condition)) ? TRUE : (boolean) PHPExcel_Calculation_Functions::flattenSingleValue($condition); {
$condition = (is_null($condition)) ? true : (boolean) PHPExcel_Calculation_Functions::flattenSingleValue($condition);
$returnIfTrue = (is_null($returnIfTrue)) ? 0 : PHPExcel_Calculation_Functions::flattenSingleValue($returnIfTrue); $returnIfTrue = (is_null($returnIfTrue)) ? 0 : PHPExcel_Calculation_Functions::flattenSingleValue($returnIfTrue);
$returnIfFalse = (is_null($returnIfFalse)) ? FALSE : PHPExcel_Calculation_Functions::flattenSingleValue($returnIfFalse); $returnIfFalse = (is_null($returnIfFalse)) ? false : PHPExcel_Calculation_Functions::flattenSingleValue($returnIfFalse);
return ($condition) ? $returnIfTrue : $returnIfFalse; return ($condition) ? $returnIfTrue : $returnIfFalse;
} // function STATEMENT_IF() }
/** /**
@@ -278,11 +275,11 @@ class PHPExcel_Calculation_Logical {
* @param mixed $errorpart Value to return when testValue is an error condition * @param mixed $errorpart Value to return when testValue is an error condition
* @return mixed The value of errorpart or testValue determined by error condition * @return mixed The value of errorpart or testValue determined by error condition
*/ */
public static function IFERROR($testValue = '', $errorpart = '') { public static function IFERROR($testValue = '', $errorpart = '')
{
$testValue = (is_null($testValue)) ? '' : PHPExcel_Calculation_Functions::flattenSingleValue($testValue); $testValue = (is_null($testValue)) ? '' : PHPExcel_Calculation_Functions::flattenSingleValue($testValue);
$errorpart = (is_null($errorpart)) ? '' : PHPExcel_Calculation_Functions::flattenSingleValue($errorpart); $errorpart = (is_null($errorpart)) ? '' : PHPExcel_Calculation_Functions::flattenSingleValue($errorpart);
return self::STATEMENT_IF(PHPExcel_Calculation_Functions::IS_ERROR($testValue), $errorpart, $testValue); return self::STATEMENT_IF(PHPExcel_Calculation_Functions::IS_ERROR($testValue), $errorpart, $testValue);
} // function IFERROR() }
}
} // class PHPExcel_Calculation_Logical

View File

@@ -1,8 +1,18 @@
<?php <?php
/** PHPExcel root directory */
if (!defined('PHPEXCEL_ROOT')) {
/**
* @ignore
*/
define('PHPEXCEL_ROOT', dirname(__FILE__) . '/../../');
require(PHPEXCEL_ROOT . 'PHPExcel/Autoloader.php');
}
/** /**
* PHPExcel * PHPExcel_Calculation_LookupRef
* *
* Copyright (c) 2006 - 2014 PHPExcel * Copyright (c) 2006 - 2015 PHPExcel
* *
* This library is free software; you can redistribute it and/or * This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public * modify it under the terms of the GNU Lesser General Public
@@ -20,32 +30,12 @@
* *
* @category PHPExcel * @category PHPExcel
* @package PHPExcel_Calculation * @package PHPExcel_Calculation
* @copyright Copyright (c) 2006 - 2014 PHPExcel (http://www.codeplex.com/PHPExcel) * @copyright Copyright (c) 2006 - 2015 PHPExcel (http://www.codeplex.com/PHPExcel)
* @license http://www.gnu.org/licenses/old-licenses/lgpl-2.1.txt LGPL * @license http://www.gnu.org/licenses/old-licenses/lgpl-2.1.txt LGPL
* @version 1.8.0, 2014-03-02 * @version ##VERSION##, ##DATE##
*/ */
class PHPExcel_Calculation_LookupRef
{
/** PHPExcel root directory */
if (!defined('PHPEXCEL_ROOT')) {
/**
* @ignore
*/
define('PHPEXCEL_ROOT', dirname(__FILE__) . '/../../');
require(PHPEXCEL_ROOT . 'PHPExcel/Autoloader.php');
}
/**
* PHPExcel_Calculation_LookupRef
*
* @category PHPExcel
* @package PHPExcel_Calculation
* @copyright Copyright (c) 2006 - 2014 PHPExcel (http://www.codeplex.com/PHPExcel)
*/
class PHPExcel_Calculation_LookupRef {
/** /**
* CELL_ADDRESS * CELL_ADDRESS
* *
@@ -67,7 +57,8 @@ class PHPExcel_Calculation_LookupRef {
* @param sheetText Optional Name of worksheet to use * @param sheetText Optional Name of worksheet to use
* @return string * @return string
*/ */
public static function CELL_ADDRESS($row, $column, $relativity=1, $referenceStyle=True, $sheetText='') { public static function CELL_ADDRESS($row, $column, $relativity = 1, $referenceStyle = true, $sheetText = '')
{
$row = PHPExcel_Calculation_Functions::flattenSingleValue($row); $row = PHPExcel_Calculation_Functions::flattenSingleValue($row);
$column = PHPExcel_Calculation_Functions::flattenSingleValue($column); $column = PHPExcel_Calculation_Functions::flattenSingleValue($column);
$relativity = PHPExcel_Calculation_Functions::flattenSingleValue($relativity); $relativity = PHPExcel_Calculation_Functions::flattenSingleValue($relativity);
@@ -78,21 +69,31 @@ class PHPExcel_Calculation_LookupRef {
} }
if ($sheetText > '') { if ($sheetText > '') {
if (strpos($sheetText,' ') !== False) { $sheetText = "'".$sheetText."'"; } if (strpos($sheetText, ' ') !== false) {
$sheetText = "'".$sheetText."'";
}
$sheetText .='!'; $sheetText .='!';
} }
if ((!is_bool($referenceStyle)) || $referenceStyle) { if ((!is_bool($referenceStyle)) || $referenceStyle) {
$rowRelative = $columnRelative = '$'; $rowRelative = $columnRelative = '$';
$column = PHPExcel_Cell::stringFromColumnIndex($column-1); $column = PHPExcel_Cell::stringFromColumnIndex($column-1);
if (($relativity == 2) || ($relativity == 4)) { $columnRelative = ''; } if (($relativity == 2) || ($relativity == 4)) {
if (($relativity == 3) || ($relativity == 4)) { $rowRelative = ''; } $columnRelative = '';
}
if (($relativity == 3) || ($relativity == 4)) {
$rowRelative = '';
}
return $sheetText.$columnRelative.$column.$rowRelative.$row; return $sheetText.$columnRelative.$column.$rowRelative.$row;
} else { } else {
if (($relativity == 2) || ($relativity == 4)) { $column = '['.$column.']'; } if (($relativity == 2) || ($relativity == 4)) {
if (($relativity == 3) || ($relativity == 4)) { $row = '['.$row.']'; } $column = '['.$column.']';
}
if (($relativity == 3) || ($relativity == 4)) {
$row = '['.$row.']';
}
return $sheetText.'R'.$row.'C'.$column; return $sheetText.'R'.$row.'C'.$column;
} }
} // function CELL_ADDRESS() }
/** /**
@@ -109,33 +110,36 @@ class PHPExcel_Calculation_LookupRef {
* @param cellAddress A reference to a range of cells for which you want the column numbers * @param cellAddress A reference to a range of cells for which you want the column numbers
* @return integer or array of integer * @return integer or array of integer
*/ */
public static function COLUMN($cellAddress=Null) { public static function COLUMN($cellAddress = null)
if (is_null($cellAddress) || trim($cellAddress) === '') { return 0; } {
if (is_null($cellAddress) || trim($cellAddress) === '') {
return 0;
}
if (is_array($cellAddress)) { if (is_array($cellAddress)) {
foreach($cellAddress as $columnKey => $value) { foreach ($cellAddress as $columnKey => $value) {
$columnKey = preg_replace('/[^a-z]/i','',$columnKey); $columnKey = preg_replace('/[^a-z]/i', '', $columnKey);
return (integer) PHPExcel_Cell::columnIndexFromString($columnKey); return (integer) PHPExcel_Cell::columnIndexFromString($columnKey);
} }
} else { } else {
if (strpos($cellAddress,'!') !== false) { if (strpos($cellAddress, '!') !== false) {
list($sheet,$cellAddress) = explode('!',$cellAddress); list($sheet, $cellAddress) = explode('!', $cellAddress);
} }
if (strpos($cellAddress,':') !== false) { if (strpos($cellAddress, ':') !== false) {
list($startAddress,$endAddress) = explode(':',$cellAddress); list($startAddress, $endAddress) = explode(':', $cellAddress);
$startAddress = preg_replace('/[^a-z]/i','',$startAddress); $startAddress = preg_replace('/[^a-z]/i', '', $startAddress);
$endAddress = preg_replace('/[^a-z]/i','',$endAddress); $endAddress = preg_replace('/[^a-z]/i', '', $endAddress);
$returnValue = array(); $returnValue = array();
do { do {
$returnValue[] = (integer) PHPExcel_Cell::columnIndexFromString($startAddress); $returnValue[] = (integer) PHPExcel_Cell::columnIndexFromString($startAddress);
} while ($startAddress++ != $endAddress); } while ($startAddress++ != $endAddress);
return $returnValue; return $returnValue;
} else { } else {
$cellAddress = preg_replace('/[^a-z]/i','',$cellAddress); $cellAddress = preg_replace('/[^a-z]/i', '', $cellAddress);
return (integer) PHPExcel_Cell::columnIndexFromString($cellAddress); return (integer) PHPExcel_Cell::columnIndexFromString($cellAddress);
} }
} }
} // function COLUMN() }
/** /**
@@ -149,24 +153,24 @@ class PHPExcel_Calculation_LookupRef {
* @param cellAddress An array or array formula, or a reference to a range of cells for which you want the number of columns * @param cellAddress An array or array formula, or a reference to a range of cells for which you want the number of columns
* @return integer The number of columns in cellAddress * @return integer The number of columns in cellAddress
*/ */
public static function COLUMNS($cellAddress=Null) { public static function COLUMNS($cellAddress = null)
{
if (is_null($cellAddress) || $cellAddress === '') { if (is_null($cellAddress) || $cellAddress === '') {
return 1; return 1;
} elseif (!is_array($cellAddress)) { } elseif (!is_array($cellAddress)) {
return PHPExcel_Calculation_Functions::VALUE(); return PHPExcel_Calculation_Functions::VALUE();
} }
$x = array_keys($cellAddress); reset($cellAddress);
$x = array_shift($x); $isMatrix = (is_numeric(key($cellAddress)));
$isMatrix = (is_numeric($x)); list($columns, $rows) = PHPExcel_Calculation::_getMatrixDimensions($cellAddress);
list($columns,$rows) = PHPExcel_Calculation::_getMatrixDimensions($cellAddress);
if ($isMatrix) { if ($isMatrix) {
return $rows; return $rows;
} else { } else {
return $columns; return $columns;
} }
} // function COLUMNS() }
/** /**
@@ -183,34 +187,37 @@ class PHPExcel_Calculation_LookupRef {
* @param cellAddress A reference to a range of cells for which you want the row numbers * @param cellAddress A reference to a range of cells for which you want the row numbers
* @return integer or array of integer * @return integer or array of integer
*/ */
public static function ROW($cellAddress=Null) { public static function ROW($cellAddress = null)
if (is_null($cellAddress) || trim($cellAddress) === '') { return 0; } {
if (is_null($cellAddress) || trim($cellAddress) === '') {
return 0;
}
if (is_array($cellAddress)) { if (is_array($cellAddress)) {
foreach($cellAddress as $columnKey => $rowValue) { foreach ($cellAddress as $columnKey => $rowValue) {
foreach($rowValue as $rowKey => $cellValue) { foreach ($rowValue as $rowKey => $cellValue) {
return (integer) preg_replace('/[^0-9]/i','',$rowKey); return (integer) preg_replace('/[^0-9]/i', '', $rowKey);
} }
} }
} else { } else {
if (strpos($cellAddress,'!') !== false) { if (strpos($cellAddress, '!') !== false) {
list($sheet,$cellAddress) = explode('!',$cellAddress); list($sheet, $cellAddress) = explode('!', $cellAddress);
} }
if (strpos($cellAddress,':') !== false) { if (strpos($cellAddress, ':') !== false) {
list($startAddress,$endAddress) = explode(':',$cellAddress); list($startAddress, $endAddress) = explode(':', $cellAddress);
$startAddress = preg_replace('/[^0-9]/','',$startAddress); $startAddress = preg_replace('/[^0-9]/', '', $startAddress);
$endAddress = preg_replace('/[^0-9]/','',$endAddress); $endAddress = preg_replace('/[^0-9]/', '', $endAddress);
$returnValue = array(); $returnValue = array();
do { do {
$returnValue[][] = (integer) $startAddress; $returnValue[][] = (integer) $startAddress;
} while ($startAddress++ != $endAddress); } while ($startAddress++ != $endAddress);
return $returnValue; return $returnValue;
} else { } else {
list($cellAddress) = explode(':',$cellAddress); list($cellAddress) = explode(':', $cellAddress);
return (integer) preg_replace('/[^0-9]/','',$cellAddress); return (integer) preg_replace('/[^0-9]/', '', $cellAddress);
}
} }
} }
} // function ROW()
/** /**
@@ -224,23 +231,24 @@ class PHPExcel_Calculation_LookupRef {
* @param cellAddress An array or array formula, or a reference to a range of cells for which you want the number of rows * @param cellAddress An array or array formula, or a reference to a range of cells for which you want the number of rows
* @return integer The number of rows in cellAddress * @return integer The number of rows in cellAddress
*/ */
public static function ROWS($cellAddress=Null) { public static function ROWS($cellAddress = null)
{
if (is_null($cellAddress) || $cellAddress === '') { if (is_null($cellAddress) || $cellAddress === '') {
return 1; return 1;
} elseif (!is_array($cellAddress)) { } elseif (!is_array($cellAddress)) {
return PHPExcel_Calculation_Functions::VALUE(); return PHPExcel_Calculation_Functions::VALUE();
} }
$i = array_keys($cellAddress); reset($cellAddress);
$isMatrix = (is_numeric(array_shift($i))); $isMatrix = (is_numeric(key($cellAddress)));
list($columns,$rows) = PHPExcel_Calculation::_getMatrixDimensions($cellAddress); list($columns, $rows) = PHPExcel_Calculation::_getMatrixDimensions($cellAddress);
if ($isMatrix) { if ($isMatrix) {
return $columns; return $columns;
} else { } else {
return $rows; return $rows;
} }
} // function ROWS() }
/** /**
@@ -256,7 +264,8 @@ class PHPExcel_Calculation_LookupRef {
* @param PHPExcel_Cell $pCell The cell to set the hyperlink in * @param PHPExcel_Cell $pCell The cell to set the hyperlink in
* @return mixed The value of $displayName (or $linkURL if $displayName was blank) * @return mixed The value of $displayName (or $linkURL if $displayName was blank)
*/ */
public static function HYPERLINK($linkURL = '', $displayName = null, PHPExcel_Cell $pCell = null) { public static function HYPERLINK($linkURL = '', $displayName = null, PHPExcel_Cell $pCell = null)
{
$args = func_get_args(); $args = func_get_args();
$pCell = array_pop($args); $pCell = array_pop($args);
@@ -274,7 +283,7 @@ class PHPExcel_Calculation_LookupRef {
$pCell->getHyperlink()->setUrl($linkURL); $pCell->getHyperlink()->setUrl($linkURL);
return $displayName; return $displayName;
} // function HYPERLINK() }
/** /**
@@ -295,16 +304,17 @@ class PHPExcel_Calculation_LookupRef {
* @todo Support for the optional a1 parameter introduced in Excel 2010 * @todo Support for the optional a1 parameter introduced in Excel 2010
* *
*/ */
public static function INDIRECT($cellAddress = NULL, PHPExcel_Cell $pCell = NULL) { public static function INDIRECT($cellAddress = null, PHPExcel_Cell $pCell = null)
{
$cellAddress = PHPExcel_Calculation_Functions::flattenSingleValue($cellAddress); $cellAddress = PHPExcel_Calculation_Functions::flattenSingleValue($cellAddress);
if (is_null($cellAddress) || $cellAddress === '') { if (is_null($cellAddress) || $cellAddress === '') {
return PHPExcel_Calculation_Functions::REF(); return PHPExcel_Calculation_Functions::REF();
} }
$cellAddress1 = $cellAddress; $cellAddress1 = $cellAddress;
$cellAddress2 = NULL; $cellAddress2 = null;
if (strpos($cellAddress,':') !== false) { if (strpos($cellAddress, ':') !== false) {
list($cellAddress1,$cellAddress2) = explode(':',$cellAddress); list($cellAddress1, $cellAddress2) = explode(':', $cellAddress);
} }
if ((!preg_match('/^'.PHPExcel_Calculation::CALCULATION_REGEXP_CELLREF.'$/i', $cellAddress1, $matches)) || if ((!preg_match('/^'.PHPExcel_Calculation::CALCULATION_REGEXP_CELLREF.'$/i', $cellAddress1, $matches)) ||
@@ -313,27 +323,27 @@ class PHPExcel_Calculation_LookupRef {
return PHPExcel_Calculation_Functions::REF(); return PHPExcel_Calculation_Functions::REF();
} }
if (strpos($cellAddress,'!') !== FALSE) { if (strpos($cellAddress, '!') !== false) {
list($sheetName, $cellAddress) = explode('!',$cellAddress); list($sheetName, $cellAddress) = explode('!', $cellAddress);
$sheetName = trim($sheetName, "'"); $sheetName = trim($sheetName, "'");
$pSheet = $pCell->getWorksheet()->getParent()->getSheetByName($sheetName); $pSheet = $pCell->getWorksheet()->getParent()->getSheetByName($sheetName);
} else { } else {
$pSheet = $pCell->getWorksheet(); $pSheet = $pCell->getWorksheet();
} }
return PHPExcel_Calculation::getInstance()->extractNamedRange($cellAddress, $pSheet, FALSE); return PHPExcel_Calculation::getInstance()->extractNamedRange($cellAddress, $pSheet, false);
} }
if (strpos($cellAddress,'!') !== FALSE) { if (strpos($cellAddress, '!') !== false) {
list($sheetName,$cellAddress) = explode('!',$cellAddress); list($sheetName, $cellAddress) = explode('!', $cellAddress);
$sheetName = trim($sheetName, "'"); $sheetName = trim($sheetName, "'");
$pSheet = $pCell->getWorksheet()->getParent()->getSheetByName($sheetName); $pSheet = $pCell->getWorksheet()->getParent()->getSheetByName($sheetName);
} else { } else {
$pSheet = $pCell->getWorksheet(); $pSheet = $pCell->getWorksheet();
} }
return PHPExcel_Calculation::getInstance()->extractCellRange($cellAddress, $pSheet, FALSE); return PHPExcel_Calculation::getInstance()->extractCellRange($cellAddress, $pSheet, false);
} // function INDIRECT() }
/** /**
@@ -361,12 +371,13 @@ class PHPExcel_Calculation_LookupRef {
* @param width The width, in number of columns, that you want the returned reference to be. Width must be a positive number. * @param width The width, in number of columns, that you want the returned reference to be. Width must be a positive number.
* @return string A reference to a cell or range of cells * @return string A reference to a cell or range of cells
*/ */
public static function OFFSET($cellAddress=Null,$rows=0,$columns=0,$height=null,$width=null) { public static function OFFSET($cellAddress = null, $rows = 0, $columns = 0, $height = null, $width = null)
{
$rows = PHPExcel_Calculation_Functions::flattenSingleValue($rows); $rows = PHPExcel_Calculation_Functions::flattenSingleValue($rows);
$columns = PHPExcel_Calculation_Functions::flattenSingleValue($columns); $columns = PHPExcel_Calculation_Functions::flattenSingleValue($columns);
$height = PHPExcel_Calculation_Functions::flattenSingleValue($height); $height = PHPExcel_Calculation_Functions::flattenSingleValue($height);
$width = PHPExcel_Calculation_Functions::flattenSingleValue($width); $width = PHPExcel_Calculation_Functions::flattenSingleValue($width);
if ($cellAddress == Null) { if ($cellAddress == null) {
return 0; return 0;
} }
@@ -376,18 +387,18 @@ class PHPExcel_Calculation_LookupRef {
return PHPExcel_Calculation_Functions::REF(); return PHPExcel_Calculation_Functions::REF();
} }
$sheetName = NULL; $sheetName = null;
if (strpos($cellAddress,"!")) { if (strpos($cellAddress, "!")) {
list($sheetName,$cellAddress) = explode("!",$cellAddress); list($sheetName, $cellAddress) = explode("!", $cellAddress);
$sheetName = trim($sheetName, "'"); $sheetName = trim($sheetName, "'");
} }
if (strpos($cellAddress,":")) { if (strpos($cellAddress, ":")) {
list($startCell,$endCell) = explode(":",$cellAddress); list($startCell, $endCell) = explode(":", $cellAddress);
} else { } else {
$startCell = $endCell = $cellAddress; $startCell = $endCell = $cellAddress;
} }
list($startCellColumn,$startCellRow) = PHPExcel_Cell::coordinateFromString($startCell); list($startCellColumn, $startCellRow) = PHPExcel_Cell::coordinateFromString($startCell);
list($endCellColumn,$endCellRow) = PHPExcel_Cell::coordinateFromString($endCell); list($endCellColumn, $endCellRow) = PHPExcel_Cell::coordinateFromString($endCell);
$startCellRow += $rows; $startCellRow += $rows;
$startCellColumn = PHPExcel_Cell::columnIndexFromString($startCellColumn) - 1; $startCellColumn = PHPExcel_Cell::columnIndexFromString($startCellColumn) - 1;
@@ -420,14 +431,14 @@ class PHPExcel_Calculation_LookupRef {
$cellAddress .= ':'.$endCellColumn.$endCellRow; $cellAddress .= ':'.$endCellColumn.$endCellRow;
} }
if ($sheetName !== NULL) { if ($sheetName !== null) {
$pSheet = $pCell->getWorksheet()->getParent()->getSheetByName($sheetName); $pSheet = $pCell->getWorksheet()->getParent()->getSheetByName($sheetName);
} else { } else {
$pSheet = $pCell->getWorksheet(); $pSheet = $pCell->getWorksheet();
} }
return PHPExcel_Calculation::getInstance()->extractCellRange($cellAddress, $pSheet, False); return PHPExcel_Calculation::getInstance()->extractCellRange($cellAddress, $pSheet, false);
} // function OFFSET() }
/** /**
@@ -448,12 +459,13 @@ class PHPExcel_Calculation_LookupRef {
* text. * text.
* @return mixed The selected value * @return mixed The selected value
*/ */
public static function CHOOSE() { public static function CHOOSE()
{
$chooseArgs = func_get_args(); $chooseArgs = func_get_args();
$chosenEntry = PHPExcel_Calculation_Functions::flattenArray(array_shift($chooseArgs)); $chosenEntry = PHPExcel_Calculation_Functions::flattenArray(array_shift($chooseArgs));
$entryCount = count($chooseArgs) - 1; $entryCount = count($chooseArgs) - 1;
if(is_array($chosenEntry)) { if (is_array($chosenEntry)) {
$chosenEntry = array_shift($chosenEntry); $chosenEntry = array_shift($chosenEntry);
} }
if ((is_numeric($chosenEntry)) && (!is_bool($chosenEntry))) { if ((is_numeric($chosenEntry)) && (!is_bool($chosenEntry))) {
@@ -471,7 +483,7 @@ class PHPExcel_Calculation_LookupRef {
} else { } else {
return $chooseArgs[$chosenEntry]; return $chooseArgs[$chosenEntry];
} }
} // function CHOOSE() }
/** /**
@@ -487,7 +499,8 @@ class PHPExcel_Calculation_LookupRef {
* @param match_type The number -1, 0, or 1. -1 means above, 0 means exact match, 1 means below. If match_type is 1 or -1, the list has to be ordered. * @param match_type The number -1, 0, or 1. -1 means above, 0 means exact match, 1 means below. If match_type is 1 or -1, the list has to be ordered.
* @return integer The relative position of the found item * @return integer The relative position of the found item
*/ */
public static function MATCH($lookup_value, $lookup_array, $match_type=1) { public static function MATCH($lookup_value, $lookup_array, $match_type = 1)
{
$lookup_array = PHPExcel_Calculation_Functions::flattenArray($lookup_array); $lookup_array = PHPExcel_Calculation_Functions::flattenArray($lookup_array);
$lookup_value = PHPExcel_Calculation_Functions::flattenSingleValue($lookup_value); $lookup_value = PHPExcel_Calculation_Functions::flattenSingleValue($lookup_value);
$match_type = (is_null($match_type)) ? 1 : (int) PHPExcel_Calculation_Functions::flattenSingleValue($match_type); $match_type = (is_null($match_type)) ? 1 : (int) PHPExcel_Calculation_Functions::flattenSingleValue($match_type);
@@ -511,7 +524,7 @@ class PHPExcel_Calculation_LookupRef {
} }
// lookup_array should contain only number, text, or logical values, or empty (null) cells // lookup_array should contain only number, text, or logical values, or empty (null) cells
foreach($lookup_array as $i => $lookupArrayValue) { foreach ($lookup_array as $i => $lookupArrayValue) {
// check the type of the value // check the type of the value
if ((!is_numeric($lookupArrayValue)) && (!is_string($lookupArrayValue)) && if ((!is_numeric($lookupArrayValue)) && (!is_string($lookupArrayValue)) &&
(!is_bool($lookupArrayValue)) && (!is_null($lookupArrayValue))) { (!is_bool($lookupArrayValue)) && (!is_null($lookupArrayValue))) {
@@ -522,7 +535,7 @@ class PHPExcel_Calculation_LookupRef {
$lookup_array[$i] = strtolower($lookupArrayValue); $lookup_array[$i] = strtolower($lookupArrayValue);
} }
if ((is_null($lookupArrayValue)) && (($match_type == 1) || ($match_type == -1))) { if ((is_null($lookupArrayValue)) && (($match_type == 1) || ($match_type == -1))) {
$lookup_array = array_slice($lookup_array,0,$i-1); $lookup_array = array_slice($lookup_array, 0, $i-1);
} }
} }
@@ -530,7 +543,7 @@ class PHPExcel_Calculation_LookupRef {
if ($match_type == 1) { if ($match_type == 1) {
asort($lookup_array); asort($lookup_array);
$keySet = array_keys($lookup_array); $keySet = array_keys($lookup_array);
} elseif($match_type == -1) { } elseif ($match_type == -1) {
arsort($lookup_array); arsort($lookup_array);
$keySet = array_keys($lookup_array); $keySet = array_keys($lookup_array);
} }
@@ -538,42 +551,25 @@ class PHPExcel_Calculation_LookupRef {
// ** // **
// find the match // find the match
// ** // **
// loop on the cells foreach ($lookup_array as $i => $lookupArrayValue) {
// var_dump($lookup_array);
// echo '<br />';
foreach($lookup_array as $i => $lookupArrayValue) {
if (($match_type == 0) && ($lookupArrayValue == $lookup_value)) { if (($match_type == 0) && ($lookupArrayValue == $lookup_value)) {
// exact match // exact match
return ++$i; return ++$i;
} elseif (($match_type == -1) && ($lookupArrayValue <= $lookup_value)) { } elseif (($match_type == -1) && ($lookupArrayValue <= $lookup_value)) {
// echo '$i = '.$i.' => '; $i = array_search($i, $keySet);
// var_dump($lookupArrayValue);
// echo '<br />';
// echo 'Keyset = ';
// var_dump($keySet);
// echo '<br />';
$i = array_search($i,$keySet);
// echo '$i='.$i.'<br />';
// if match_type is -1 <=> find the smallest value that is greater than or equal to lookup_value // if match_type is -1 <=> find the smallest value that is greater than or equal to lookup_value
if ($i < 1){ if ($i < 1) {
// 1st cell was allready smaller than the lookup_value // 1st cell was already smaller than the lookup_value
break; break;
} else { } else {
// the previous cell was the match // the previous cell was the match
return $keySet[$i-1]+1; return $keySet[$i-1]+1;
} }
} elseif (($match_type == 1) && ($lookupArrayValue >= $lookup_value)) { } elseif (($match_type == 1) && ($lookupArrayValue >= $lookup_value)) {
// echo '$i = '.$i.' => '; $i = array_search($i, $keySet);
// var_dump($lookupArrayValue);
// echo '<br />';
// echo 'Keyset = ';
// var_dump($keySet);
// echo '<br />';
$i = array_search($i,$keySet);
// echo '$i='.$i.'<br />';
// if match_type is 1 <=> find the largest value that is less than or equal to lookup_value // if match_type is 1 <=> find the largest value that is less than or equal to lookup_value
if ($i < 1){ if ($i < 1) {
// 1st cell was allready bigger than the lookup_value // 1st cell was already bigger than the lookup_value
break; break;
} else { } else {
// the previous cell was the match // the previous cell was the match
@@ -584,7 +580,7 @@ class PHPExcel_Calculation_LookupRef {
// unsuccessful in finding a match, return #N/A error value // unsuccessful in finding a match, return #N/A error value
return PHPExcel_Calculation_Functions::NA(); return PHPExcel_Calculation_Functions::NA();
} // function MATCH() }
/** /**
@@ -600,8 +596,8 @@ class PHPExcel_Calculation_LookupRef {
* @param column_num The column in array from which to return a value. If column_num is omitted, row_num is required. * @param column_num The column in array from which to return a value. If column_num is omitted, row_num is required.
* @return mixed the value of a specified cell or array of cells * @return mixed the value of a specified cell or array of cells
*/ */
public static function INDEX($arrayValues,$rowNum = 0,$columnNum = 0) { public static function INDEX($arrayValues, $rowNum = 0, $columnNum = 0)
{
if (($rowNum < 0) || ($columnNum < 0)) { if (($rowNum < 0) || ($columnNum < 0)) {
return PHPExcel_Calculation_Functions::VALUE(); return PHPExcel_Calculation_Functions::VALUE();
} }
@@ -621,7 +617,7 @@ class PHPExcel_Calculation_LookupRef {
} }
$rowNum = $rowKeys[--$rowNum]; $rowNum = $rowKeys[--$rowNum];
$returnArray = array(); $returnArray = array();
foreach($arrayValues as $arrayColumn) { foreach ($arrayValues as $arrayColumn) {
if (is_array($arrayColumn)) { if (is_array($arrayColumn)) {
if (isset($arrayColumn[$rowNum])) { if (isset($arrayColumn[$rowNum])) {
$returnArray[] = $arrayColumn[$rowNum]; $returnArray[] = $arrayColumn[$rowNum];
@@ -643,7 +639,7 @@ class PHPExcel_Calculation_LookupRef {
$rowNum = $rowKeys[--$rowNum]; $rowNum = $rowKeys[--$rowNum];
return $arrayValues[$rowNum][$columnNum]; return $arrayValues[$rowNum][$columnNum];
} // function INDEX() }
/** /**
@@ -654,31 +650,35 @@ class PHPExcel_Calculation_LookupRef {
* *
* Unlike the Excel TRANSPOSE function, which will only work on a single row or column, this function will transpose a full matrix. * Unlike the Excel TRANSPOSE function, which will only work on a single row or column, this function will transpose a full matrix.
*/ */
public static function TRANSPOSE($matrixData) { public static function TRANSPOSE($matrixData)
{
$returnMatrix = array(); $returnMatrix = array();
if (!is_array($matrixData)) { $matrixData = array(array($matrixData)); } if (!is_array($matrixData)) {
$matrixData = array(array($matrixData));
}
$column = 0; $column = 0;
foreach($matrixData as $matrixRow) { foreach ($matrixData as $matrixRow) {
$row = 0; $row = 0;
foreach($matrixRow as $matrixCell) { foreach ($matrixRow as $matrixCell) {
$returnMatrix[$row][$column] = $matrixCell; $returnMatrix[$row][$column] = $matrixCell;
++$row; ++$row;
} }
++$column; ++$column;
} }
return $returnMatrix; return $returnMatrix;
} // function TRANSPOSE() }
private static function _vlookupSort($a,$b) { private static function vlookupSort($a, $b)
$f = array_keys($a); {
$firstColumn = array_shift($f); reset($a);
if (strtolower($a[$firstColumn]) == strtolower($b[$firstColumn])) { $firstColumn = key($a);
if (($aLower = strtolower($a[$firstColumn])) == ($bLower = strtolower($b[$firstColumn]))) {
return 0; return 0;
} }
return (strtolower($a[$firstColumn]) < strtolower($b[$firstColumn])) ? -1 : 1; return ($aLower < $bLower) ? -1 : 1;
} // function _vlookupSort() }
/** /**
@@ -690,7 +690,8 @@ class PHPExcel_Calculation_LookupRef {
* @param not_exact_match Determines if you are looking for an exact match based on lookup_value. * @param not_exact_match Determines if you are looking for an exact match based on lookup_value.
* @return mixed The value of the found cell * @return mixed The value of the found cell
*/ */
public static function VLOOKUP($lookup_value, $lookup_array, $index_number, $not_exact_match=true) { public static function VLOOKUP($lookup_value, $lookup_array, $index_number, $not_exact_match = true)
{
$lookup_value = PHPExcel_Calculation_Functions::flattenSingleValue($lookup_value); $lookup_value = PHPExcel_Calculation_Functions::flattenSingleValue($lookup_value);
$index_number = PHPExcel_Calculation_Functions::flattenSingleValue($index_number); $index_number = PHPExcel_Calculation_Functions::flattenSingleValue($index_number);
$not_exact_match = PHPExcel_Calculation_Functions::flattenSingleValue($not_exact_match); $not_exact_match = PHPExcel_Calculation_Functions::flattenSingleValue($not_exact_match);
@@ -716,11 +717,11 @@ class PHPExcel_Calculation_LookupRef {
} }
if (!$not_exact_match) { if (!$not_exact_match) {
uasort($lookup_array,array('self','_vlookupSort')); uasort($lookup_array, array('self', 'vlookupSort'));
} }
$rowNumber = $rowValue = False; $rowNumber = $rowValue = false;
foreach($lookup_array as $rowKey => $rowData) { foreach ($lookup_array as $rowKey => $rowData) {
if ((is_numeric($lookup_value) && is_numeric($rowData[$firstColumn]) && ($rowData[$firstColumn] > $lookup_value)) || if ((is_numeric($lookup_value) && is_numeric($rowData[$firstColumn]) && ($rowData[$firstColumn] > $lookup_value)) ||
(!is_numeric($lookup_value) && !is_numeric($rowData[$firstColumn]) && (strtolower($rowData[$firstColumn]) > strtolower($lookup_value)))) { (!is_numeric($lookup_value) && !is_numeric($rowData[$firstColumn]) && (strtolower($rowData[$firstColumn]) > strtolower($lookup_value)))) {
break; break;
@@ -735,19 +736,15 @@ class PHPExcel_Calculation_LookupRef {
return PHPExcel_Calculation_Functions::NA(); return PHPExcel_Calculation_Functions::NA();
} else { } else {
// otherwise return the appropriate value // otherwise return the appropriate value
$result = $lookup_array[$rowNumber][$returnColumn]; return $lookup_array[$rowNumber][$returnColumn];
if ((is_numeric($lookup_value) && is_numeric($result)) ||
(!is_numeric($lookup_value) && !is_numeric($result))) {
return $result;
}
} }
} }
return PHPExcel_Calculation_Functions::NA(); return PHPExcel_Calculation_Functions::NA();
} // function VLOOKUP() }
/** /**
* HLOOKUP * HLOOKUP
* The HLOOKUP function searches for value in the top-most row of lookup_array and returns the value in the same column based on the index_number. * The HLOOKUP function searches for value in the top-most row of lookup_array and returns the value in the same column based on the index_number.
* @param lookup_value The value that you want to match in lookup_array * @param lookup_value The value that you want to match in lookup_array
@@ -756,7 +753,8 @@ class PHPExcel_Calculation_LookupRef {
* @param not_exact_match Determines if you are looking for an exact match based on lookup_value. * @param not_exact_match Determines if you are looking for an exact match based on lookup_value.
* @return mixed The value of the found cell * @return mixed The value of the found cell
*/ */
public static function HLOOKUP($lookup_value, $lookup_array, $index_number, $not_exact_match=true) { public static function HLOOKUP($lookup_value, $lookup_array, $index_number, $not_exact_match = true)
{
$lookup_value = PHPExcel_Calculation_Functions::flattenSingleValue($lookup_value); $lookup_value = PHPExcel_Calculation_Functions::flattenSingleValue($lookup_value);
$index_number = PHPExcel_Calculation_Functions::flattenSingleValue($index_number); $index_number = PHPExcel_Calculation_Functions::flattenSingleValue($index_number);
$not_exact_match = PHPExcel_Calculation_Functions::flattenSingleValue($not_exact_match); $not_exact_match = PHPExcel_Calculation_Functions::flattenSingleValue($not_exact_match);
@@ -786,8 +784,8 @@ class PHPExcel_Calculation_LookupRef {
$firstRowH = asort($lookup_array[$firstColumn]); $firstRowH = asort($lookup_array[$firstColumn]);
} }
$rowNumber = $rowValue = False; $rowNumber = $rowValue = false;
foreach($lookup_array[$firstColumn] as $rowKey => $rowData) { foreach ($lookup_array[$firstColumn] as $rowKey => $rowData) {
if ((is_numeric($lookup_value) && is_numeric($rowData) && ($rowData > $lookup_value)) || if ((is_numeric($lookup_value) && is_numeric($rowData) && ($rowData > $lookup_value)) ||
(!is_numeric($lookup_value) && !is_numeric($rowData) && (strtolower($rowData) > strtolower($lookup_value)))) { (!is_numeric($lookup_value) && !is_numeric($rowData) && (strtolower($rowData) > strtolower($lookup_value)))) {
break; break;
@@ -802,13 +800,12 @@ class PHPExcel_Calculation_LookupRef {
return PHPExcel_Calculation_Functions::NA(); return PHPExcel_Calculation_Functions::NA();
} else { } else {
// otherwise return the appropriate value // otherwise return the appropriate value
$result = $lookup_array[$returnColumn][$rowNumber]; return $lookup_array[$returnColumn][$rowNumber];
return $result;
} }
} }
return PHPExcel_Calculation_Functions::NA(); return PHPExcel_Calculation_Functions::NA();
} // function HLOOKUP() }
/** /**
@@ -819,7 +816,8 @@ class PHPExcel_Calculation_LookupRef {
* @param result_vector The column from which the matching value must be returned * @param result_vector The column from which the matching value must be returned
* @return mixed The value of the found cell * @return mixed The value of the found cell
*/ */
public static function LOOKUP($lookup_value, $lookup_vector, $result_vector=null) { public static function LOOKUP($lookup_value, $lookup_vector, $result_vector = null)
{
$lookup_value = PHPExcel_Calculation_Functions::flattenSingleValue($lookup_value); $lookup_value = PHPExcel_Calculation_Functions::flattenSingleValue($lookup_value);
if (!is_array($lookup_vector)) { if (!is_array($lookup_vector)) {
@@ -855,7 +853,7 @@ class PHPExcel_Calculation_LookupRef {
$lookup_vector = array_shift($lookup_vector); $lookup_vector = array_shift($lookup_vector);
} }
if ($lookupColumns != 2) { if ($lookupColumns != 2) {
foreach($lookup_vector as &$value) { foreach ($lookup_vector as &$value) {
if (is_array($value)) { if (is_array($value)) {
$k = array_keys($value); $k = array_keys($value);
$key1 = $key2 = array_shift($k); $key1 = $key2 = array_shift($k);
@@ -875,7 +873,6 @@ class PHPExcel_Calculation_LookupRef {
unset($value); unset($value);
} }
return self::VLOOKUP($lookup_value,$lookup_vector,2); return self::VLOOKUP($lookup_value, $lookup_vector, 2);
} // function LOOKUP() }
}
} // class PHPExcel_Calculation_LookupRef

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@@ -1,8 +1,18 @@
<?php <?php
/** PHPExcel root directory */
if (!defined('PHPEXCEL_ROOT')) {
/**
* @ignore
*/
define('PHPEXCEL_ROOT', dirname(__FILE__) . '/../../');
require(PHPEXCEL_ROOT . 'PHPExcel/Autoloader.php');
}
/** /**
* PHPExcel * PHPExcel_Calculation_TextData
* *
* Copyright (c) 2006 - 2014 PHPExcel * Copyright (c) 2006 - 2015 PHPExcel
* *
* This library is free software; you can redistribute it and/or * This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public * modify it under the terms of the GNU Lesser General Public
@@ -20,50 +30,34 @@
* *
* @category PHPExcel * @category PHPExcel
* @package PHPExcel_Calculation * @package PHPExcel_Calculation
* @copyright Copyright (c) 2006 - 2014 PHPExcel (http://www.codeplex.com/PHPExcel) * @copyright Copyright (c) 2006 - 2015 PHPExcel (http://www.codeplex.com/PHPExcel)
* @license http://www.gnu.org/licenses/old-licenses/lgpl-2.1.txt LGPL * @license http://www.gnu.org/licenses/old-licenses/lgpl-2.1.txt LGPL
* @version 1.8.0, 2014-03-02 * @version ##VERSION##, ##DATE##
*/ */
class PHPExcel_Calculation_TextData
{
private static $invalidChars;
private static function unicodeToOrd($c)
/** PHPExcel root directory */ {
if (!defined('PHPEXCEL_ROOT')) { if (ord($c{0}) >=0 && ord($c{0}) <= 127) {
/**
* @ignore
*/
define('PHPEXCEL_ROOT', dirname(__FILE__) . '/../../');
require(PHPEXCEL_ROOT . 'PHPExcel/Autoloader.php');
}
/**
* PHPExcel_Calculation_TextData
*
* @category PHPExcel
* @package PHPExcel_Calculation
* @copyright Copyright (c) 2006 - 2014 PHPExcel (http://www.codeplex.com/PHPExcel)
*/
class PHPExcel_Calculation_TextData {
private static $_invalidChars = Null;
private static function _uniord($c) {
if (ord($c{0}) >=0 && ord($c{0}) <= 127)
return ord($c{0}); return ord($c{0});
if (ord($c{0}) >= 192 && ord($c{0}) <= 223) } elseif (ord($c{0}) >= 192 && ord($c{0}) <= 223) {
return (ord($c{0})-192)*64 + (ord($c{1})-128); return (ord($c{0})-192)*64 + (ord($c{1})-128);
if (ord($c{0}) >= 224 && ord($c{0}) <= 239) } elseif (ord($c{0}) >= 224 && ord($c{0}) <= 239) {
return (ord($c{0})-224)*4096 + (ord($c{1})-128)*64 + (ord($c{2})-128); return (ord($c{0})-224)*4096 + (ord($c{1})-128)*64 + (ord($c{2})-128);
if (ord($c{0}) >= 240 && ord($c{0}) <= 247) } elseif (ord($c{0}) >= 240 && ord($c{0}) <= 247) {
return (ord($c{0})-240)*262144 + (ord($c{1})-128)*4096 + (ord($c{2})-128)*64 + (ord($c{3})-128); return (ord($c{0})-240)*262144 + (ord($c{1})-128)*4096 + (ord($c{2})-128)*64 + (ord($c{3})-128);
if (ord($c{0}) >= 248 && ord($c{0}) <= 251) } elseif (ord($c{0}) >= 248 && ord($c{0}) <= 251) {
return (ord($c{0})-248)*16777216 + (ord($c{1})-128)*262144 + (ord($c{2})-128)*4096 + (ord($c{3})-128)*64 + (ord($c{4})-128); return (ord($c{0})-248)*16777216 + (ord($c{1})-128)*262144 + (ord($c{2})-128)*4096 + (ord($c{3})-128)*64 + (ord($c{4})-128);
if (ord($c{0}) >= 252 && ord($c{0}) <= 253) } elseif (ord($c{0}) >= 252 && ord($c{0}) <= 253) {
return (ord($c{0})-252)*1073741824 + (ord($c{1})-128)*16777216 + (ord($c{2})-128)*262144 + (ord($c{3})-128)*4096 + (ord($c{4})-128)*64 + (ord($c{5})-128); return (ord($c{0})-252)*1073741824 + (ord($c{1})-128)*16777216 + (ord($c{2})-128)*262144 + (ord($c{3})-128)*4096 + (ord($c{4})-128)*64 + (ord($c{5})-128);
if (ord($c{0}) >= 254 && ord($c{0}) <= 255) //error } elseif (ord($c{0}) >= 254 && ord($c{0}) <= 255) {
// error
return PHPExcel_Calculation_Functions::VALUE(); return PHPExcel_Calculation_Functions::VALUE();
}
return 0; return 0;
} // function _uniord() }
/** /**
* CHARACTER * CHARACTER
@@ -71,7 +65,8 @@ class PHPExcel_Calculation_TextData {
* @param string $character Value * @param string $character Value
* @return int * @return int
*/ */
public static function CHARACTER($character) { public static function CHARACTER($character)
{
$character = PHPExcel_Calculation_Functions::flattenSingleValue($character); $character = PHPExcel_Calculation_Functions::flattenSingleValue($character);
if ((!is_numeric($character)) || ($character < 0)) { if ((!is_numeric($character)) || ($character < 0)) {
@@ -92,22 +87,23 @@ class PHPExcel_Calculation_TextData {
* @param mixed $stringValue Value to check * @param mixed $stringValue Value to check
* @return string * @return string
*/ */
public static function TRIMNONPRINTABLE($stringValue = '') { public static function TRIMNONPRINTABLE($stringValue = '')
{
$stringValue = PHPExcel_Calculation_Functions::flattenSingleValue($stringValue); $stringValue = PHPExcel_Calculation_Functions::flattenSingleValue($stringValue);
if (is_bool($stringValue)) { if (is_bool($stringValue)) {
return ($stringValue) ? PHPExcel_Calculation::getTRUE() : PHPExcel_Calculation::getFALSE(); return ($stringValue) ? PHPExcel_Calculation::getTRUE() : PHPExcel_Calculation::getFALSE();
} }
if (self::$_invalidChars == Null) { if (self::$invalidChars == null) {
self::$_invalidChars = range(chr(0),chr(31)); self::$invalidChars = range(chr(0), chr(31));
} }
if (is_string($stringValue) || is_numeric($stringValue)) { if (is_string($stringValue) || is_numeric($stringValue)) {
return str_replace(self::$_invalidChars,'',trim($stringValue,"\x00..\x1F")); return str_replace(self::$invalidChars, '', trim($stringValue, "\x00..\x1F"));
}
return null;
} }
return NULL;
} // function TRIMNONPRINTABLE()
/** /**
@@ -116,18 +112,18 @@ class PHPExcel_Calculation_TextData {
* @param mixed $stringValue Value to check * @param mixed $stringValue Value to check
* @return string * @return string
*/ */
public static function TRIMSPACES($stringValue = '') { public static function TRIMSPACES($stringValue = '')
{
$stringValue = PHPExcel_Calculation_Functions::flattenSingleValue($stringValue); $stringValue = PHPExcel_Calculation_Functions::flattenSingleValue($stringValue);
if (is_bool($stringValue)) { if (is_bool($stringValue)) {
return ($stringValue) ? PHPExcel_Calculation::getTRUE() : PHPExcel_Calculation::getFALSE(); return ($stringValue) ? PHPExcel_Calculation::getTRUE() : PHPExcel_Calculation::getFALSE();
} }
if (is_string($stringValue) || is_numeric($stringValue)) { if (is_string($stringValue) || is_numeric($stringValue)) {
return trim(preg_replace('/ +/',' ',trim($stringValue,' '))); return trim(preg_replace('/ +/', ' ', trim($stringValue, ' ')), ' ');
}
return null;
} }
return NULL;
} // function TRIMSPACES()
/** /**
@@ -136,9 +132,11 @@ class PHPExcel_Calculation_TextData {
* @param string $characters Value * @param string $characters Value
* @return int * @return int
*/ */
public static function ASCIICODE($characters) { public static function ASCIICODE($characters)
if (($characters === NULL) || ($characters === '')) {
if (($characters === null) || ($characters === '')) {
return PHPExcel_Calculation_Functions::VALUE(); return PHPExcel_Calculation_Functions::VALUE();
}
$characters = PHPExcel_Calculation_Functions::flattenSingleValue($characters); $characters = PHPExcel_Calculation_Functions::flattenSingleValue($characters);
if (is_bool($characters)) { if (is_bool($characters)) {
if (PHPExcel_Calculation_Functions::getCompatibilityMode() == PHPExcel_Calculation_Functions::COMPATIBILITY_OPENOFFICE) { if (PHPExcel_Calculation_Functions::getCompatibilityMode() == PHPExcel_Calculation_Functions::COMPATIBILITY_OPENOFFICE) {
@@ -150,13 +148,17 @@ class PHPExcel_Calculation_TextData {
$character = $characters; $character = $characters;
if ((function_exists('mb_strlen')) && (function_exists('mb_substr'))) { if ((function_exists('mb_strlen')) && (function_exists('mb_substr'))) {
if (mb_strlen($characters, 'UTF-8') > 1) { $character = mb_substr($characters, 0, 1, 'UTF-8'); } if (mb_strlen($characters, 'UTF-8') > 1) {
return self::_uniord($character); $character = mb_substr($characters, 0, 1, 'UTF-8');
}
return self::unicodeToOrd($character);
} else { } else {
if (strlen($characters) > 0) { $character = substr($characters, 0, 1); } if (strlen($characters) > 0) {
$character = substr($characters, 0, 1);
}
return ord($character); return ord($character);
} }
} // function ASCIICODE() }
/** /**
@@ -164,8 +166,8 @@ class PHPExcel_Calculation_TextData {
* *
* @return string * @return string
*/ */
public static function CONCATENATE() { public static function CONCATENATE()
// Return value {
$returnValue = ''; $returnValue = '';
// Loop through arguments // Loop through arguments
@@ -181,9 +183,8 @@ class PHPExcel_Calculation_TextData {
$returnValue .= $arg; $returnValue .= $arg;
} }
// Return
return $returnValue; return $returnValue;
} // function CONCATENATE() }
/** /**
@@ -198,7 +199,8 @@ class PHPExcel_Calculation_TextData {
* If you omit decimals, it is assumed to be 2 * If you omit decimals, it is assumed to be 2
* @return string * @return string
*/ */
public static function DOLLAR($value = 0, $decimals = 2) { public static function DOLLAR($value = 0, $decimals = 2)
{
$value = PHPExcel_Calculation_Functions::flattenSingleValue($value); $value = PHPExcel_Calculation_Functions::flattenSingleValue($value);
$decimals = is_null($decimals) ? 0 : PHPExcel_Calculation_Functions::flattenSingleValue($decimals); $decimals = is_null($decimals) ? 0 : PHPExcel_Calculation_Functions::flattenSingleValue($decimals);
@@ -210,16 +212,18 @@ class PHPExcel_Calculation_TextData {
$mask = '$#,##0'; $mask = '$#,##0';
if ($decimals > 0) { if ($decimals > 0) {
$mask .= '.' . str_repeat('0',$decimals); $mask .= '.' . str_repeat('0', $decimals);
} else { } else {
$round = pow(10,abs($decimals)); $round = pow(10, abs($decimals));
if ($value < 0) { $round = 0-$round; } if ($value < 0) {
$round = 0-$round;
}
$value = PHPExcel_Calculation_MathTrig::MROUND($value, $round); $value = PHPExcel_Calculation_MathTrig::MROUND($value, $round);
} }
return PHPExcel_Style_NumberFormat::toFormattedString($value, $mask); return PHPExcel_Style_NumberFormat::toFormattedString($value, $mask);
} // function DOLLAR() }
/** /**
@@ -230,7 +234,8 @@ class PHPExcel_Calculation_TextData {
* @param int $offset Offset within $haystack * @param int $offset Offset within $haystack
* @return string * @return string
*/ */
public static function SEARCHSENSITIVE($needle,$haystack,$offset=1) { public static function SEARCHSENSITIVE($needle, $haystack, $offset = 1)
{
$needle = PHPExcel_Calculation_Functions::flattenSingleValue($needle); $needle = PHPExcel_Calculation_Functions::flattenSingleValue($needle);
$haystack = PHPExcel_Calculation_Functions::flattenSingleValue($haystack); $haystack = PHPExcel_Calculation_Functions::flattenSingleValue($haystack);
$offset = PHPExcel_Calculation_Functions::flattenSingleValue($offset); $offset = PHPExcel_Calculation_Functions::flattenSingleValue($offset);
@@ -255,7 +260,7 @@ class PHPExcel_Calculation_TextData {
} }
} }
return PHPExcel_Calculation_Functions::VALUE(); return PHPExcel_Calculation_Functions::VALUE();
} // function SEARCHSENSITIVE() }
/** /**
@@ -266,7 +271,8 @@ class PHPExcel_Calculation_TextData {
* @param int $offset Offset within $haystack * @param int $offset Offset within $haystack
* @return string * @return string
*/ */
public static function SEARCHINSENSITIVE($needle,$haystack,$offset=1) { public static function SEARCHINSENSITIVE($needle, $haystack, $offset = 1)
{
$needle = PHPExcel_Calculation_Functions::flattenSingleValue($needle); $needle = PHPExcel_Calculation_Functions::flattenSingleValue($needle);
$haystack = PHPExcel_Calculation_Functions::flattenSingleValue($haystack); $haystack = PHPExcel_Calculation_Functions::flattenSingleValue($haystack);
$offset = PHPExcel_Calculation_Functions::flattenSingleValue($offset); $offset = PHPExcel_Calculation_Functions::flattenSingleValue($offset);
@@ -281,7 +287,7 @@ class PHPExcel_Calculation_TextData {
return $offset; return $offset;
} }
if (function_exists('mb_stripos')) { if (function_exists('mb_stripos')) {
$pos = mb_stripos($haystack, $needle, --$offset,'UTF-8'); $pos = mb_stripos($haystack, $needle, --$offset, 'UTF-8');
} else { } else {
$pos = stripos($haystack, $needle, --$offset); $pos = stripos($haystack, $needle, --$offset);
} }
@@ -291,7 +297,7 @@ class PHPExcel_Calculation_TextData {
} }
} }
return PHPExcel_Calculation_Functions::VALUE(); return PHPExcel_Calculation_Functions::VALUE();
} // function SEARCHINSENSITIVE() }
/** /**
@@ -302,7 +308,8 @@ class PHPExcel_Calculation_TextData {
* @param boolean $no_commas * @param boolean $no_commas
* @return boolean * @return boolean
*/ */
public static function FIXEDFORMAT($value, $decimals = 2, $no_commas = FALSE) { public static function FIXEDFORMAT($value, $decimals = 2, $no_commas = false)
{
$value = PHPExcel_Calculation_Functions::flattenSingleValue($value); $value = PHPExcel_Calculation_Functions::flattenSingleValue($value);
$decimals = PHPExcel_Calculation_Functions::flattenSingleValue($decimals); $decimals = PHPExcel_Calculation_Functions::flattenSingleValue($decimals);
$no_commas = PHPExcel_Calculation_Functions::flattenSingleValue($no_commas); $no_commas = PHPExcel_Calculation_Functions::flattenSingleValue($no_commas);
@@ -313,14 +320,16 @@ class PHPExcel_Calculation_TextData {
} }
$decimals = floor($decimals); $decimals = floor($decimals);
$valueResult = round($value,$decimals); $valueResult = round($value, $decimals);
if ($decimals < 0) { $decimals = 0; } if ($decimals < 0) {
$decimals = 0;
}
if (!$no_commas) { if (!$no_commas) {
$valueResult = number_format($valueResult,$decimals); $valueResult = number_format($valueResult, $decimals);
} }
return (string) $valueResult; return (string) $valueResult;
} // function FIXEDFORMAT() }
/** /**
@@ -330,7 +339,8 @@ class PHPExcel_Calculation_TextData {
* @param int $chars Number of characters * @param int $chars Number of characters
* @return string * @return string
*/ */
public static function LEFT($value = '', $chars = 1) { public static function LEFT($value = '', $chars = 1)
{
$value = PHPExcel_Calculation_Functions::flattenSingleValue($value); $value = PHPExcel_Calculation_Functions::flattenSingleValue($value);
$chars = PHPExcel_Calculation_Functions::flattenSingleValue($chars); $chars = PHPExcel_Calculation_Functions::flattenSingleValue($chars);
@@ -347,7 +357,7 @@ class PHPExcel_Calculation_TextData {
} else { } else {
return substr($value, 0, $chars); return substr($value, 0, $chars);
} }
} // function LEFT() }
/** /**
@@ -358,7 +368,8 @@ class PHPExcel_Calculation_TextData {
* @param int $chars Number of characters * @param int $chars Number of characters
* @return string * @return string
*/ */
public static function MID($value = '', $start = 1, $chars = null) { public static function MID($value = '', $start = 1, $chars = null)
{
$value = PHPExcel_Calculation_Functions::flattenSingleValue($value); $value = PHPExcel_Calculation_Functions::flattenSingleValue($value);
$start = PHPExcel_Calculation_Functions::flattenSingleValue($start); $start = PHPExcel_Calculation_Functions::flattenSingleValue($start);
$chars = PHPExcel_Calculation_Functions::flattenSingleValue($chars); $chars = PHPExcel_Calculation_Functions::flattenSingleValue($chars);
@@ -376,7 +387,7 @@ class PHPExcel_Calculation_TextData {
} else { } else {
return substr($value, --$start, $chars); return substr($value, --$start, $chars);
} }
} // function MID() }
/** /**
@@ -386,7 +397,8 @@ class PHPExcel_Calculation_TextData {
* @param int $chars Number of characters * @param int $chars Number of characters
* @return string * @return string
*/ */
public static function RIGHT($value = '', $chars = 1) { public static function RIGHT($value = '', $chars = 1)
{
$value = PHPExcel_Calculation_Functions::flattenSingleValue($value); $value = PHPExcel_Calculation_Functions::flattenSingleValue($value);
$chars = PHPExcel_Calculation_Functions::flattenSingleValue($chars); $chars = PHPExcel_Calculation_Functions::flattenSingleValue($chars);
@@ -403,7 +415,7 @@ class PHPExcel_Calculation_TextData {
} else { } else {
return substr($value, strlen($value) - $chars); return substr($value, strlen($value) - $chars);
} }
} // function RIGHT() }
/** /**
@@ -412,7 +424,8 @@ class PHPExcel_Calculation_TextData {
* @param string $value Value * @param string $value Value
* @return string * @return string
*/ */
public static function STRINGLENGTH($value = '') { public static function STRINGLENGTH($value = '')
{
$value = PHPExcel_Calculation_Functions::flattenSingleValue($value); $value = PHPExcel_Calculation_Functions::flattenSingleValue($value);
if (is_bool($value)) { if (is_bool($value)) {
@@ -424,7 +437,7 @@ class PHPExcel_Calculation_TextData {
} else { } else {
return strlen($value); return strlen($value);
} }
} // function STRINGLENGTH() }
/** /**
@@ -435,7 +448,8 @@ class PHPExcel_Calculation_TextData {
* @param string $mixedCaseString * @param string $mixedCaseString
* @return string * @return string
*/ */
public static function LOWERCASE($mixedCaseString) { public static function LOWERCASE($mixedCaseString)
{
$mixedCaseString = PHPExcel_Calculation_Functions::flattenSingleValue($mixedCaseString); $mixedCaseString = PHPExcel_Calculation_Functions::flattenSingleValue($mixedCaseString);
if (is_bool($mixedCaseString)) { if (is_bool($mixedCaseString)) {
@@ -443,7 +457,7 @@ class PHPExcel_Calculation_TextData {
} }
return PHPExcel_Shared_String::StrToLower($mixedCaseString); return PHPExcel_Shared_String::StrToLower($mixedCaseString);
} // function LOWERCASE() }
/** /**
@@ -454,7 +468,8 @@ class PHPExcel_Calculation_TextData {
* @param string $mixedCaseString * @param string $mixedCaseString
* @return string * @return string
*/ */
public static function UPPERCASE($mixedCaseString) { public static function UPPERCASE($mixedCaseString)
{
$mixedCaseString = PHPExcel_Calculation_Functions::flattenSingleValue($mixedCaseString); $mixedCaseString = PHPExcel_Calculation_Functions::flattenSingleValue($mixedCaseString);
if (is_bool($mixedCaseString)) { if (is_bool($mixedCaseString)) {
@@ -462,7 +477,7 @@ class PHPExcel_Calculation_TextData {
} }
return PHPExcel_Shared_String::StrToUpper($mixedCaseString); return PHPExcel_Shared_String::StrToUpper($mixedCaseString);
} // function UPPERCASE() }
/** /**
@@ -473,7 +488,8 @@ class PHPExcel_Calculation_TextData {
* @param string $mixedCaseString * @param string $mixedCaseString
* @return string * @return string
*/ */
public static function PROPERCASE($mixedCaseString) { public static function PROPERCASE($mixedCaseString)
{
$mixedCaseString = PHPExcel_Calculation_Functions::flattenSingleValue($mixedCaseString); $mixedCaseString = PHPExcel_Calculation_Functions::flattenSingleValue($mixedCaseString);
if (is_bool($mixedCaseString)) { if (is_bool($mixedCaseString)) {
@@ -481,7 +497,7 @@ class PHPExcel_Calculation_TextData {
} }
return PHPExcel_Shared_String::StrToTitle($mixedCaseString); return PHPExcel_Shared_String::StrToTitle($mixedCaseString);
} // function PROPERCASE() }
/** /**
@@ -493,17 +509,18 @@ class PHPExcel_Calculation_TextData {
* @param string $newText String to replace in defined position * @param string $newText String to replace in defined position
* @return string * @return string
*/ */
public static function REPLACE($oldText = '', $start = 1, $chars = null, $newText) { public static function REPLACE($oldText = '', $start = 1, $chars = null, $newText)
{
$oldText = PHPExcel_Calculation_Functions::flattenSingleValue($oldText); $oldText = PHPExcel_Calculation_Functions::flattenSingleValue($oldText);
$start = PHPExcel_Calculation_Functions::flattenSingleValue($start); $start = PHPExcel_Calculation_Functions::flattenSingleValue($start);
$chars = PHPExcel_Calculation_Functions::flattenSingleValue($chars); $chars = PHPExcel_Calculation_Functions::flattenSingleValue($chars);
$newText = PHPExcel_Calculation_Functions::flattenSingleValue($newText); $newText = PHPExcel_Calculation_Functions::flattenSingleValue($newText);
$left = self::LEFT($oldText,$start-1); $left = self::LEFT($oldText, $start-1);
$right = self::RIGHT($oldText,self::STRINGLENGTH($oldText)-($start+$chars)+1); $right = self::RIGHT($oldText, self::STRINGLENGTH($oldText)-($start+$chars)+1);
return $left.$newText.$right; return $left.$newText.$right;
} // function REPLACE() }
/** /**
@@ -515,21 +532,22 @@ class PHPExcel_Calculation_TextData {
* @param integer $instance Instance Number * @param integer $instance Instance Number
* @return string * @return string
*/ */
public static function SUBSTITUTE($text = '', $fromText = '', $toText = '', $instance = 0) { public static function SUBSTITUTE($text = '', $fromText = '', $toText = '', $instance = 0)
{
$text = PHPExcel_Calculation_Functions::flattenSingleValue($text); $text = PHPExcel_Calculation_Functions::flattenSingleValue($text);
$fromText = PHPExcel_Calculation_Functions::flattenSingleValue($fromText); $fromText = PHPExcel_Calculation_Functions::flattenSingleValue($fromText);
$toText = PHPExcel_Calculation_Functions::flattenSingleValue($toText); $toText = PHPExcel_Calculation_Functions::flattenSingleValue($toText);
$instance = floor(PHPExcel_Calculation_Functions::flattenSingleValue($instance)); $instance = floor(PHPExcel_Calculation_Functions::flattenSingleValue($instance));
if ($instance == 0) { if ($instance == 0) {
if(function_exists('mb_str_replace')) { if (function_exists('mb_str_replace')) {
return mb_str_replace($fromText,$toText,$text); return mb_str_replace($fromText, $toText, $text);
} else { } else {
return str_replace($fromText,$toText,$text); return str_replace($fromText, $toText, $text);
} }
} else { } else {
$pos = -1; $pos = -1;
while($instance > 0) { while ($instance > 0) {
if (function_exists('mb_strpos')) { if (function_exists('mb_strpos')) {
$pos = mb_strpos($text, $fromText, $pos+1, 'UTF-8'); $pos = mb_strpos($text, $fromText, $pos+1, 'UTF-8');
} else { } else {
@@ -542,15 +560,15 @@ class PHPExcel_Calculation_TextData {
} }
if ($pos !== false) { if ($pos !== false) {
if (function_exists('mb_strlen')) { if (function_exists('mb_strlen')) {
return self::REPLACE($text,++$pos,mb_strlen($fromText, 'UTF-8'),$toText); return self::REPLACE($text, ++$pos, mb_strlen($fromText, 'UTF-8'), $toText);
} else { } else {
return self::REPLACE($text,++$pos,strlen($fromText),$toText); return self::REPLACE($text, ++$pos, strlen($fromText), $toText);
} }
} }
} }
return $text; return $text;
} // function SUBSTITUTE() }
/** /**
@@ -559,14 +577,15 @@ class PHPExcel_Calculation_TextData {
* @param mixed $testValue Value to check * @param mixed $testValue Value to check
* @return boolean * @return boolean
*/ */
public static function RETURNSTRING($testValue = '') { public static function RETURNSTRING($testValue = '')
{
$testValue = PHPExcel_Calculation_Functions::flattenSingleValue($testValue); $testValue = PHPExcel_Calculation_Functions::flattenSingleValue($testValue);
if (is_string($testValue)) { if (is_string($testValue)) {
return $testValue; return $testValue;
} }
return Null; return null;
} // function RETURNSTRING() }
/** /**
@@ -576,7 +595,8 @@ class PHPExcel_Calculation_TextData {
* @param string $format Format mask to use * @param string $format Format mask to use
* @return boolean * @return boolean
*/ */
public static function TEXTFORMAT($value,$format) { public static function TEXTFORMAT($value, $format)
{
$value = PHPExcel_Calculation_Functions::flattenSingleValue($value); $value = PHPExcel_Calculation_Functions::flattenSingleValue($value);
$format = PHPExcel_Calculation_Functions::flattenSingleValue($format); $format = PHPExcel_Calculation_Functions::flattenSingleValue($format);
@@ -584,7 +604,48 @@ class PHPExcel_Calculation_TextData {
$value = PHPExcel_Calculation_DateTime::DATEVALUE($value); $value = PHPExcel_Calculation_DateTime::DATEVALUE($value);
} }
return (string) PHPExcel_Style_NumberFormat::toFormattedString($value,$format); return (string) PHPExcel_Style_NumberFormat::toFormattedString($value, $format);
} // function TEXTFORMAT() }
} // class PHPExcel_Calculation_TextData /**
* VALUE
*
* @param mixed $value Value to check
* @return boolean
*/
public static function VALUE($value = '')
{
$value = PHPExcel_Calculation_Functions::flattenSingleValue($value);
if (!is_numeric($value)) {
$numberValue = str_replace(
PHPExcel_Shared_String::getThousandsSeparator(),
'',
trim($value, " \t\n\r\0\x0B" . PHPExcel_Shared_String::getCurrencyCode())
);
if (is_numeric($numberValue)) {
return (float) $numberValue;
}
$dateSetting = PHPExcel_Calculation_Functions::getReturnDateType();
PHPExcel_Calculation_Functions::setReturnDateType(PHPExcel_Calculation_Functions::RETURNDATE_EXCEL);
if (strpos($value, ':') !== false) {
$timeValue = PHPExcel_Calculation_DateTime::TIMEVALUE($value);
if ($timeValue !== PHPExcel_Calculation_Functions::VALUE()) {
PHPExcel_Calculation_Functions::setReturnDateType($dateSetting);
return $timeValue;
}
}
$dateValue = PHPExcel_Calculation_DateTime::DATEVALUE($value);
if ($dateValue !== PHPExcel_Calculation_Functions::VALUE()) {
PHPExcel_Calculation_Functions::setReturnDateType($dateSetting);
return $dateValue;
}
PHPExcel_Calculation_Functions::setReturnDateType($dateSetting);
return PHPExcel_Calculation_Functions::VALUE();
}
return (float) $value;
}
}

View File

@@ -1,8 +1,9 @@
<?php <?php
/** /**
* PHPExcel * PHPExcel_Calculation_Token_Stack
* *
* Copyright (c) 2006 - 2014 PHPExcel * Copyright (c) 2006 - 2015 PHPExcel
* *
* This library is free software; you can redistribute it and/or * This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public * modify it under the terms of the GNU Lesser General Public
@@ -20,44 +21,35 @@
* *
* @category PHPExcel * @category PHPExcel
* @package PHPExcel_Calculation * @package PHPExcel_Calculation
* @copyright Copyright (c) 2006 - 2014 PHPExcel (http://www.codeplex.com/PHPExcel) * @copyright Copyright (c) 2006 - 2015 PHPExcel (http://www.codeplex.com/PHPExcel)
* @license http://www.gnu.org/licenses/old-licenses/lgpl-2.1.txt LGPL * @license http://www.gnu.org/licenses/old-licenses/lgpl-2.1.txt LGPL
* @version 1.8.0, 2014-03-02 * @version ##VERSION##, ##DATE##
*/ */
class PHPExcel_Calculation_Token_Stack
{
/**
* PHPExcel_Calculation_Token_Stack
*
* @category PHPExcel_Calculation_Token_Stack
* @package PHPExcel_Calculation
* @copyright Copyright (c) 2006 - 2014 PHPExcel (http://www.codeplex.com/PHPExcel)
*/
class PHPExcel_Calculation_Token_Stack {
/** /**
* The parser stack for formulae * The parser stack for formulae
* *
* @var mixed[] * @var mixed[]
*/ */
private $_stack = array(); private $stack = array();
/** /**
* Count of entries in the parser stack * Count of entries in the parser stack
* *
* @var integer * @var integer
*/ */
private $_count = 0; private $count = 0;
/** /**
* Return the number of entries on the stack * Return the number of entries on the stack
* *
* @return integer * @return integer
*/ */
public function count() { public function count()
return $this->_count; {
} // function count() return $this->count;
}
/** /**
* Push a new entry onto the stack * Push a new entry onto the stack
@@ -66,30 +58,33 @@ class PHPExcel_Calculation_Token_Stack {
* @param mixed $value * @param mixed $value
* @param mixed $reference * @param mixed $reference
*/ */
public function push($type, $value, $reference = NULL) { public function push($type, $value, $reference = null)
$this->_stack[$this->_count++] = array('type' => $type, {
$this->stack[$this->count++] = array(
'type' => $type,
'value' => $value, 'value' => $value,
'reference' => $reference 'reference' => $reference
); );
if ($type == 'Function') { if ($type == 'Function') {
$localeFunction = PHPExcel_Calculation::_localeFunc($value); $localeFunction = PHPExcel_Calculation::localeFunc($value);
if ($localeFunction != $value) { if ($localeFunction != $value) {
$this->_stack[($this->_count - 1)]['localeValue'] = $localeFunction; $this->stack[($this->count - 1)]['localeValue'] = $localeFunction;
}
} }
} }
} // function push()
/** /**
* Pop the last entry from the stack * Pop the last entry from the stack
* *
* @return mixed * @return mixed
*/ */
public function pop() { public function pop()
if ($this->_count > 0) { {
return $this->_stack[--$this->_count]; if ($this->count > 0) {
return $this->stack[--$this->count];
}
return null;
} }
return NULL;
} // function pop()
/** /**
* Return an entry from the stack without removing it * Return an entry from the stack without removing it
@@ -97,19 +92,20 @@ class PHPExcel_Calculation_Token_Stack {
* @param integer $n number indicating how far back in the stack we want to look * @param integer $n number indicating how far back in the stack we want to look
* @return mixed * @return mixed
*/ */
public function last($n = 1) { public function last($n = 1)
if ($this->_count - $n < 0) { {
return NULL; if ($this->count - $n < 0) {
return null;
}
return $this->stack[$this->count - $n];
} }
return $this->_stack[$this->_count - $n];
} // function last()
/** /**
* Clear the stack * Clear the stack
*/ */
function clear() { public function clear()
$this->_stack = array(); {
$this->_count = 0; $this->stack = array();
$this->count = 0;
} }
}
} // class PHPExcel_Calculation_Token_Stack

View File

@@ -1,8 +1,9 @@
<?php <?php
/** /**
* PHPExcel * PHPExcel_Cell
* *
* Copyright (c) 2006 - 2014 PHPExcel * Copyright (c) 2006 - 2015 PHPExcel
* *
* This library is free software; you can redistribute it and/or * This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public * modify it under the terms of the GNU Lesser General Public
@@ -20,22 +21,12 @@
* *
* @category PHPExcel * @category PHPExcel
* @package PHPExcel_Cell * @package PHPExcel_Cell
* @copyright Copyright (c) 2006 - 2014 PHPExcel (http://www.codeplex.com/PHPExcel) * @copyright Copyright (c) 2006 - 2015 PHPExcel (http://www.codeplex.com/PHPExcel)
* @license http://www.gnu.org/licenses/old-licenses/lgpl-2.1.txt LGPL * @license http://www.gnu.org/licenses/old-licenses/lgpl-2.1.txt LGPL
* @version 1.8.0, 2014-03-02 * @version ##VERSION##, ##DATE##
*/
/**
* PHPExcel_Cell
*
* @category PHPExcel
* @package PHPExcel_Cell
* @copyright Copyright (c) 2006 - 2014 PHPExcel (http://www.codeplex.com/PHPExcel)
*/ */
class PHPExcel_Cell class PHPExcel_Cell
{ {
/** /**
* Default range variable constant * Default range variable constant
* *
@@ -48,14 +39,14 @@ class PHPExcel_Cell
* *
* @var PHPExcel_Cell_IValueBinder * @var PHPExcel_Cell_IValueBinder
*/ */
private static $_valueBinder = NULL; private static $valueBinder;
/** /**
* Value of the cell * Value of the cell
* *
* @var mixed * @var mixed
*/ */
private $_value; private $value;
/** /**
* Calculated value of the cell (used for caching) * Calculated value of the cell (used for caching)
@@ -67,34 +58,34 @@ class PHPExcel_Cell
* *
* @var mixed * @var mixed
*/ */
private $_calculatedValue = NULL; private $calculatedValue;
/** /**
* Type of the cell data * Type of the cell data
* *
* @var string * @var string
*/ */
private $_dataType; private $dataType;
/** /**
* Parent worksheet * Parent worksheet
* *
* @var PHPExcel_CachedObjectStorage_CacheBase * @var PHPExcel_CachedObjectStorage_CacheBase
*/ */
private $_parent; private $parent;
/** /**
* Index to cellXf * Index to cellXf
* *
* @var int * @var int
*/ */
private $_xfIndex; private $xfIndex = 0;
/** /**
* Attributes of the formula * Attributes of the formula
* *
*/ */
private $_formulaAttributes; private $formulaAttributes;
/** /**
@@ -102,20 +93,21 @@ class PHPExcel_Cell
* *
* @return void * @return void
**/ **/
public function notifyCacheController() { public function notifyCacheController()
$this->_parent->updateCacheData($this); {
$this->parent->updateCacheData($this);
return $this; return $this;
} }
public function detach() { public function detach()
$this->_parent = NULL; {
$this->parent = null;
} }
public function attach(PHPExcel_CachedObjectStorage_CacheBase $parent) { public function attach(PHPExcel_CachedObjectStorage_CacheBase $parent)
{
$this->parent = $parent;
$this->_parent = $parent;
} }
@@ -127,29 +119,25 @@ class PHPExcel_Cell
* @param PHPExcel_Worksheet $pSheet * @param PHPExcel_Worksheet $pSheet
* @throws PHPExcel_Exception * @throws PHPExcel_Exception
*/ */
public function __construct($pValue = NULL, $pDataType = NULL, PHPExcel_Worksheet $pSheet = NULL) public function __construct($pValue = null, $pDataType = null, PHPExcel_Worksheet $pSheet = null)
{ {
// Initialise cell value // Initialise cell value
$this->_value = $pValue; $this->value = $pValue;
// Set worksheet cache // Set worksheet cache
$this->_parent = $pSheet->getCellCacheController(); $this->parent = $pSheet->getCellCacheController();
// Set datatype? // Set datatype?
if ($pDataType !== NULL) { if ($pDataType !== null) {
if ($pDataType == PHPExcel_Cell_DataType::TYPE_STRING2) if ($pDataType == PHPExcel_Cell_DataType::TYPE_STRING2) {
$pDataType = PHPExcel_Cell_DataType::TYPE_STRING; $pDataType = PHPExcel_Cell_DataType::TYPE_STRING;
$this->_dataType = $pDataType; }
} else { $this->dataType = $pDataType;
if (!self::getValueBinder()->bindValue($this, $pValue)) { } elseif (!self::getValueBinder()->bindValue($this, $pValue)) {
throw new PHPExcel_Exception("Value could not be bound to cell."); throw new PHPExcel_Exception("Value could not be bound to cell.");
} }
} }
// set default index to cellXf
$this->_xfIndex = 0;
}
/** /**
* Get cell coordinate column * Get cell coordinate column
* *
@@ -157,7 +145,7 @@ class PHPExcel_Cell
*/ */
public function getColumn() public function getColumn()
{ {
return $this->_parent->getCurrentColumn(); return $this->parent->getCurrentColumn();
} }
/** /**
@@ -167,7 +155,7 @@ class PHPExcel_Cell
*/ */
public function getRow() public function getRow()
{ {
return $this->_parent->getCurrentRow(); return $this->parent->getCurrentRow();
} }
/** /**
@@ -177,7 +165,7 @@ class PHPExcel_Cell
*/ */
public function getCoordinate() public function getCoordinate()
{ {
return $this->_parent->getCurrentAddress(); return $this->parent->getCurrentAddress();
} }
/** /**
@@ -187,7 +175,7 @@ class PHPExcel_Cell
*/ */
public function getValue() public function getValue()
{ {
return $this->_value; return $this->value;
} }
/** /**
@@ -199,7 +187,7 @@ class PHPExcel_Cell
{ {
return (string) PHPExcel_Style_NumberFormat::toFormattedString( return (string) PHPExcel_Style_NumberFormat::toFormattedString(
$this->getCalculatedValue(), $this->getCalculatedValue(),
$this->getWorksheet()->getParent()->getCellXfByIndex($this->getXfIndex()) $this->getStyle()
->getNumberFormat()->getFormatCode() ->getNumberFormat()->getFormatCode()
); );
} }
@@ -213,7 +201,7 @@ class PHPExcel_Cell
* @return PHPExcel_Cell * @return PHPExcel_Cell
* @throws PHPExcel_Exception * @throws PHPExcel_Exception
*/ */
public function setValue($pValue = NULL) public function setValue($pValue = null)
{ {
if (!self::getValueBinder()->bindValue($this, $pValue)) { if (!self::getValueBinder()->bindValue($this, $pValue)) {
throw new PHPExcel_Exception("Value could not be bound to cell."); throw new PHPExcel_Exception("Value could not be bound to cell.");
@@ -229,30 +217,33 @@ class PHPExcel_Cell
* @return PHPExcel_Cell * @return PHPExcel_Cell
* @throws PHPExcel_Exception * @throws PHPExcel_Exception
*/ */
public function setValueExplicit($pValue = NULL, $pDataType = PHPExcel_Cell_DataType::TYPE_STRING) public function setValueExplicit($pValue = null, $pDataType = PHPExcel_Cell_DataType::TYPE_STRING)
{ {
// set the value according to data type // set the value according to data type
switch ($pDataType) { switch ($pDataType) {
case PHPExcel_Cell_DataType::TYPE_NULL: case PHPExcel_Cell_DataType::TYPE_NULL:
$this->_value = $pValue; $this->value = $pValue;
break; break;
case PHPExcel_Cell_DataType::TYPE_STRING2: case PHPExcel_Cell_DataType::TYPE_STRING2:
$pDataType = PHPExcel_Cell_DataType::TYPE_STRING; $pDataType = PHPExcel_Cell_DataType::TYPE_STRING;
// no break
case PHPExcel_Cell_DataType::TYPE_STRING: case PHPExcel_Cell_DataType::TYPE_STRING:
// Synonym for string
case PHPExcel_Cell_DataType::TYPE_INLINE: case PHPExcel_Cell_DataType::TYPE_INLINE:
$this->_value = PHPExcel_Cell_DataType::checkString($pValue); // Rich text
$this->value = PHPExcel_Cell_DataType::checkString($pValue);
break; break;
case PHPExcel_Cell_DataType::TYPE_NUMERIC: case PHPExcel_Cell_DataType::TYPE_NUMERIC:
$this->_value = (float)$pValue; $this->value = (float) $pValue;
break; break;
case PHPExcel_Cell_DataType::TYPE_FORMULA: case PHPExcel_Cell_DataType::TYPE_FORMULA:
$this->_value = (string)$pValue; $this->value = (string) $pValue;
break; break;
case PHPExcel_Cell_DataType::TYPE_BOOL: case PHPExcel_Cell_DataType::TYPE_BOOL:
$this->_value = (bool)$pValue; $this->value = (bool) $pValue;
break; break;
case PHPExcel_Cell_DataType::TYPE_ERROR: case PHPExcel_Cell_DataType::TYPE_ERROR:
$this->_value = PHPExcel_Cell_DataType::checkErrorCode($pValue); $this->value = PHPExcel_Cell_DataType::checkErrorCode($pValue);
break; break;
default: default:
throw new PHPExcel_Exception('Invalid datatype: ' . $pDataType); throw new PHPExcel_Exception('Invalid datatype: ' . $pDataType);
@@ -260,7 +251,7 @@ class PHPExcel_Cell
} }
// set the datatype // set the datatype
$this->_dataType = $pDataType; $this->dataType = $pDataType;
return $this->notifyCacheController(); return $this->notifyCacheController();
} }
@@ -274,15 +265,15 @@ class PHPExcel_Cell
* @return mixed * @return mixed
* @throws PHPExcel_Exception * @throws PHPExcel_Exception
*/ */
public function getCalculatedValue($resetLog = TRUE) public function getCalculatedValue($resetLog = true)
{ {
//echo 'Cell '.$this->getCoordinate().' value is a '.$this->_dataType.' with a value of '.$this->getValue().PHP_EOL; //echo 'Cell '.$this->getCoordinate().' value is a '.$this->dataType.' with a value of '.$this->getValue().PHP_EOL;
if ($this->_dataType == PHPExcel_Cell_DataType::TYPE_FORMULA) { if ($this->dataType == PHPExcel_Cell_DataType::TYPE_FORMULA) {
try { try {
//echo 'Cell value for '.$this->getCoordinate().' is a formula: Calculating value'.PHP_EOL; //echo 'Cell value for '.$this->getCoordinate().' is a formula: Calculating value'.PHP_EOL;
$result = PHPExcel_Calculation::getInstance( $result = PHPExcel_Calculation::getInstance(
$this->getWorksheet()->getParent() $this->getWorksheet()->getParent()
)->calculateCellValue($this,$resetLog); )->calculateCellValue($this, $resetLog);
//echo $this->getCoordinate().' calculation result is '.$result.PHP_EOL; //echo $this->getCoordinate().' calculation result is '.$result.PHP_EOL;
// We don't yet handle array returns // We don't yet handle array returns
if (is_array($result)) { if (is_array($result)) {
@@ -290,10 +281,10 @@ class PHPExcel_Cell
$result = array_pop($result); $result = array_pop($result);
} }
} }
} catch ( PHPExcel_Exception $ex ) { } catch (PHPExcel_Exception $ex) {
if (($ex->getMessage() === 'Unable to access External Workbook') && ($this->_calculatedValue !== NULL)) { if (($ex->getMessage() === 'Unable to access External Workbook') && ($this->calculatedValue !== null)) {
//echo 'Returning fallback value of '.$this->_calculatedValue.' for cell '.$this->getCoordinate().PHP_EOL; //echo 'Returning fallback value of '.$this->calculatedValue.' for cell '.$this->getCoordinate().PHP_EOL;
return $this->_calculatedValue; // Fallback for calculations referencing external files. return $this->calculatedValue; // Fallback for calculations referencing external files.
} }
//echo 'Calculation Exception: '.$ex->getMessage().PHP_EOL; //echo 'Calculation Exception: '.$ex->getMessage().PHP_EOL;
$result = '#N/A'; $result = '#N/A';
@@ -303,17 +294,17 @@ class PHPExcel_Cell
} }
if ($result === '#Not Yet Implemented') { if ($result === '#Not Yet Implemented') {
//echo 'Returning fallback value of '.$this->_calculatedValue.' for cell '.$this->getCoordinate().PHP_EOL; //echo 'Returning fallback value of '.$this->calculatedValue.' for cell '.$this->getCoordinate().PHP_EOL;
return $this->_calculatedValue; // Fallback if calculation engine does not support the formula. return $this->calculatedValue; // Fallback if calculation engine does not support the formula.
} }
//echo 'Returning calculated value of '.$result.' for cell '.$this->getCoordinate().PHP_EOL; //echo 'Returning calculated value of '.$result.' for cell '.$this->getCoordinate().PHP_EOL;
return $result; return $result;
} elseif($this->_value instanceof PHPExcel_RichText) { } elseif ($this->value instanceof PHPExcel_RichText) {
// echo 'Cell value for '.$this->getCoordinate().' is rich text: Returning data value of '.$this->_value.'<br />'; // echo 'Cell value for '.$this->getCoordinate().' is rich text: Returning data value of '.$this->value.'<br />';
return $this->_value->getPlainText(); return $this->value->getPlainText();
} }
// echo 'Cell value for '.$this->getCoordinate().' is not a formula: Returning data value of '.$this->_value.'<br />'; // echo 'Cell value for '.$this->getCoordinate().' is not a formula: Returning data value of '.$this->value.'<br />';
return $this->_value; return $this->value;
} }
/** /**
@@ -322,10 +313,10 @@ class PHPExcel_Cell
* @param mixed $pValue Value * @param mixed $pValue Value
* @return PHPExcel_Cell * @return PHPExcel_Cell
*/ */
public function setCalculatedValue($pValue = NULL) public function setCalculatedValue($pValue = null)
{ {
if ($pValue !== NULL) { if ($pValue !== null) {
$this->_calculatedValue = (is_numeric($pValue)) ? (float) $pValue : $pValue; $this->calculatedValue = (is_numeric($pValue)) ? (float) $pValue : $pValue;
} }
return $this->notifyCacheController(); return $this->notifyCacheController();
@@ -343,7 +334,7 @@ class PHPExcel_Cell
*/ */
public function getOldCalculatedValue() public function getOldCalculatedValue()
{ {
return $this->_calculatedValue; return $this->calculatedValue;
} }
/** /**
@@ -353,7 +344,7 @@ class PHPExcel_Cell
*/ */
public function getDataType() public function getDataType()
{ {
return $this->_dataType; return $this->dataType;
} }
/** /**
@@ -364,10 +355,10 @@ class PHPExcel_Cell
*/ */
public function setDataType($pDataType = PHPExcel_Cell_DataType::TYPE_STRING) public function setDataType($pDataType = PHPExcel_Cell_DataType::TYPE_STRING)
{ {
if ($pDataType == PHPExcel_Cell_DataType::TYPE_STRING2) if ($pDataType == PHPExcel_Cell_DataType::TYPE_STRING2) {
$pDataType = PHPExcel_Cell_DataType::TYPE_STRING; $pDataType = PHPExcel_Cell_DataType::TYPE_STRING;
}
$this->_dataType = $pDataType; $this->dataType = $pDataType;
return $this->notifyCacheController(); return $this->notifyCacheController();
} }
@@ -379,7 +370,7 @@ class PHPExcel_Cell
*/ */
public function isFormula() public function isFormula()
{ {
return $this->_dataType == PHPExcel_Cell_DataType::TYPE_FORMULA; return $this->dataType == PHPExcel_Cell_DataType::TYPE_FORMULA;
} }
/** /**
@@ -390,7 +381,7 @@ class PHPExcel_Cell
*/ */
public function hasDataValidation() public function hasDataValidation()
{ {
if (!isset($this->_parent)) { if (!isset($this->parent)) {
throw new PHPExcel_Exception('Cannot check for data validation when cell is not bound to a worksheet'); throw new PHPExcel_Exception('Cannot check for data validation when cell is not bound to a worksheet');
} }
@@ -405,7 +396,7 @@ class PHPExcel_Cell
*/ */
public function getDataValidation() public function getDataValidation()
{ {
if (!isset($this->_parent)) { if (!isset($this->parent)) {
throw new PHPExcel_Exception('Cannot get data validation for cell that is not bound to a worksheet'); throw new PHPExcel_Exception('Cannot get data validation for cell that is not bound to a worksheet');
} }
@@ -419,9 +410,9 @@ class PHPExcel_Cell
* @return PHPExcel_Cell * @return PHPExcel_Cell
* @throws PHPExcel_Exception * @throws PHPExcel_Exception
*/ */
public function setDataValidation(PHPExcel_Cell_DataValidation $pDataValidation = NULL) public function setDataValidation(PHPExcel_Cell_DataValidation $pDataValidation = null)
{ {
if (!isset($this->_parent)) { if (!isset($this->parent)) {
throw new PHPExcel_Exception('Cannot set data validation for cell that is not bound to a worksheet'); throw new PHPExcel_Exception('Cannot set data validation for cell that is not bound to a worksheet');
} }
@@ -438,7 +429,7 @@ class PHPExcel_Cell
*/ */
public function hasHyperlink() public function hasHyperlink()
{ {
if (!isset($this->_parent)) { if (!isset($this->parent)) {
throw new PHPExcel_Exception('Cannot check for hyperlink when cell is not bound to a worksheet'); throw new PHPExcel_Exception('Cannot check for hyperlink when cell is not bound to a worksheet');
} }
@@ -453,7 +444,7 @@ class PHPExcel_Cell
*/ */
public function getHyperlink() public function getHyperlink()
{ {
if (!isset($this->_parent)) { if (!isset($this->parent)) {
throw new PHPExcel_Exception('Cannot get hyperlink for cell that is not bound to a worksheet'); throw new PHPExcel_Exception('Cannot get hyperlink for cell that is not bound to a worksheet');
} }
@@ -467,9 +458,9 @@ class PHPExcel_Cell
* @return PHPExcel_Cell * @return PHPExcel_Cell
* @throws PHPExcel_Exception * @throws PHPExcel_Exception
*/ */
public function setHyperlink(PHPExcel_Cell_Hyperlink $pHyperlink = NULL) public function setHyperlink(PHPExcel_Cell_Hyperlink $pHyperlink = null)
{ {
if (!isset($this->_parent)) { if (!isset($this->parent)) {
throw new PHPExcel_Exception('Cannot set hyperlink for cell that is not bound to a worksheet'); throw new PHPExcel_Exception('Cannot set hyperlink for cell that is not bound to a worksheet');
} }
@@ -483,8 +474,9 @@ class PHPExcel_Cell
* *
* @return PHPExcel_CachedObjectStorage_CacheBase * @return PHPExcel_CachedObjectStorage_CacheBase
*/ */
public function getParent() { public function getParent()
return $this->_parent; {
return $this->parent;
} }
/** /**
@@ -492,8 +484,51 @@ class PHPExcel_Cell
* *
* @return PHPExcel_Worksheet * @return PHPExcel_Worksheet
*/ */
public function getWorksheet() { public function getWorksheet()
return $this->_parent->getParent(); {
return $this->parent->getParent();
}
/**
* Is this cell in a merge range
*
* @return boolean
*/
public function isInMergeRange()
{
return (boolean) $this->getMergeRange();
}
/**
* Is this cell the master (top left cell) in a merge range (that holds the actual data value)
*
* @return boolean
*/
public function isMergeRangeValueCell()
{
if ($mergeRange = $this->getMergeRange()) {
$mergeRange = PHPExcel_Cell::splitRange($mergeRange);
list($startCell) = $mergeRange[0];
if ($this->getCoordinate() === $startCell) {
return true;
}
}
return false;
}
/**
* If this cell is in a merge range, then return the range
*
* @return string
*/
public function getMergeRange()
{
foreach ($this->getWorksheet()->getMergeCells() as $mergeRange) {
if ($this->isInRange($mergeRange)) {
return $mergeRange;
}
}
return false;
} }
/** /**
@@ -503,7 +538,7 @@ class PHPExcel_Cell
*/ */
public function getStyle() public function getStyle()
{ {
return $this->getWorksheet()->getParent()->getCellXfByIndex($this->getXfIndex()); return $this->getWorksheet()->getStyle($this->getCoordinate());
} }
/** /**
@@ -512,8 +547,9 @@ class PHPExcel_Cell
* @param PHPExcel_Worksheet $parent * @param PHPExcel_Worksheet $parent
* @return PHPExcel_Cell * @return PHPExcel_Cell
*/ */
public function rebindParent(PHPExcel_Worksheet $parent) { public function rebindParent(PHPExcel_Worksheet $parent)
$this->_parent = $parent->getCellCacheController(); {
$this->parent = $parent->getCellCacheController();
return $this->notifyCacheController(); return $this->notifyCacheController();
} }
@@ -526,7 +562,7 @@ class PHPExcel_Cell
*/ */
public function isInRange($pRange = 'A1:A1') public function isInRange($pRange = 'A1:A1')
{ {
list($rangeStart,$rangeEnd) = self::rangeBoundaries($pRange); list($rangeStart, $rangeEnd) = self::rangeBoundaries($pRange);
// Translate properties // Translate properties
$myColumn = self::columnIndexFromString($this->getColumn()); $myColumn = self::columnIndexFromString($this->getColumn());
@@ -549,7 +585,7 @@ class PHPExcel_Cell
{ {
if (preg_match("/^([$]?[A-Z]{1,3})([$]?\d{1,7})$/", $pCoordinateString, $matches)) { if (preg_match("/^([$]?[A-Z]{1,3})([$]?\d{1,7})$/", $pCoordinateString, $matches)) {
return array($matches[1],$matches[2]); return array($matches[1],$matches[2]);
} elseif ((strpos($pCoordinateString,':') !== FALSE) || (strpos($pCoordinateString,',') !== FALSE)) { } elseif ((strpos($pCoordinateString, ':') !== false) || (strpos($pCoordinateString, ',') !== false)) {
throw new PHPExcel_Exception('Cell coordinate string can not be a range of cells'); throw new PHPExcel_Exception('Cell coordinate string can not be a range of cells');
} elseif ($pCoordinateString == '') { } elseif ($pCoordinateString == '') {
throw new PHPExcel_Exception('Cell coordinate can not be zero-length string'); throw new PHPExcel_Exception('Cell coordinate can not be zero-length string');
@@ -568,14 +604,16 @@ class PHPExcel_Cell
*/ */
public static function absoluteReference($pCoordinateString = 'A1') public static function absoluteReference($pCoordinateString = 'A1')
{ {
if (strpos($pCoordinateString,':') === FALSE && strpos($pCoordinateString,',') === FALSE) { if (strpos($pCoordinateString, ':') === false && strpos($pCoordinateString, ',') === false) {
// Split out any worksheet name from the reference // Split out any worksheet name from the reference
$worksheet = ''; $worksheet = '';
$cellAddress = explode('!',$pCoordinateString); $cellAddress = explode('!', $pCoordinateString);
if (count($cellAddress) > 1) { if (count($cellAddress) > 1) {
list($worksheet,$pCoordinateString) = $cellAddress; list($worksheet, $pCoordinateString) = $cellAddress;
}
if ($worksheet > '') {
$worksheet .= '!';
} }
if ($worksheet > '') $worksheet .= '!';
// Create absolute coordinate // Create absolute coordinate
if (ctype_digit($pCoordinateString)) { if (ctype_digit($pCoordinateString)) {
@@ -598,19 +636,21 @@ class PHPExcel_Cell
*/ */
public static function absoluteCoordinate($pCoordinateString = 'A1') public static function absoluteCoordinate($pCoordinateString = 'A1')
{ {
if (strpos($pCoordinateString,':') === FALSE && strpos($pCoordinateString,',') === FALSE) { if (strpos($pCoordinateString, ':') === false && strpos($pCoordinateString, ',') === false) {
// Split out any worksheet name from the coordinate // Split out any worksheet name from the coordinate
$worksheet = ''; $worksheet = '';
$cellAddress = explode('!',$pCoordinateString); $cellAddress = explode('!', $pCoordinateString);
if (count($cellAddress) > 1) { if (count($cellAddress) > 1) {
list($worksheet,$pCoordinateString) = $cellAddress; list($worksheet, $pCoordinateString) = $cellAddress;
}
if ($worksheet > '') {
$worksheet .= '!';
} }
if ($worksheet > '') $worksheet .= '!';
// Create absolute coordinate // Create absolute coordinate
list($column, $row) = self::coordinateFromString($pCoordinateString); list($column, $row) = self::coordinateFromString($pCoordinateString);
$column = ltrim($column,'$'); $column = ltrim($column, '$');
$row = ltrim($row,'$'); $row = ltrim($row, '$');
return $worksheet . '$' . $column . '$' . $row; return $worksheet . '$' . $column . '$' . $row;
} }
@@ -628,7 +668,7 @@ class PHPExcel_Cell
public static function splitRange($pRange = 'A1:A1') public static function splitRange($pRange = 'A1:A1')
{ {
// Ensure $pRange is a valid range // Ensure $pRange is a valid range
if(empty($pRange)) { if (empty($pRange)) {
$pRange = self::DEFAULT_RANGE; $pRange = self::DEFAULT_RANGE;
} }
@@ -675,7 +715,7 @@ class PHPExcel_Cell
public static function rangeBoundaries($pRange = 'A1:A1') public static function rangeBoundaries($pRange = 'A1:A1')
{ {
// Ensure $pRange is a valid range // Ensure $pRange is a valid range
if(empty($pRange)) { if (empty($pRange)) {
$pRange = self::DEFAULT_RANGE; $pRange = self::DEFAULT_RANGE;
} }
@@ -683,7 +723,7 @@ class PHPExcel_Cell
$pRange = strtoupper($pRange); $pRange = strtoupper($pRange);
// Extract range // Extract range
if (strpos($pRange, ':') === FALSE) { if (strpos($pRange, ':') === false) {
$rangeA = $rangeB = $pRange; $rangeA = $rangeB = $pRange;
} else { } else {
list($rangeA, $rangeB) = explode(':', $pRange); list($rangeA, $rangeB) = explode(':', $pRange);
@@ -709,7 +749,7 @@ class PHPExcel_Cell
public static function rangeDimension($pRange = 'A1:A1') public static function rangeDimension($pRange = 'A1:A1')
{ {
// Calculate range outer borders // Calculate range outer borders
list($rangeStart,$rangeEnd) = self::rangeBoundaries($pRange); list($rangeStart, $rangeEnd) = self::rangeBoundaries($pRange);
return array( ($rangeEnd[0] - $rangeStart[0] + 1), ($rangeEnd[1] - $rangeStart[1] + 1) ); return array( ($rangeEnd[0] - $rangeStart[0] + 1), ($rangeEnd[1] - $rangeStart[1] + 1) );
} }
@@ -724,7 +764,7 @@ class PHPExcel_Cell
public static function getRangeBoundaries($pRange = 'A1:A1') public static function getRangeBoundaries($pRange = 'A1:A1')
{ {
// Ensure $pRange is a valid range // Ensure $pRange is a valid range
if(empty($pRange)) { if (empty($pRange)) {
$pRange = self::DEFAULT_RANGE; $pRange = self::DEFAULT_RANGE;
} }
@@ -732,7 +772,7 @@ class PHPExcel_Cell
$pRange = strtoupper($pRange); $pRange = strtoupper($pRange);
// Extract range // Extract range
if (strpos($pRange, ':') === FALSE) { if (strpos($pRange, ':') === false) {
$rangeA = $rangeB = $pRange; $rangeA = $rangeB = $pRange;
} else { } else {
list($rangeA, $rangeB) = explode(':', $pRange); list($rangeA, $rangeB) = explode(':', $pRange);
@@ -754,9 +794,9 @@ class PHPExcel_Cell
// though it's additional memory overhead // though it's additional memory overhead
static $_indexCache = array(); static $_indexCache = array();
if (isset($_indexCache[$pString])) if (isset($_indexCache[$pString])) {
return $_indexCache[$pString]; return $_indexCache[$pString];
}
// It's surprising how costly the strtoupper() and ord() calls actually are, so we use a lookup array rather than use ord() // It's surprising how costly the strtoupper() and ord() calls actually are, so we use a lookup array rather than use ord()
// and make it case insensitive to get rid of the strtoupper() as well. Because it's a static, there's no significant // and make it case insensitive to get rid of the strtoupper() as well. Because it's a static, there's no significant
// memory overhead either // memory overhead either
@@ -773,10 +813,10 @@ class PHPExcel_Cell
if (!isset($pString{1})) { if (!isset($pString{1})) {
$_indexCache[$pString] = $_columnLookup[$pString]; $_indexCache[$pString] = $_columnLookup[$pString];
return $_indexCache[$pString]; return $_indexCache[$pString];
} elseif(!isset($pString{2})) { } elseif (!isset($pString{2})) {
$_indexCache[$pString] = $_columnLookup[$pString{0}] * 26 + $_columnLookup[$pString{1}]; $_indexCache[$pString] = $_columnLookup[$pString{0}] * 26 + $_columnLookup[$pString{1}];
return $_indexCache[$pString]; return $_indexCache[$pString];
} elseif(!isset($pString{3})) { } elseif (!isset($pString{3})) {
$_indexCache[$pString] = $_columnLookup[$pString{0}] * 676 + $_columnLookup[$pString{1}] * 26 + $_columnLookup[$pString{2}]; $_indexCache[$pString] = $_columnLookup[$pString{0}] * 676 + $_columnLookup[$pString{1}] * 26 + $_columnLookup[$pString{2}];
return $_indexCache[$pString]; return $_indexCache[$pString];
} }
@@ -819,7 +859,8 @@ class PHPExcel_Cell
* @param string $pRange Range (e.g. A1 or A1:C10 or A1:E10 A20:E25) * @param string $pRange Range (e.g. A1 or A1:C10 or A1:E10 A20:E25)
* @return array Array containing single cell references * @return array Array containing single cell references
*/ */
public static function extractAllCellReferencesInRange($pRange = 'A1') { public static function extractAllCellReferencesInRange($pRange = 'A1')
{
// Returnvalue // Returnvalue
$returnValue = array(); $returnValue = array();
@@ -827,14 +868,14 @@ class PHPExcel_Cell
$cellBlocks = explode(' ', str_replace('$', '', strtoupper($pRange))); $cellBlocks = explode(' ', str_replace('$', '', strtoupper($pRange)));
foreach ($cellBlocks as $cellBlock) { foreach ($cellBlocks as $cellBlock) {
// Single cell? // Single cell?
if (strpos($cellBlock,':') === FALSE && strpos($cellBlock,',') === FALSE) { if (strpos($cellBlock, ':') === false && strpos($cellBlock, ',') === false) {
$returnValue[] = $cellBlock; $returnValue[] = $cellBlock;
continue; continue;
} }
// Range... // Range...
$ranges = self::splitRange($cellBlock); $ranges = self::splitRange($cellBlock);
foreach($ranges as $range) { foreach ($ranges as $range) {
// Single cell? // Single cell?
if (!isset($range[1])) { if (!isset($range[1])) {
$returnValue[] = $range[0]; $returnValue[] = $range[0];
@@ -843,9 +884,9 @@ class PHPExcel_Cell
// Range... // Range...
list($rangeStart, $rangeEnd) = $range; list($rangeStart, $rangeEnd) = $range;
sscanf($rangeStart,'%[A-Z]%d', $startCol, $startRow); sscanf($rangeStart, '%[A-Z]%d', $startCol, $startRow);
sscanf($rangeEnd,'%[A-Z]%d', $endCol, $endRow); sscanf($rangeEnd, '%[A-Z]%d', $endCol, $endRow);
$endCol++; ++$endCol;
// Current data // Current data
$currentCol = $startCol; $currentCol = $startCol;
@@ -866,8 +907,8 @@ class PHPExcel_Cell
// Sort the result by column and row // Sort the result by column and row
$sortKeys = array(); $sortKeys = array();
foreach (array_unique($returnValue) as $coord) { foreach (array_unique($returnValue) as $coord) {
sscanf($coord,'%[A-Z]%d', $column, $row); sscanf($coord, '%[A-Z]%d', $column, $row);
$sortKeys[sprintf('%3s%09d',$column,$row)] = $coord; $sortKeys[sprintf('%3s%09d', $column, $row)] = $coord;
} }
ksort($sortKeys); ksort($sortKeys);
@@ -900,12 +941,13 @@ class PHPExcel_Cell
* *
* @return PHPExcel_Cell_IValueBinder * @return PHPExcel_Cell_IValueBinder
*/ */
public static function getValueBinder() { public static function getValueBinder()
if (self::$_valueBinder === NULL) { {
self::$_valueBinder = new PHPExcel_Cell_DefaultValueBinder(); if (self::$valueBinder === null) {
self::$valueBinder = new PHPExcel_Cell_DefaultValueBinder();
} }
return self::$_valueBinder; return self::$valueBinder;
} }
/** /**
@@ -914,21 +956,23 @@ class PHPExcel_Cell
* @param PHPExcel_Cell_IValueBinder $binder * @param PHPExcel_Cell_IValueBinder $binder
* @throws PHPExcel_Exception * @throws PHPExcel_Exception
*/ */
public static function setValueBinder(PHPExcel_Cell_IValueBinder $binder = NULL) { public static function setValueBinder(PHPExcel_Cell_IValueBinder $binder = null)
if ($binder === NULL) { {
if ($binder === null) {
throw new PHPExcel_Exception("A PHPExcel_Cell_IValueBinder is required for PHPExcel to function correctly."); throw new PHPExcel_Exception("A PHPExcel_Cell_IValueBinder is required for PHPExcel to function correctly.");
} }
self::$_valueBinder = $binder; self::$valueBinder = $binder;
} }
/** /**
* Implement PHP __clone to create a deep clone, not just a shallow copy. * Implement PHP __clone to create a deep clone, not just a shallow copy.
*/ */
public function __clone() { public function __clone()
{
$vars = get_object_vars($this); $vars = get_object_vars($this);
foreach ($vars as $key => $value) { foreach ($vars as $key => $value) {
if ((is_object($value)) && ($key != '_parent')) { if ((is_object($value)) && ($key != 'parent')) {
$this->$key = clone $value; $this->$key = clone $value;
} else { } else {
$this->$key = $value; $this->$key = $value;
@@ -943,7 +987,7 @@ class PHPExcel_Cell
*/ */
public function getXfIndex() public function getXfIndex()
{ {
return $this->_xfIndex; return $this->xfIndex;
} }
/** /**
@@ -954,7 +998,7 @@ class PHPExcel_Cell
*/ */
public function setXfIndex($pValue = 0) public function setXfIndex($pValue = 0)
{ {
$this->_xfIndex = $pValue; $this->xfIndex = $pValue;
return $this->notifyCacheController(); return $this->notifyCacheController();
} }
@@ -964,7 +1008,7 @@ class PHPExcel_Cell
*/ */
public function setFormulaAttributes($pAttributes) public function setFormulaAttributes($pAttributes)
{ {
$this->_formulaAttributes = $pAttributes; $this->formulaAttributes = $pAttributes;
return $this; return $this;
} }
@@ -973,7 +1017,7 @@ class PHPExcel_Cell
*/ */
public function getFormulaAttributes() public function getFormulaAttributes()
{ {
return $this->_formulaAttributes; return $this->formulaAttributes;
} }
/** /**
@@ -985,6 +1029,4 @@ class PHPExcel_Cell
{ {
return (string) $this->getValue(); return (string) $this->getValue();
} }
} }

View File

@@ -1,8 +1,18 @@
<?php <?php
/** PHPExcel root directory */
if (!defined('PHPEXCEL_ROOT')) {
/**
* @ignore
*/
define('PHPEXCEL_ROOT', dirname(__FILE__) . '/../../');
require(PHPEXCEL_ROOT . 'PHPExcel/Autoloader.php');
}
/** /**
* PHPExcel * PHPExcel_Cell_AdvancedValueBinder
* *
* Copyright (c) 2006 - 2014 PHPExcel * Copyright (c) 2006 - 2015 PHPExcel
* *
* This library is free software; you can redistribute it and/or * This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public * modify it under the terms of the GNU Lesser General Public
@@ -20,28 +30,9 @@
* *
* @category PHPExcel * @category PHPExcel
* @package PHPExcel_Cell * @package PHPExcel_Cell
* @copyright Copyright (c) 2006 - 2014 PHPExcel (http://www.codeplex.com/PHPExcel) * @copyright Copyright (c) 2006 - 2015 PHPExcel (http://www.codeplex.com/PHPExcel)
* @license http://www.gnu.org/licenses/old-licenses/lgpl-2.1.txt LGPL * @license http://www.gnu.org/licenses/old-licenses/lgpl-2.1.txt LGPL
* @version 1.8.0, 2014-03-02 * @version ##VERSION##, ##DATE##
*/
/** PHPExcel root directory */
if (!defined('PHPEXCEL_ROOT')) {
/**
* @ignore
*/
define('PHPEXCEL_ROOT', dirname(__FILE__) . '/../../');
require(PHPEXCEL_ROOT . 'PHPExcel/Autoloader.php');
}
/**
* PHPExcel_Cell_AdvancedValueBinder
*
* @category PHPExcel
* @package PHPExcel_Cell
* @copyright Copyright (c) 2006 - 2014 PHPExcel (http://www.codeplex.com/PHPExcel)
*/ */
class PHPExcel_Cell_AdvancedValueBinder extends PHPExcel_Cell_DefaultValueBinder implements PHPExcel_Cell_IValueBinder class PHPExcel_Cell_AdvancedValueBinder extends PHPExcel_Cell_DefaultValueBinder implements PHPExcel_Cell_IValueBinder
{ {
@@ -66,16 +57,16 @@ class PHPExcel_Cell_AdvancedValueBinder extends PHPExcel_Cell_DefaultValueBinder
if ($dataType === PHPExcel_Cell_DataType::TYPE_STRING && !$value instanceof PHPExcel_RichText) { if ($dataType === PHPExcel_Cell_DataType::TYPE_STRING && !$value instanceof PHPExcel_RichText) {
// Test for booleans using locale-setting // Test for booleans using locale-setting
if ($value == PHPExcel_Calculation::getTRUE()) { if ($value == PHPExcel_Calculation::getTRUE()) {
$cell->setValueExplicit( TRUE, PHPExcel_Cell_DataType::TYPE_BOOL); $cell->setValueExplicit(true, PHPExcel_Cell_DataType::TYPE_BOOL);
return true; return true;
} elseif($value == PHPExcel_Calculation::getFALSE()) { } elseif ($value == PHPExcel_Calculation::getFALSE()) {
$cell->setValueExplicit( FALSE, PHPExcel_Cell_DataType::TYPE_BOOL); $cell->setValueExplicit(false, PHPExcel_Cell_DataType::TYPE_BOOL);
return true; return true;
} }
// Check for number in scientific format // Check for number in scientific format
if (preg_match('/^'.PHPExcel_Calculation::CALCULATION_REGEXP_NUMBER.'$/', $value)) { if (preg_match('/^'.PHPExcel_Calculation::CALCULATION_REGEXP_NUMBER.'$/', $value)) {
$cell->setValueExplicit( (float) $value, PHPExcel_Cell_DataType::TYPE_NUMERIC); $cell->setValueExplicit((float) $value, PHPExcel_Cell_DataType::TYPE_NUMERIC);
return true; return true;
} }
@@ -83,20 +74,24 @@ class PHPExcel_Cell_AdvancedValueBinder extends PHPExcel_Cell_DefaultValueBinder
if (preg_match('/^([+-]?)\s*([0-9]+)\s?\/\s*([0-9]+)$/', $value, $matches)) { if (preg_match('/^([+-]?)\s*([0-9]+)\s?\/\s*([0-9]+)$/', $value, $matches)) {
// Convert value to number // Convert value to number
$value = $matches[2] / $matches[3]; $value = $matches[2] / $matches[3];
if ($matches[1] == '-') $value = 0 - $value; if ($matches[1] == '-') {
$cell->setValueExplicit( (float) $value, PHPExcel_Cell_DataType::TYPE_NUMERIC); $value = 0 - $value;
}
$cell->setValueExplicit((float) $value, PHPExcel_Cell_DataType::TYPE_NUMERIC);
// Set style // Set style
$cell->getWorksheet()->getStyle( $cell->getCoordinate() ) $cell->getWorksheet()->getStyle($cell->getCoordinate())
->getNumberFormat()->setFormatCode( '??/??' ); ->getNumberFormat()->setFormatCode('??/??');
return true; return true;
} elseif (preg_match('/^([+-]?)([0-9]*) +([0-9]*)\s?\/\s*([0-9]*)$/', $value, $matches)) { } elseif (preg_match('/^([+-]?)([0-9]*) +([0-9]*)\s?\/\s*([0-9]*)$/', $value, $matches)) {
// Convert value to number // Convert value to number
$value = $matches[2] + ($matches[3] / $matches[4]); $value = $matches[2] + ($matches[3] / $matches[4]);
if ($matches[1] == '-') $value = 0 - $value; if ($matches[1] == '-') {
$cell->setValueExplicit( (float) $value, PHPExcel_Cell_DataType::TYPE_NUMERIC); $value = 0 - $value;
}
$cell->setValueExplicit((float) $value, PHPExcel_Cell_DataType::TYPE_NUMERIC);
// Set style // Set style
$cell->getWorksheet()->getStyle( $cell->getCoordinate() ) $cell->getWorksheet()->getStyle($cell->getCoordinate())
->getNumberFormat()->setFormatCode( '# ??/??' ); ->getNumberFormat()->setFormatCode('# ??/??');
return true; return true;
} }
@@ -104,10 +99,10 @@ class PHPExcel_Cell_AdvancedValueBinder extends PHPExcel_Cell_DefaultValueBinder
if (preg_match('/^\-?[0-9]*\.?[0-9]*\s?\%$/', $value)) { if (preg_match('/^\-?[0-9]*\.?[0-9]*\s?\%$/', $value)) {
// Convert value to number // Convert value to number
$value = (float) str_replace('%', '', $value) / 100; $value = (float) str_replace('%', '', $value) / 100;
$cell->setValueExplicit( $value, PHPExcel_Cell_DataType::TYPE_NUMERIC); $cell->setValueExplicit($value, PHPExcel_Cell_DataType::TYPE_NUMERIC);
// Set style // Set style
$cell->getWorksheet()->getStyle( $cell->getCoordinate() ) $cell->getWorksheet()->getStyle($cell->getCoordinate())
->getNumberFormat()->setFormatCode( PHPExcel_Style_NumberFormat::FORMAT_PERCENTAGE_00 ); ->getNumberFormat()->setFormatCode(PHPExcel_Style_NumberFormat::FORMAT_PERCENTAGE_00);
return true; return true;
} }
@@ -118,20 +113,20 @@ class PHPExcel_Cell_AdvancedValueBinder extends PHPExcel_Cell_DefaultValueBinder
if (preg_match('/^'.preg_quote($currencyCode).' *(\d{1,3}('.preg_quote($thousandsSeparator).'\d{3})*|(\d+))('.preg_quote($decimalSeparator).'\d{2})?$/', $value)) { if (preg_match('/^'.preg_quote($currencyCode).' *(\d{1,3}('.preg_quote($thousandsSeparator).'\d{3})*|(\d+))('.preg_quote($decimalSeparator).'\d{2})?$/', $value)) {
// Convert value to number // Convert value to number
$value = (float) trim(str_replace(array($currencyCode, $thousandsSeparator, $decimalSeparator), array('', '', '.'), $value)); $value = (float) trim(str_replace(array($currencyCode, $thousandsSeparator, $decimalSeparator), array('', '', '.'), $value));
$cell->setValueExplicit( $value, PHPExcel_Cell_DataType::TYPE_NUMERIC); $cell->setValueExplicit($value, PHPExcel_Cell_DataType::TYPE_NUMERIC);
// Set style // Set style
$cell->getWorksheet()->getStyle( $cell->getCoordinate() ) $cell->getWorksheet()->getStyle($cell->getCoordinate())
->getNumberFormat()->setFormatCode( ->getNumberFormat()->setFormatCode(
str_replace('$', $currencyCode, PHPExcel_Style_NumberFormat::FORMAT_CURRENCY_USD_SIMPLE ) str_replace('$', $currencyCode, PHPExcel_Style_NumberFormat::FORMAT_CURRENCY_USD_SIMPLE)
); );
return true; return true;
} elseif (preg_match('/^\$ *(\d{1,3}(\,\d{3})*|(\d+))(\.\d{2})?$/', $value)) { } elseif (preg_match('/^\$ *(\d{1,3}(\,\d{3})*|(\d+))(\.\d{2})?$/', $value)) {
// Convert value to number // Convert value to number
$value = (float) trim(str_replace(array('$',','), '', $value)); $value = (float) trim(str_replace(array('$',','), '', $value));
$cell->setValueExplicit( $value, PHPExcel_Cell_DataType::TYPE_NUMERIC); $cell->setValueExplicit($value, PHPExcel_Cell_DataType::TYPE_NUMERIC);
// Set style // Set style
$cell->getWorksheet()->getStyle( $cell->getCoordinate() ) $cell->getWorksheet()->getStyle($cell->getCoordinate())
->getNumberFormat()->setFormatCode( PHPExcel_Style_NumberFormat::FORMAT_CURRENCY_USD_SIMPLE ); ->getNumberFormat()->setFormatCode(PHPExcel_Style_NumberFormat::FORMAT_CURRENCY_USD_SIMPLE);
return true; return true;
} }
@@ -142,8 +137,8 @@ class PHPExcel_Cell_AdvancedValueBinder extends PHPExcel_Cell_DefaultValueBinder
$days = $h / 24 + $m / 1440; $days = $h / 24 + $m / 1440;
$cell->setValueExplicit($days, PHPExcel_Cell_DataType::TYPE_NUMERIC); $cell->setValueExplicit($days, PHPExcel_Cell_DataType::TYPE_NUMERIC);
// Set style // Set style
$cell->getWorksheet()->getStyle( $cell->getCoordinate() ) $cell->getWorksheet()->getStyle($cell->getCoordinate())
->getNumberFormat()->setFormatCode( PHPExcel_Style_NumberFormat::FORMAT_DATE_TIME3 ); ->getNumberFormat()->setFormatCode(PHPExcel_Style_NumberFormat::FORMAT_DATE_TIME3);
return true; return true;
} }
@@ -155,8 +150,8 @@ class PHPExcel_Cell_AdvancedValueBinder extends PHPExcel_Cell_DefaultValueBinder
// Convert value to number // Convert value to number
$cell->setValueExplicit($days, PHPExcel_Cell_DataType::TYPE_NUMERIC); $cell->setValueExplicit($days, PHPExcel_Cell_DataType::TYPE_NUMERIC);
// Set style // Set style
$cell->getWorksheet()->getStyle( $cell->getCoordinate() ) $cell->getWorksheet()->getStyle($cell->getCoordinate())
->getNumberFormat()->setFormatCode( PHPExcel_Style_NumberFormat::FORMAT_DATE_TIME4 ); ->getNumberFormat()->setFormatCode(PHPExcel_Style_NumberFormat::FORMAT_DATE_TIME4);
return true; return true;
} }
@@ -170,18 +165,18 @@ class PHPExcel_Cell_AdvancedValueBinder extends PHPExcel_Cell_DefaultValueBinder
} else { } else {
$formatCode = 'yyyy-mm-dd'; $formatCode = 'yyyy-mm-dd';
} }
$cell->getWorksheet()->getStyle( $cell->getCoordinate() ) $cell->getWorksheet()->getStyle($cell->getCoordinate())
->getNumberFormat()->setFormatCode($formatCode); ->getNumberFormat()->setFormatCode($formatCode);
return true; return true;
} }
// Check for newline character "\n" // Check for newline character "\n"
if (strpos($value, "\n") !== FALSE) { if (strpos($value, "\n") !== false) {
$value = PHPExcel_Shared_String::SanitizeUTF8($value); $value = PHPExcel_Shared_String::SanitizeUTF8($value);
$cell->setValueExplicit($value, PHPExcel_Cell_DataType::TYPE_STRING); $cell->setValueExplicit($value, PHPExcel_Cell_DataType::TYPE_STRING);
// Set style // Set style
$cell->getWorksheet()->getStyle( $cell->getCoordinate() ) $cell->getWorksheet()->getStyle($cell->getCoordinate())
->getAlignment()->setWrapText(TRUE); ->getAlignment()->setWrapText(true);
return true; return true;
} }
} }

View File

@@ -1,8 +1,9 @@
<?php <?php
/** /**
* PHPExcel * PHPExcel_Cell_DataType
* *
* Copyright (c) 2006 - 2014 PHPExcel * Copyright (c) 2006 - 2015 PHPExcel
* *
* This library is free software; you can redistribute it and/or * This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public * modify it under the terms of the GNU Lesser General Public
@@ -20,18 +21,9 @@
* *
* @category PHPExcel * @category PHPExcel
* @package PHPExcel_Cell * @package PHPExcel_Cell
* @copyright Copyright (c) 2006 - 2014 PHPExcel (http://www.codeplex.com/PHPExcel) * @copyright Copyright (c) 2006 - 2015 PHPExcel (http://www.codeplex.com/PHPExcel)
* @license http://www.gnu.org/licenses/old-licenses/lgpl-2.1.txt LGPL * @license http://www.gnu.org/licenses/old-licenses/lgpl-2.1.txt LGPL
* @version 1.8.0, 2014-03-02 * @version ##VERSION##, ##DATE##
*/
/**
* PHPExcel_Cell_DataType
*
* @category PHPExcel
* @package PHPExcel_Cell
* @copyright Copyright (c) 2006 - 2014 PHPExcel (http://www.codeplex.com/PHPExcel)
*/ */
class PHPExcel_Cell_DataType class PHPExcel_Cell_DataType
{ {
@@ -50,7 +42,7 @@ class PHPExcel_Cell_DataType
* *
* @var array * @var array
*/ */
private static $_errorCodes = array( private static $errorCodes = array(
'#NULL!' => 0, '#NULL!' => 0,
'#DIV/0!' => 1, '#DIV/0!' => 1,
'#VALUE!' => 2, '#VALUE!' => 2,
@@ -65,8 +57,9 @@ class PHPExcel_Cell_DataType
* *
* @return array * @return array
*/ */
public static function getErrorCodes() { public static function getErrorCodes()
return self::$_errorCodes; {
return self::$errorCodes;
} }
/** /**
@@ -76,7 +69,8 @@ class PHPExcel_Cell_DataType
* @param mixed $pValue * @param mixed $pValue
* @return string * @return string
*/ */
public static function dataTypeForValue($pValue = null) { public static function dataTypeForValue($pValue = null)
{
return PHPExcel_Cell_DefaultValueBinder::dataTypeForValue($pValue); return PHPExcel_Cell_DefaultValueBinder::dataTypeForValue($pValue);
} }
@@ -112,11 +106,10 @@ class PHPExcel_Cell_DataType
{ {
$pValue = (string) $pValue; $pValue = (string) $pValue;
if ( !array_key_exists($pValue, self::$_errorCodes) ) { if (!array_key_exists($pValue, self::$errorCodes)) {
$pValue = '#NULL!'; $pValue = '#NULL!';
} }
return $pValue; return $pValue;
} }
} }

View File

@@ -1,8 +1,9 @@
<?php <?php
/** /**
* PHPExcel * PHPExcel_Cell_DataValidation
* *
* Copyright (c) 2006 - 2014 PHPExcel * Copyright (c) 2006 - 2015 PHPExcel
* *
* This library is free software; you can redistribute it and/or * This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public * modify it under the terms of the GNU Lesser General Public
@@ -20,18 +21,9 @@
* *
* @category PHPExcel * @category PHPExcel
* @package PHPExcel_Cell * @package PHPExcel_Cell
* @copyright Copyright (c) 2006 - 2014 PHPExcel (http://www.codeplex.com/PHPExcel) * @copyright Copyright (c) 2006 - 2015 PHPExcel (http://www.codeplex.com/PHPExcel)
* @license http://www.gnu.org/licenses/old-licenses/lgpl-2.1.txt LGPL * @license http://www.gnu.org/licenses/old-licenses/lgpl-2.1.txt LGPL
* @version 1.8.0, 2014-03-02 * @version ##VERSION##, ##DATE##
*/
/**
* PHPExcel_Cell_DataValidation
*
* @category PHPExcel
* @package PHPExcel_Cell
* @copyright Copyright (c) 2006 - 2014 PHPExcel (http://www.codeplex.com/PHPExcel)
*/ */
class PHPExcel_Cell_DataValidation class PHPExcel_Cell_DataValidation
{ {
@@ -65,91 +57,91 @@ class PHPExcel_Cell_DataValidation
* *
* @var string * @var string
*/ */
private $_formula1; private $formula1;
/** /**
* Formula 2 * Formula 2
* *
* @var string * @var string
*/ */
private $_formula2; private $formula2;
/** /**
* Type * Type
* *
* @var string * @var string
*/ */
private $_type = PHPExcel_Cell_DataValidation::TYPE_NONE; private $type = PHPExcel_Cell_DataValidation::TYPE_NONE;
/** /**
* Error style * Error style
* *
* @var string * @var string
*/ */
private $_errorStyle = PHPExcel_Cell_DataValidation::STYLE_STOP; private $errorStyle = PHPExcel_Cell_DataValidation::STYLE_STOP;
/** /**
* Operator * Operator
* *
* @var string * @var string
*/ */
private $_operator; private $operator;
/** /**
* Allow Blank * Allow Blank
* *
* @var boolean * @var boolean
*/ */
private $_allowBlank; private $allowBlank;
/** /**
* Show DropDown * Show DropDown
* *
* @var boolean * @var boolean
*/ */
private $_showDropDown; private $showDropDown;
/** /**
* Show InputMessage * Show InputMessage
* *
* @var boolean * @var boolean
*/ */
private $_showInputMessage; private $showInputMessage;
/** /**
* Show ErrorMessage * Show ErrorMessage
* *
* @var boolean * @var boolean
*/ */
private $_showErrorMessage; private $showErrorMessage;
/** /**
* Error title * Error title
* *
* @var string * @var string
*/ */
private $_errorTitle; private $errorTitle;
/** /**
* Error * Error
* *
* @var string * @var string
*/ */
private $_error; private $error;
/** /**
* Prompt title * Prompt title
* *
* @var string * @var string
*/ */
private $_promptTitle; private $promptTitle;
/** /**
* Prompt * Prompt
* *
* @var string * @var string
*/ */
private $_prompt; private $prompt;
/** /**
* Create a new PHPExcel_Cell_DataValidation * Create a new PHPExcel_Cell_DataValidation
@@ -157,19 +149,19 @@ class PHPExcel_Cell_DataValidation
public function __construct() public function __construct()
{ {
// Initialise member variables // Initialise member variables
$this->_formula1 = ''; $this->formula1 = '';
$this->_formula2 = ''; $this->formula2 = '';
$this->_type = PHPExcel_Cell_DataValidation::TYPE_NONE; $this->type = PHPExcel_Cell_DataValidation::TYPE_NONE;
$this->_errorStyle = PHPExcel_Cell_DataValidation::STYLE_STOP; $this->errorStyle = PHPExcel_Cell_DataValidation::STYLE_STOP;
$this->_operator = ''; $this->operator = '';
$this->_allowBlank = FALSE; $this->allowBlank = false;
$this->_showDropDown = FALSE; $this->showDropDown = false;
$this->_showInputMessage = FALSE; $this->showInputMessage = false;
$this->_showErrorMessage = FALSE; $this->showErrorMessage = false;
$this->_errorTitle = ''; $this->errorTitle = '';
$this->_error = ''; $this->error = '';
$this->_promptTitle = ''; $this->promptTitle = '';
$this->_prompt = ''; $this->prompt = '';
} }
/** /**
@@ -177,8 +169,9 @@ class PHPExcel_Cell_DataValidation
* *
* @return string * @return string
*/ */
public function getFormula1() { public function getFormula1()
return $this->_formula1; {
return $this->formula1;
} }
/** /**
@@ -187,8 +180,9 @@ class PHPExcel_Cell_DataValidation
* @param string $value * @param string $value
* @return PHPExcel_Cell_DataValidation * @return PHPExcel_Cell_DataValidation
*/ */
public function setFormula1($value = '') { public function setFormula1($value = '')
$this->_formula1 = $value; {
$this->formula1 = $value;
return $this; return $this;
} }
@@ -197,8 +191,9 @@ class PHPExcel_Cell_DataValidation
* *
* @return string * @return string
*/ */
public function getFormula2() { public function getFormula2()
return $this->_formula2; {
return $this->formula2;
} }
/** /**
@@ -207,8 +202,9 @@ class PHPExcel_Cell_DataValidation
* @param string $value * @param string $value
* @return PHPExcel_Cell_DataValidation * @return PHPExcel_Cell_DataValidation
*/ */
public function setFormula2($value = '') { public function setFormula2($value = '')
$this->_formula2 = $value; {
$this->formula2 = $value;
return $this; return $this;
} }
@@ -217,8 +213,9 @@ class PHPExcel_Cell_DataValidation
* *
* @return string * @return string
*/ */
public function getType() { public function getType()
return $this->_type; {
return $this->type;
} }
/** /**
@@ -227,8 +224,9 @@ class PHPExcel_Cell_DataValidation
* @param string $value * @param string $value
* @return PHPExcel_Cell_DataValidation * @return PHPExcel_Cell_DataValidation
*/ */
public function setType($value = PHPExcel_Cell_DataValidation::TYPE_NONE) { public function setType($value = PHPExcel_Cell_DataValidation::TYPE_NONE)
$this->_type = $value; {
$this->type = $value;
return $this; return $this;
} }
@@ -237,8 +235,9 @@ class PHPExcel_Cell_DataValidation
* *
* @return string * @return string
*/ */
public function getErrorStyle() { public function getErrorStyle()
return $this->_errorStyle; {
return $this->errorStyle;
} }
/** /**
@@ -247,8 +246,9 @@ class PHPExcel_Cell_DataValidation
* @param string $value * @param string $value
* @return PHPExcel_Cell_DataValidation * @return PHPExcel_Cell_DataValidation
*/ */
public function setErrorStyle($value = PHPExcel_Cell_DataValidation::STYLE_STOP) { public function setErrorStyle($value = PHPExcel_Cell_DataValidation::STYLE_STOP)
$this->_errorStyle = $value; {
$this->errorStyle = $value;
return $this; return $this;
} }
@@ -257,8 +257,9 @@ class PHPExcel_Cell_DataValidation
* *
* @return string * @return string
*/ */
public function getOperator() { public function getOperator()
return $this->_operator; {
return $this->operator;
} }
/** /**
@@ -267,8 +268,9 @@ class PHPExcel_Cell_DataValidation
* @param string $value * @param string $value
* @return PHPExcel_Cell_DataValidation * @return PHPExcel_Cell_DataValidation
*/ */
public function setOperator($value = '') { public function setOperator($value = '')
$this->_operator = $value; {
$this->operator = $value;
return $this; return $this;
} }
@@ -277,8 +279,9 @@ class PHPExcel_Cell_DataValidation
* *
* @return boolean * @return boolean
*/ */
public function getAllowBlank() { public function getAllowBlank()
return $this->_allowBlank; {
return $this->allowBlank;
} }
/** /**
@@ -287,8 +290,9 @@ class PHPExcel_Cell_DataValidation
* @param boolean $value * @param boolean $value
* @return PHPExcel_Cell_DataValidation * @return PHPExcel_Cell_DataValidation
*/ */
public function setAllowBlank($value = false) { public function setAllowBlank($value = false)
$this->_allowBlank = $value; {
$this->allowBlank = $value;
return $this; return $this;
} }
@@ -297,8 +301,9 @@ class PHPExcel_Cell_DataValidation
* *
* @return boolean * @return boolean
*/ */
public function getShowDropDown() { public function getShowDropDown()
return $this->_showDropDown; {
return $this->showDropDown;
} }
/** /**
@@ -307,8 +312,9 @@ class PHPExcel_Cell_DataValidation
* @param boolean $value * @param boolean $value
* @return PHPExcel_Cell_DataValidation * @return PHPExcel_Cell_DataValidation
*/ */
public function setShowDropDown($value = false) { public function setShowDropDown($value = false)
$this->_showDropDown = $value; {
$this->showDropDown = $value;
return $this; return $this;
} }
@@ -317,8 +323,9 @@ class PHPExcel_Cell_DataValidation
* *
* @return boolean * @return boolean
*/ */
public function getShowInputMessage() { public function getShowInputMessage()
return $this->_showInputMessage; {
return $this->showInputMessage;
} }
/** /**
@@ -327,8 +334,9 @@ class PHPExcel_Cell_DataValidation
* @param boolean $value * @param boolean $value
* @return PHPExcel_Cell_DataValidation * @return PHPExcel_Cell_DataValidation
*/ */
public function setShowInputMessage($value = false) { public function setShowInputMessage($value = false)
$this->_showInputMessage = $value; {
$this->showInputMessage = $value;
return $this; return $this;
} }
@@ -337,8 +345,9 @@ class PHPExcel_Cell_DataValidation
* *
* @return boolean * @return boolean
*/ */
public function getShowErrorMessage() { public function getShowErrorMessage()
return $this->_showErrorMessage; {
return $this->showErrorMessage;
} }
/** /**
@@ -347,8 +356,9 @@ class PHPExcel_Cell_DataValidation
* @param boolean $value * @param boolean $value
* @return PHPExcel_Cell_DataValidation * @return PHPExcel_Cell_DataValidation
*/ */
public function setShowErrorMessage($value = false) { public function setShowErrorMessage($value = false)
$this->_showErrorMessage = $value; {
$this->showErrorMessage = $value;
return $this; return $this;
} }
@@ -357,8 +367,9 @@ class PHPExcel_Cell_DataValidation
* *
* @return string * @return string
*/ */
public function getErrorTitle() { public function getErrorTitle()
return $this->_errorTitle; {
return $this->errorTitle;
} }
/** /**
@@ -367,8 +378,9 @@ class PHPExcel_Cell_DataValidation
* @param string $value * @param string $value
* @return PHPExcel_Cell_DataValidation * @return PHPExcel_Cell_DataValidation
*/ */
public function setErrorTitle($value = '') { public function setErrorTitle($value = '')
$this->_errorTitle = $value; {
$this->errorTitle = $value;
return $this; return $this;
} }
@@ -377,8 +389,9 @@ class PHPExcel_Cell_DataValidation
* *
* @return string * @return string
*/ */
public function getError() { public function getError()
return $this->_error; {
return $this->error;
} }
/** /**
@@ -387,8 +400,9 @@ class PHPExcel_Cell_DataValidation
* @param string $value * @param string $value
* @return PHPExcel_Cell_DataValidation * @return PHPExcel_Cell_DataValidation
*/ */
public function setError($value = '') { public function setError($value = '')
$this->_error = $value; {
$this->error = $value;
return $this; return $this;
} }
@@ -397,8 +411,9 @@ class PHPExcel_Cell_DataValidation
* *
* @return string * @return string
*/ */
public function getPromptTitle() { public function getPromptTitle()
return $this->_promptTitle; {
return $this->promptTitle;
} }
/** /**
@@ -407,8 +422,9 @@ class PHPExcel_Cell_DataValidation
* @param string $value * @param string $value
* @return PHPExcel_Cell_DataValidation * @return PHPExcel_Cell_DataValidation
*/ */
public function setPromptTitle($value = '') { public function setPromptTitle($value = '')
$this->_promptTitle = $value; {
$this->promptTitle = $value;
return $this; return $this;
} }
@@ -417,8 +433,9 @@ class PHPExcel_Cell_DataValidation
* *
* @return string * @return string
*/ */
public function getPrompt() { public function getPrompt()
return $this->_prompt; {
return $this->prompt;
} }
/** /**
@@ -427,8 +444,9 @@ class PHPExcel_Cell_DataValidation
* @param string $value * @param string $value
* @return PHPExcel_Cell_DataValidation * @return PHPExcel_Cell_DataValidation
*/ */
public function setPrompt($value = '') { public function setPrompt($value = '')
$this->_prompt = $value; {
$this->prompt = $value;
return $this; return $this;
} }
@@ -437,29 +455,31 @@ class PHPExcel_Cell_DataValidation
* *
* @return string Hash code * @return string Hash code
*/ */
public function getHashCode() { public function getHashCode()
{
return md5( return md5(
$this->_formula1 $this->formula1 .
. $this->_formula2 $this->formula2 .
. $this->_type = PHPExcel_Cell_DataValidation::TYPE_NONE $this->type = PHPExcel_Cell_DataValidation::TYPE_NONE .
. $this->_errorStyle = PHPExcel_Cell_DataValidation::STYLE_STOP $this->errorStyle = PHPExcel_Cell_DataValidation::STYLE_STOP .
. $this->_operator $this->operator .
. ($this->_allowBlank ? 't' : 'f') ($this->allowBlank ? 't' : 'f') .
. ($this->_showDropDown ? 't' : 'f') ($this->showDropDown ? 't' : 'f') .
. ($this->_showInputMessage ? 't' : 'f') ($this->showInputMessage ? 't' : 'f') .
. ($this->_showErrorMessage ? 't' : 'f') ($this->showErrorMessage ? 't' : 'f') .
. $this->_errorTitle $this->errorTitle .
. $this->_error $this->error .
. $this->_promptTitle $this->promptTitle .
. $this->_prompt $this->prompt .
. __CLASS__ __CLASS__
); );
} }
/** /**
* Implement PHP __clone to create a deep clone, not just a shallow copy. * Implement PHP __clone to create a deep clone, not just a shallow copy.
*/ */
public function __clone() { public function __clone()
{
$vars = get_object_vars($this); $vars = get_object_vars($this);
foreach ($vars as $key => $value) { foreach ($vars as $key => $value) {
if (is_object($value)) { if (is_object($value)) {

View File

@@ -1,8 +1,18 @@
<?php <?php
/** PHPExcel root directory */
if (!defined('PHPEXCEL_ROOT')) {
/**
* @ignore
*/
define('PHPEXCEL_ROOT', dirname(__FILE__) . '/../../');
require(PHPEXCEL_ROOT . 'PHPExcel/Autoloader.php');
}
/** /**
* PHPExcel * PHPExcel_Cell_DefaultValueBinder
* *
* Copyright (c) 2006 - 2014 PHPExcel * Copyright (c) 2006 - 2015 PHPExcel
* *
* This library is free software; you can redistribute it and/or * This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public * modify it under the terms of the GNU Lesser General Public
@@ -20,28 +30,9 @@
* *
* @category PHPExcel * @category PHPExcel
* @package PHPExcel_Cell * @package PHPExcel_Cell
* @copyright Copyright (c) 2006 - 2014 PHPExcel (http://www.codeplex.com/PHPExcel) * @copyright Copyright (c) 2006 - 2015 PHPExcel (http://www.codeplex.com/PHPExcel)
* @license http://www.gnu.org/licenses/old-licenses/lgpl-2.1.txt LGPL * @license http://www.gnu.org/licenses/old-licenses/lgpl-2.1.txt LGPL
* @version 1.8.0, 2014-03-02 * @version ##VERSION##, ##DATE##
*/
/** PHPExcel root directory */
if (!defined('PHPEXCEL_ROOT')) {
/**
* @ignore
*/
define('PHPEXCEL_ROOT', dirname(__FILE__) . '/../../');
require(PHPEXCEL_ROOT . 'PHPExcel/Autoloader.php');
}
/**
* PHPExcel_Cell_DefaultValueBinder
*
* @category PHPExcel
* @package PHPExcel_Cell
* @copyright Copyright (c) 2006 - 2014 PHPExcel (http://www.codeplex.com/PHPExcel)
*/ */
class PHPExcel_Cell_DefaultValueBinder implements PHPExcel_Cell_IValueBinder class PHPExcel_Cell_DefaultValueBinder implements PHPExcel_Cell_IValueBinder
{ {
@@ -57,13 +48,20 @@ class PHPExcel_Cell_DefaultValueBinder implements PHPExcel_Cell_IValueBinder
// sanitize UTF-8 strings // sanitize UTF-8 strings
if (is_string($value)) { if (is_string($value)) {
$value = PHPExcel_Shared_String::SanitizeUTF8($value); $value = PHPExcel_Shared_String::SanitizeUTF8($value);
} elseif (is_object($value)) {
// Handle any objects that might be injected
if ($value instanceof DateTime) {
$value = $value->format('Y-m-d H:i:s');
} elseif (!($value instanceof PHPExcel_RichText)) {
$value = (string) $value;
}
} }
// Set value explicit // Set value explicit
$cell->setValueExplicit( $value, self::dataTypeForValue($value) ); $cell->setValueExplicit($value, self::dataTypeForValue($value));
// Done! // Done!
return TRUE; return true;
} }
/** /**
@@ -72,35 +70,33 @@ class PHPExcel_Cell_DefaultValueBinder implements PHPExcel_Cell_IValueBinder
* @param mixed $pValue * @param mixed $pValue
* @return string * @return string
*/ */
public static function dataTypeForValue($pValue = null) { public static function dataTypeForValue($pValue = null)
{
// Match the value against a few data types // Match the value against a few data types
if (is_null($pValue)) { if ($pValue === null) {
return PHPExcel_Cell_DataType::TYPE_NULL; return PHPExcel_Cell_DataType::TYPE_NULL;
} elseif ($pValue === '') { } elseif ($pValue === '') {
return PHPExcel_Cell_DataType::TYPE_STRING; return PHPExcel_Cell_DataType::TYPE_STRING;
} elseif ($pValue instanceof PHPExcel_RichText) { } elseif ($pValue instanceof PHPExcel_RichText) {
return PHPExcel_Cell_DataType::TYPE_INLINE; return PHPExcel_Cell_DataType::TYPE_INLINE;
} elseif ($pValue{0} === '=' && strlen($pValue) > 1) { } elseif ($pValue{0} === '=' && strlen($pValue) > 1) {
return PHPExcel_Cell_DataType::TYPE_FORMULA; return PHPExcel_Cell_DataType::TYPE_FORMULA;
} elseif (is_bool($pValue)) { } elseif (is_bool($pValue)) {
return PHPExcel_Cell_DataType::TYPE_BOOL; return PHPExcel_Cell_DataType::TYPE_BOOL;
} elseif (is_float($pValue) || is_int($pValue)) { } elseif (is_float($pValue) || is_int($pValue)) {
return PHPExcel_Cell_DataType::TYPE_NUMERIC; return PHPExcel_Cell_DataType::TYPE_NUMERIC;
} elseif (preg_match('/^[\+\-]?([0-9]+\\.?[0-9]*|[0-9]*\\.?[0-9]+)([Ee][\-\+]?[0-2]?\d{1,3})?$/', $pValue)) {
} elseif (preg_match('/^\-?([0-9]+\\.?[0-9]*|[0-9]*\\.?[0-9]+)$/', $pValue)) { $tValue = ltrim($pValue, '+-');
if (is_string($pValue) && $tValue{0} === '0' && strlen($tValue) > 1 && $tValue{1} !== '.') {
return PHPExcel_Cell_DataType::TYPE_STRING;
} elseif ((strpos($pValue, '.') === false) && ($pValue > PHP_INT_MAX)) {
return PHPExcel_Cell_DataType::TYPE_STRING;
}
return PHPExcel_Cell_DataType::TYPE_NUMERIC; return PHPExcel_Cell_DataType::TYPE_NUMERIC;
} elseif (is_string($pValue) && array_key_exists($pValue, PHPExcel_Cell_DataType::getErrorCodes())) { } elseif (is_string($pValue) && array_key_exists($pValue, PHPExcel_Cell_DataType::getErrorCodes())) {
return PHPExcel_Cell_DataType::TYPE_ERROR; return PHPExcel_Cell_DataType::TYPE_ERROR;
} else {
return PHPExcel_Cell_DataType::TYPE_STRING;
} }
return PHPExcel_Cell_DataType::TYPE_STRING;
} }
} }

View File

@@ -1,8 +1,9 @@
<?php <?php
/** /**
* PHPExcel * PHPExcel_Cell_Hyperlink
* *
* Copyright (c) 2006 - 2014 PHPExcel * Copyright (c) 2006 - 2015 PHPExcel
* *
* This library is free software; you can redistribute it and/or * This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public * modify it under the terms of the GNU Lesser General Public
@@ -20,18 +21,9 @@
* *
* @category PHPExcel * @category PHPExcel
* @package PHPExcel_Cell * @package PHPExcel_Cell
* @copyright Copyright (c) 2006 - 2014 PHPExcel (http://www.codeplex.com/PHPExcel) * @copyright Copyright (c) 2006 - 2015 PHPExcel (http://www.codeplex.com/PHPExcel)
* @license http://www.gnu.org/licenses/old-licenses/lgpl-2.1.txt LGPL * @license http://www.gnu.org/licenses/old-licenses/lgpl-2.1.txt LGPL
* @version 1.8.0, 2014-03-02 * @version ##VERSION##, ##DATE##
*/
/**
* PHPExcel_Cell_Hyperlink
*
* @category PHPExcel
* @package PHPExcel_Cell
* @copyright Copyright (c) 2006 - 2014 PHPExcel (http://www.codeplex.com/PHPExcel)
*/ */
class PHPExcel_Cell_Hyperlink class PHPExcel_Cell_Hyperlink
{ {
@@ -40,14 +32,14 @@ class PHPExcel_Cell_Hyperlink
* *
* @var string * @var string
*/ */
private $_url; private $url;
/** /**
* Tooltip to display on the hyperlink * Tooltip to display on the hyperlink
* *
* @var string * @var string
*/ */
private $_tooltip; private $tooltip;
/** /**
* Create a new PHPExcel_Cell_Hyperlink * Create a new PHPExcel_Cell_Hyperlink
@@ -58,8 +50,8 @@ class PHPExcel_Cell_Hyperlink
public function __construct($pUrl = '', $pTooltip = '') public function __construct($pUrl = '', $pTooltip = '')
{ {
// Initialise member variables // Initialise member variables
$this->_url = $pUrl; $this->url = $pUrl;
$this->_tooltip = $pTooltip; $this->tooltip = $pTooltip;
} }
/** /**
@@ -67,8 +59,9 @@ class PHPExcel_Cell_Hyperlink
* *
* @return string * @return string
*/ */
public function getUrl() { public function getUrl()
return $this->_url; {
return $this->url;
} }
/** /**
@@ -77,8 +70,9 @@ class PHPExcel_Cell_Hyperlink
* @param string $value * @param string $value
* @return PHPExcel_Cell_Hyperlink * @return PHPExcel_Cell_Hyperlink
*/ */
public function setUrl($value = '') { public function setUrl($value = '')
$this->_url = $value; {
$this->url = $value;
return $this; return $this;
} }
@@ -87,8 +81,9 @@ class PHPExcel_Cell_Hyperlink
* *
* @return string * @return string
*/ */
public function getTooltip() { public function getTooltip()
return $this->_tooltip; {
return $this->tooltip;
} }
/** /**
@@ -97,8 +92,9 @@ class PHPExcel_Cell_Hyperlink
* @param string $value * @param string $value
* @return PHPExcel_Cell_Hyperlink * @return PHPExcel_Cell_Hyperlink
*/ */
public function setTooltip($value = '') { public function setTooltip($value = '')
$this->_tooltip = $value; {
$this->tooltip = $value;
return $this; return $this;
} }
@@ -107,8 +103,9 @@ class PHPExcel_Cell_Hyperlink
* *
* @return boolean * @return boolean
*/ */
public function isInternal() { public function isInternal()
return strpos($this->_url, 'sheet://') !== false; {
return strpos($this->url, 'sheet://') !== false;
} }
/** /**
@@ -116,11 +113,12 @@ class PHPExcel_Cell_Hyperlink
* *
* @return string Hash code * @return string Hash code
*/ */
public function getHashCode() { public function getHashCode()
{
return md5( return md5(
$this->_url $this->url .
. $this->_tooltip $this->tooltip .
. __CLASS__ __CLASS__
); );
} }
} }

View File

@@ -1,8 +1,9 @@
<?php <?php
/** /**
* PHPExcel * PHPExcel
* *
* Copyright (c) 2006 - 2014 PHPExcel * Copyright (c) 2006 - 2015 PHPExcel
* *
* This library is free software; you can redistribute it and/or * This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public * modify it under the terms of the GNU Lesser General Public
@@ -20,9 +21,9 @@
* *
* @category PHPExcel * @category PHPExcel
* @package PHPExcel_Cell * @package PHPExcel_Cell
* @copyright Copyright (c) 2006 - 2014 PHPExcel (http://www.codeplex.com/PHPExcel) * @copyright Copyright (c) 2006 - 2015 PHPExcel (http://www.codeplex.com/PHPExcel)
* @license http://www.gnu.org/licenses/old-licenses/lgpl-2.1.txt LGPL * @license http://www.gnu.org/licenses/old-licenses/lgpl-2.1.txt LGPL
* @version 1.8.0, 2014-03-02 * @version ##VERSION##, ##DATE##
*/ */
@@ -31,7 +32,7 @@
* *
* @category PHPExcel * @category PHPExcel
* @package PHPExcel_Cell * @package PHPExcel_Cell
* @copyright Copyright (c) 2006 - 2014 PHPExcel (http://www.codeplex.com/PHPExcel) * @copyright Copyright (c) 2006 - 2015 PHPExcel (http://www.codeplex.com/PHPExcel)
*/ */
interface PHPExcel_Cell_IValueBinder interface PHPExcel_Cell_IValueBinder
{ {
@@ -42,5 +43,5 @@ interface PHPExcel_Cell_IValueBinder
* @param mixed $value Value to bind in cell * @param mixed $value Value to bind in cell
* @return boolean * @return boolean
*/ */
public function bindValue(PHPExcel_Cell $cell, $value = NULL); public function bindValue(PHPExcel_Cell $cell, $value = null);
} }

View File

@@ -1,8 +1,9 @@
<?php <?php
/** /**
* PHPExcel * PHPExcel_Chart
* *
* Copyright (c) 2006 - 2014 PHPExcel * Copyright (c) 2006 - 2015 PHPExcel
* *
* This library is free software; you can redistribute it and/or * This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public * modify it under the terms of the GNU Lesser General Public
@@ -20,18 +21,9 @@
* *
* @category PHPExcel * @category PHPExcel
* @package PHPExcel_Chart * @package PHPExcel_Chart
* @copyright Copyright (c) 2006 - 2014 PHPExcel (http://www.codeplex.com/PHPExcel) * @copyright Copyright (c) 2006 - 2015 PHPExcel (http://www.codeplex.com/PHPExcel)
* @license http://www.gnu.org/licenses/old-licenses/lgpl-2.1.txt LGPL * @license http://www.gnu.org/licenses/old-licenses/lgpl-2.1.txt LGPL
* @version 1.8.0, 2014-03-02 * @version ##VERSION##, ##DATE##
*/
/**
* PHPExcel_Chart
*
* @category PHPExcel
* @package PHPExcel_Chart
* @copyright Copyright (c) 2006 - 2014 PHPExcel (http://www.codeplex.com/PHPExcel)
*/ */
class PHPExcel_Chart class PHPExcel_Chart
{ {
@@ -40,71 +32,98 @@ class PHPExcel_Chart
* *
* @var string * @var string
*/ */
private $_name = ''; private $name = '';
/** /**
* Worksheet * Worksheet
* *
* @var PHPExcel_Worksheet * @var PHPExcel_Worksheet
*/ */
private $_worksheet = null; private $worksheet;
/** /**
* Chart Title * Chart Title
* *
* @var PHPExcel_Chart_Title * @var PHPExcel_Chart_Title
*/ */
private $_title = null; private $title;
/** /**
* Chart Legend * Chart Legend
* *
* @var PHPExcel_Chart_Legend * @var PHPExcel_Chart_Legend
*/ */
private $_legend = null; private $legend;
/** /**
* X-Axis Label * X-Axis Label
* *
* @var PHPExcel_Chart_Title * @var PHPExcel_Chart_Title
*/ */
private $_xAxisLabel = null; private $xAxisLabel;
/** /**
* Y-Axis Label * Y-Axis Label
* *
* @var PHPExcel_Chart_Title * @var PHPExcel_Chart_Title
*/ */
private $_yAxisLabel = null; private $yAxisLabel;
/** /**
* Chart Plot Area * Chart Plot Area
* *
* @var PHPExcel_Chart_PlotArea * @var PHPExcel_Chart_PlotArea
*/ */
private $_plotArea = null; private $plotArea;
/** /**
* Plot Visible Only * Plot Visible Only
* *
* @var boolean * @var boolean
*/ */
private $_plotVisibleOnly = true; private $plotVisibleOnly = true;
/** /**
* Display Blanks as * Display Blanks as
* *
* @var string * @var string
*/ */
private $_displayBlanksAs = '0'; private $displayBlanksAs = '0';
/**
* Chart Asix Y as
*
* @var PHPExcel_Chart_Axis
*/
private $yAxis;
/**
* Chart Asix X as
*
* @var PHPExcel_Chart_Axis
*/
private $xAxis;
/**
* Chart Major Gridlines as
*
* @var PHPExcel_Chart_GridLines
*/
private $majorGridlines;
/**
* Chart Minor Gridlines as
*
* @var PHPExcel_Chart_GridLines
*/
private $minorGridlines;
/** /**
* Top-Left Cell Position * Top-Left Cell Position
* *
* @var string * @var string
*/ */
private $_topLeftCellRef = 'A1'; private $topLeftCellRef = 'A1';
/** /**
@@ -112,7 +131,7 @@ class PHPExcel_Chart
* *
* @var integer * @var integer
*/ */
private $_topLeftXOffset = 0; private $topLeftXOffset = 0;
/** /**
@@ -120,7 +139,7 @@ class PHPExcel_Chart
* *
* @var integer * @var integer
*/ */
private $_topLeftYOffset = 0; private $topLeftYOffset = 0;
/** /**
@@ -128,7 +147,7 @@ class PHPExcel_Chart
* *
* @var string * @var string
*/ */
private $_bottomRightCellRef = 'A1'; private $bottomRightCellRef = 'A1';
/** /**
@@ -136,7 +155,7 @@ class PHPExcel_Chart
* *
* @var integer * @var integer
*/ */
private $_bottomRightXOffset = 10; private $bottomRightXOffset = 10;
/** /**
@@ -144,22 +163,26 @@ class PHPExcel_Chart
* *
* @var integer * @var integer
*/ */
private $_bottomRightYOffset = 10; private $bottomRightYOffset = 10;
/** /**
* Create a new PHPExcel_Chart * Create a new PHPExcel_Chart
*/ */
public function __construct($name, PHPExcel_Chart_Title $title = null, PHPExcel_Chart_Legend $legend = null, PHPExcel_Chart_PlotArea $plotArea = null, $plotVisibleOnly = true, $displayBlanksAs = '0', PHPExcel_Chart_Title $xAxisLabel = null, PHPExcel_Chart_Title $yAxisLabel = null) public function __construct($name, PHPExcel_Chart_Title $title = null, PHPExcel_Chart_Legend $legend = null, PHPExcel_Chart_PlotArea $plotArea = null, $plotVisibleOnly = true, $displayBlanksAs = '0', PHPExcel_Chart_Title $xAxisLabel = null, PHPExcel_Chart_Title $yAxisLabel = null, PHPExcel_Chart_Axis $xAxis = null, PHPExcel_Chart_Axis $yAxis = null, PHPExcel_Chart_GridLines $majorGridlines = null, PHPExcel_Chart_GridLines $minorGridlines = null)
{ {
$this->_name = $name; $this->name = $name;
$this->_title = $title; $this->title = $title;
$this->_legend = $legend; $this->legend = $legend;
$this->_xAxisLabel = $xAxisLabel; $this->xAxisLabel = $xAxisLabel;
$this->_yAxisLabel = $yAxisLabel; $this->yAxisLabel = $yAxisLabel;
$this->_plotArea = $plotArea; $this->plotArea = $plotArea;
$this->_plotVisibleOnly = $plotVisibleOnly; $this->plotVisibleOnly = $plotVisibleOnly;
$this->_displayBlanksAs = $displayBlanksAs; $this->displayBlanksAs = $displayBlanksAs;
$this->xAxis = $xAxis;
$this->yAxis = $yAxis;
$this->majorGridlines = $majorGridlines;
$this->minorGridlines = $minorGridlines;
} }
/** /**
@@ -167,8 +190,9 @@ class PHPExcel_Chart
* *
* @return string * @return string
*/ */
public function getName() { public function getName()
return $this->_name; {
return $this->name;
} }
/** /**
@@ -176,8 +200,9 @@ class PHPExcel_Chart
* *
* @return PHPExcel_Worksheet * @return PHPExcel_Worksheet
*/ */
public function getWorksheet() { public function getWorksheet()
return $this->_worksheet; {
return $this->worksheet;
} }
/** /**
@@ -187,8 +212,9 @@ class PHPExcel_Chart
* @throws PHPExcel_Chart_Exception * @throws PHPExcel_Chart_Exception
* @return PHPExcel_Chart * @return PHPExcel_Chart
*/ */
public function setWorksheet(PHPExcel_Worksheet $pValue = null) { public function setWorksheet(PHPExcel_Worksheet $pValue = null)
$this->_worksheet = $pValue; {
$this->worksheet = $pValue;
return $this; return $this;
} }
@@ -198,8 +224,9 @@ class PHPExcel_Chart
* *
* @return PHPExcel_Chart_Title * @return PHPExcel_Chart_Title
*/ */
public function getTitle() { public function getTitle()
return $this->_title; {
return $this->title;
} }
/** /**
@@ -208,8 +235,9 @@ class PHPExcel_Chart
* @param PHPExcel_Chart_Title $title * @param PHPExcel_Chart_Title $title
* @return PHPExcel_Chart * @return PHPExcel_Chart
*/ */
public function setTitle(PHPExcel_Chart_Title $title) { public function setTitle(PHPExcel_Chart_Title $title)
$this->_title = $title; {
$this->title = $title;
return $this; return $this;
} }
@@ -219,8 +247,9 @@ class PHPExcel_Chart
* *
* @return PHPExcel_Chart_Legend * @return PHPExcel_Chart_Legend
*/ */
public function getLegend() { public function getLegend()
return $this->_legend; {
return $this->legend;
} }
/** /**
@@ -229,8 +258,9 @@ class PHPExcel_Chart
* @param PHPExcel_Chart_Legend $legend * @param PHPExcel_Chart_Legend $legend
* @return PHPExcel_Chart * @return PHPExcel_Chart
*/ */
public function setLegend(PHPExcel_Chart_Legend $legend) { public function setLegend(PHPExcel_Chart_Legend $legend)
$this->_legend = $legend; {
$this->legend = $legend;
return $this; return $this;
} }
@@ -240,8 +270,9 @@ class PHPExcel_Chart
* *
* @return PHPExcel_Chart_Title * @return PHPExcel_Chart_Title
*/ */
public function getXAxisLabel() { public function getXAxisLabel()
return $this->_xAxisLabel; {
return $this->xAxisLabel;
} }
/** /**
@@ -250,8 +281,9 @@ class PHPExcel_Chart
* @param PHPExcel_Chart_Title $label * @param PHPExcel_Chart_Title $label
* @return PHPExcel_Chart * @return PHPExcel_Chart
*/ */
public function setXAxisLabel(PHPExcel_Chart_Title $label) { public function setXAxisLabel(PHPExcel_Chart_Title $label)
$this->_xAxisLabel = $label; {
$this->xAxisLabel = $label;
return $this; return $this;
} }
@@ -261,8 +293,9 @@ class PHPExcel_Chart
* *
* @return PHPExcel_Chart_Title * @return PHPExcel_Chart_Title
*/ */
public function getYAxisLabel() { public function getYAxisLabel()
return $this->_yAxisLabel; {
return $this->yAxisLabel;
} }
/** /**
@@ -271,8 +304,9 @@ class PHPExcel_Chart
* @param PHPExcel_Chart_Title $label * @param PHPExcel_Chart_Title $label
* @return PHPExcel_Chart * @return PHPExcel_Chart
*/ */
public function setYAxisLabel(PHPExcel_Chart_Title $label) { public function setYAxisLabel(PHPExcel_Chart_Title $label)
$this->_yAxisLabel = $label; {
$this->yAxisLabel = $label;
return $this; return $this;
} }
@@ -282,8 +316,9 @@ class PHPExcel_Chart
* *
* @return PHPExcel_Chart_PlotArea * @return PHPExcel_Chart_PlotArea
*/ */
public function getPlotArea() { public function getPlotArea()
return $this->_plotArea; {
return $this->plotArea;
} }
/** /**
@@ -291,8 +326,9 @@ class PHPExcel_Chart
* *
* @return boolean * @return boolean
*/ */
public function getPlotVisibleOnly() { public function getPlotVisibleOnly()
return $this->_plotVisibleOnly; {
return $this->plotVisibleOnly;
} }
/** /**
@@ -301,8 +337,9 @@ class PHPExcel_Chart
* @param boolean $plotVisibleOnly * @param boolean $plotVisibleOnly
* @return PHPExcel_Chart * @return PHPExcel_Chart
*/ */
public function setPlotVisibleOnly($plotVisibleOnly = true) { public function setPlotVisibleOnly($plotVisibleOnly = true)
$this->_plotVisibleOnly = $plotVisibleOnly; {
$this->plotVisibleOnly = $plotVisibleOnly;
return $this; return $this;
} }
@@ -312,8 +349,9 @@ class PHPExcel_Chart
* *
* @return string * @return string
*/ */
public function getDisplayBlanksAs() { public function getDisplayBlanksAs()
return $this->_displayBlanksAs; {
return $this->displayBlanksAs;
} }
/** /**
@@ -322,8 +360,66 @@ class PHPExcel_Chart
* @param string $displayBlanksAs * @param string $displayBlanksAs
* @return PHPExcel_Chart * @return PHPExcel_Chart
*/ */
public function setDisplayBlanksAs($displayBlanksAs = '0') { public function setDisplayBlanksAs($displayBlanksAs = '0')
$this->_displayBlanksAs = $displayBlanksAs; {
$this->displayBlanksAs = $displayBlanksAs;
}
/**
* Get yAxis
*
* @return PHPExcel_Chart_Axis
*/
public function getChartAxisY()
{
if ($this->yAxis !== null) {
return $this->yAxis;
}
return new PHPExcel_Chart_Axis();
}
/**
* Get xAxis
*
* @return PHPExcel_Chart_Axis
*/
public function getChartAxisX()
{
if ($this->xAxis !== null) {
return $this->xAxis;
}
return new PHPExcel_Chart_Axis();
}
/**
* Get Major Gridlines
*
* @return PHPExcel_Chart_GridLines
*/
public function getMajorGridlines()
{
if ($this->majorGridlines !== null) {
return $this->majorGridlines;
}
return new PHPExcel_Chart_GridLines();
}
/**
* Get Minor Gridlines
*
* @return PHPExcel_Chart_GridLines
*/
public function getMinorGridlines()
{
if ($this->minorGridlines !== null) {
return $this->minorGridlines;
}
return new PHPExcel_Chart_GridLines();
} }
@@ -335,12 +431,15 @@ class PHPExcel_Chart
* @param integer $yOffset * @param integer $yOffset
* @return PHPExcel_Chart * @return PHPExcel_Chart
*/ */
public function setTopLeftPosition($cell, $xOffset=null, $yOffset=null) { public function setTopLeftPosition($cell, $xOffset = null, $yOffset = null)
$this->_topLeftCellRef = $cell; {
if (!is_null($xOffset)) $this->topLeftCellRef = $cell;
if (!is_null($xOffset)) {
$this->setTopLeftXOffset($xOffset); $this->setTopLeftXOffset($xOffset);
if (!is_null($yOffset)) }
if (!is_null($yOffset)) {
$this->setTopLeftYOffset($yOffset); $this->setTopLeftYOffset($yOffset);
}
return $this; return $this;
} }
@@ -350,10 +449,12 @@ class PHPExcel_Chart
* *
* @return array an associative array containing the cell address, X-Offset and Y-Offset from the top left of that cell * @return array an associative array containing the cell address, X-Offset and Y-Offset from the top left of that cell
*/ */
public function getTopLeftPosition() { public function getTopLeftPosition()
return array( 'cell' => $this->_topLeftCellRef, {
'xOffset' => $this->_topLeftXOffset, return array(
'yOffset' => $this->_topLeftYOffset 'cell' => $this->topLeftCellRef,
'xOffset' => $this->topLeftXOffset,
'yOffset' => $this->topLeftYOffset
); );
} }
@@ -362,8 +463,9 @@ class PHPExcel_Chart
* *
* @return string * @return string
*/ */
public function getTopLeftCell() { public function getTopLeftCell()
return $this->_topLeftCellRef; {
return $this->topLeftCellRef;
} }
/** /**
@@ -372,8 +474,9 @@ class PHPExcel_Chart
* @param string $cell * @param string $cell
* @return PHPExcel_Chart * @return PHPExcel_Chart
*/ */
public function setTopLeftCell($cell) { public function setTopLeftCell($cell)
$this->_topLeftCellRef = $cell; {
$this->topLeftCellRef = $cell;
return $this; return $this;
} }
@@ -385,11 +488,14 @@ class PHPExcel_Chart
* @param integer $yOffset * @param integer $yOffset
* @return PHPExcel_Chart * @return PHPExcel_Chart
*/ */
public function setTopLeftOffset($xOffset=null,$yOffset=null) { public function setTopLeftOffset($xOffset = null, $yOffset = null)
if (!is_null($xOffset)) {
if (!is_null($xOffset)) {
$this->setTopLeftXOffset($xOffset); $this->setTopLeftXOffset($xOffset);
if (!is_null($yOffset)) }
if (!is_null($yOffset)) {
$this->setTopLeftYOffset($yOffset); $this->setTopLeftYOffset($yOffset);
}
return $this; return $this;
} }
@@ -399,30 +505,36 @@ class PHPExcel_Chart
* *
* @return integer[] * @return integer[]
*/ */
public function getTopLeftOffset() { public function getTopLeftOffset()
return array( 'X' => $this->_topLeftXOffset, {
'Y' => $this->_topLeftYOffset return array(
'X' => $this->topLeftXOffset,
'Y' => $this->topLeftYOffset
); );
} }
public function setTopLeftXOffset($xOffset) { public function setTopLeftXOffset($xOffset)
$this->_topLeftXOffset = $xOffset; {
$this->topLeftXOffset = $xOffset;
return $this; return $this;
} }
public function getTopLeftXOffset() { public function getTopLeftXOffset()
return $this->_topLeftXOffset; {
return $this->topLeftXOffset;
} }
public function setTopLeftYOffset($yOffset) { public function setTopLeftYOffset($yOffset)
$this->_topLeftYOffset = $yOffset; {
$this->topLeftYOffset = $yOffset;
return $this; return $this;
} }
public function getTopLeftYOffset() { public function getTopLeftYOffset()
return $this->_topLeftYOffset; {
return $this->topLeftYOffset;
} }
/** /**
@@ -433,12 +545,15 @@ class PHPExcel_Chart
* @param integer $yOffset * @param integer $yOffset
* @return PHPExcel_Chart * @return PHPExcel_Chart
*/ */
public function setBottomRightPosition($cell, $xOffset=null, $yOffset=null) { public function setBottomRightPosition($cell, $xOffset = null, $yOffset = null)
$this->_bottomRightCellRef = $cell; {
if (!is_null($xOffset)) $this->bottomRightCellRef = $cell;
if (!is_null($xOffset)) {
$this->setBottomRightXOffset($xOffset); $this->setBottomRightXOffset($xOffset);
if (!is_null($yOffset)) }
if (!is_null($yOffset)) {
$this->setBottomRightYOffset($yOffset); $this->setBottomRightYOffset($yOffset);
}
return $this; return $this;
} }
@@ -448,15 +563,18 @@ class PHPExcel_Chart
* *
* @return array an associative array containing the cell address, X-Offset and Y-Offset from the top left of that cell * @return array an associative array containing the cell address, X-Offset and Y-Offset from the top left of that cell
*/ */
public function getBottomRightPosition() { public function getBottomRightPosition()
return array( 'cell' => $this->_bottomRightCellRef, {
'xOffset' => $this->_bottomRightXOffset, return array(
'yOffset' => $this->_bottomRightYOffset 'cell' => $this->bottomRightCellRef,
'xOffset' => $this->bottomRightXOffset,
'yOffset' => $this->bottomRightYOffset
); );
} }
public function setBottomRightCell($cell) { public function setBottomRightCell($cell)
$this->_bottomRightCellRef = $cell; {
$this->bottomRightCellRef = $cell;
return $this; return $this;
} }
@@ -466,8 +584,9 @@ class PHPExcel_Chart
* *
* @return string * @return string
*/ */
public function getBottomRightCell() { public function getBottomRightCell()
return $this->_bottomRightCellRef; {
return $this->bottomRightCellRef;
} }
/** /**
@@ -477,11 +596,14 @@ class PHPExcel_Chart
* @param integer $yOffset * @param integer $yOffset
* @return PHPExcel_Chart * @return PHPExcel_Chart
*/ */
public function setBottomRightOffset($xOffset=null,$yOffset=null) { public function setBottomRightOffset($xOffset = null, $yOffset = null)
if (!is_null($xOffset)) {
if (!is_null($xOffset)) {
$this->setBottomRightXOffset($xOffset); $this->setBottomRightXOffset($xOffset);
if (!is_null($yOffset)) }
if (!is_null($yOffset)) {
$this->setBottomRightYOffset($yOffset); $this->setBottomRightYOffset($yOffset);
}
return $this; return $this;
} }
@@ -491,40 +613,48 @@ class PHPExcel_Chart
* *
* @return integer[] * @return integer[]
*/ */
public function getBottomRightOffset() { public function getBottomRightOffset()
return array( 'X' => $this->_bottomRightXOffset, {
'Y' => $this->_bottomRightYOffset return array(
'X' => $this->bottomRightXOffset,
'Y' => $this->bottomRightYOffset
); );
} }
public function setBottomRightXOffset($xOffset) { public function setBottomRightXOffset($xOffset)
$this->_bottomRightXOffset = $xOffset; {
$this->bottomRightXOffset = $xOffset;
return $this; return $this;
} }
public function getBottomRightXOffset() { public function getBottomRightXOffset()
return $this->_bottomRightXOffset; {
return $this->bottomRightXOffset;
} }
public function setBottomRightYOffset($yOffset) { public function setBottomRightYOffset($yOffset)
$this->_bottomRightYOffset = $yOffset; {
$this->bottomRightYOffset = $yOffset;
return $this; return $this;
} }
public function getBottomRightYOffset() { public function getBottomRightYOffset()
return $this->_bottomRightYOffset; {
return $this->bottomRightYOffset;
} }
public function refresh() { public function refresh()
if ($this->_worksheet !== NULL) { {
$this->_plotArea->refresh($this->_worksheet); if ($this->worksheet !== null) {
$this->plotArea->refresh($this->worksheet);
} }
} }
public function render($outputDestination = null) { public function render($outputDestination = null)
{
$libraryName = PHPExcel_Settings::getChartRendererName(); $libraryName = PHPExcel_Settings::getChartRendererName();
if (is_null($libraryName)) { if (is_null($libraryName)) {
return false; return false;
@@ -533,9 +663,9 @@ class PHPExcel_Chart
$this->refresh(); $this->refresh();
$libraryPath = PHPExcel_Settings::getChartRendererPath(); $libraryPath = PHPExcel_Settings::getChartRendererPath();
$includePath = str_replace('\\','/',get_include_path()); $includePath = str_replace('\\', '/', get_include_path());
$rendererPath = str_replace('\\','/',$libraryPath); $rendererPath = str_replace('\\', '/', $libraryPath);
if (strpos($rendererPath,$includePath) === false) { if (strpos($rendererPath, $includePath) === false) {
set_include_path(get_include_path() . PATH_SEPARATOR . $libraryPath); set_include_path(get_include_path() . PATH_SEPARATOR . $libraryPath);
} }
@@ -547,5 +677,4 @@ class PHPExcel_Chart
} }
return $renderer->render($outputDestination); return $renderer->render($outputDestination);
} }
} }

561
inc/PHPExcel/Chart/Axis.php Normal file
View File

@@ -0,0 +1,561 @@
<?php
/**
* Created by PhpStorm.
* User: Wiktor Trzonkowski
* Date: 6/17/14
* Time: 12:11 PM
*/
class PHPExcel_Chart_Axis extends PHPExcel_Chart_Properties
{
/**
* Axis Number
*
* @var array of mixed
*/
private $axisNumber = array(
'format' => self::FORMAT_CODE_GENERAL,
'source_linked' => 1
);
/**
* Axis Options
*
* @var array of mixed
*/
private $axisOptions = array(
'minimum' => null,
'maximum' => null,
'major_unit' => null,
'minor_unit' => null,
'orientation' => self::ORIENTATION_NORMAL,
'minor_tick_mark' => self::TICK_MARK_NONE,
'major_tick_mark' => self::TICK_MARK_NONE,
'axis_labels' => self::AXIS_LABELS_NEXT_TO,
'horizontal_crosses' => self::HORIZONTAL_CROSSES_AUTOZERO,
'horizontal_crosses_value' => null
);
/**
* Fill Properties
*
* @var array of mixed
*/
private $fillProperties = array(
'type' => self::EXCEL_COLOR_TYPE_ARGB,
'value' => null,
'alpha' => 0
);
/**
* Line Properties
*
* @var array of mixed
*/
private $lineProperties = array(
'type' => self::EXCEL_COLOR_TYPE_ARGB,
'value' => null,
'alpha' => 0
);
/**
* Line Style Properties
*
* @var array of mixed
*/
private $lineStyleProperties = array(
'width' => '9525',
'compound' => self::LINE_STYLE_COMPOUND_SIMPLE,
'dash' => self::LINE_STYLE_DASH_SOLID,
'cap' => self::LINE_STYLE_CAP_FLAT,
'join' => self::LINE_STYLE_JOIN_BEVEL,
'arrow' => array(
'head' => array(
'type' => self::LINE_STYLE_ARROW_TYPE_NOARROW,
'size' => self::LINE_STYLE_ARROW_SIZE_5
),
'end' => array(
'type' => self::LINE_STYLE_ARROW_TYPE_NOARROW,
'size' => self::LINE_STYLE_ARROW_SIZE_8
),
)
);
/**
* Shadow Properties
*
* @var array of mixed
*/
private $shadowProperties = array(
'presets' => self::SHADOW_PRESETS_NOSHADOW,
'effect' => null,
'color' => array(
'type' => self::EXCEL_COLOR_TYPE_STANDARD,
'value' => 'black',
'alpha' => 40,
),
'size' => array(
'sx' => null,
'sy' => null,
'kx' => null
),
'blur' => null,
'direction' => null,
'distance' => null,
'algn' => null,
'rotWithShape' => null
);
/**
* Glow Properties
*
* @var array of mixed
*/
private $glowProperties = array(
'size' => null,
'color' => array(
'type' => self::EXCEL_COLOR_TYPE_STANDARD,
'value' => 'black',
'alpha' => 40
)
);
/**
* Soft Edge Properties
*
* @var array of mixed
*/
private $softEdges = array(
'size' => null
);
/**
* Get Series Data Type
*
* @return string
*/
public function setAxisNumberProperties($format_code)
{
$this->axisNumber['format'] = (string) $format_code;
$this->axisNumber['source_linked'] = 0;
}
/**
* Get Axis Number Format Data Type
*
* @return string
*/
public function getAxisNumberFormat()
{
return $this->axisNumber['format'];
}
/**
* Get Axis Number Source Linked
*
* @return string
*/
public function getAxisNumberSourceLinked()
{
return (string) $this->axisNumber['source_linked'];
}
/**
* Set Axis Options Properties
*
* @param string $axis_labels
* @param string $horizontal_crosses_value
* @param string $horizontal_crosses
* @param string $axis_orientation
* @param string $major_tmt
* @param string $minor_tmt
* @param string $minimum
* @param string $maximum
* @param string $major_unit
* @param string $minor_unit
*
*/
public function setAxisOptionsProperties($axis_labels, $horizontal_crosses_value = null, $horizontal_crosses = null, $axis_orientation = null, $major_tmt = null, $minor_tmt = null, $minimum = null, $maximum = null, $major_unit = null, $minor_unit = null)
{
$this->axisOptions['axis_labels'] = (string) $axis_labels;
($horizontal_crosses_value !== null) ? $this->axisOptions['horizontal_crosses_value'] = (string) $horizontal_crosses_value : null;
($horizontal_crosses !== null) ? $this->axisOptions['horizontal_crosses'] = (string) $horizontal_crosses : null;
($axis_orientation !== null) ? $this->axisOptions['orientation'] = (string) $axis_orientation : null;
($major_tmt !== null) ? $this->axisOptions['major_tick_mark'] = (string) $major_tmt : null;
($minor_tmt !== null) ? $this->axisOptions['minor_tick_mark'] = (string) $minor_tmt : null;
($minor_tmt !== null) ? $this->axisOptions['minor_tick_mark'] = (string) $minor_tmt : null;
($minimum !== null) ? $this->axisOptions['minimum'] = (string) $minimum : null;
($maximum !== null) ? $this->axisOptions['maximum'] = (string) $maximum : null;
($major_unit !== null) ? $this->axisOptions['major_unit'] = (string) $major_unit : null;
($minor_unit !== null) ? $this->axisOptions['minor_unit'] = (string) $minor_unit : null;
}
/**
* Get Axis Options Property
*
* @param string $property
*
* @return string
*/
public function getAxisOptionsProperty($property)
{
return $this->axisOptions[$property];
}
/**
* Set Axis Orientation Property
*
* @param string $orientation
*
*/
public function setAxisOrientation($orientation)
{
$this->orientation = (string) $orientation;
}
/**
* Set Fill Property
*
* @param string $color
* @param int $alpha
* @param string $type
*
*/
public function setFillParameters($color, $alpha = 0, $type = self::EXCEL_COLOR_TYPE_ARGB)
{
$this->fillProperties = $this->setColorProperties($color, $alpha, $type);
}
/**
* Set Line Property
*
* @param string $color
* @param int $alpha
* @param string $type
*
*/
public function setLineParameters($color, $alpha = 0, $type = self::EXCEL_COLOR_TYPE_ARGB)
{
$this->lineProperties = $this->setColorProperties($color, $alpha, $type);
}
/**
* Get Fill Property
*
* @param string $property
*
* @return string
*/
public function getFillProperty($property)
{
return $this->fillProperties[$property];
}
/**
* Get Line Property
*
* @param string $property
*
* @return string
*/
public function getLineProperty($property)
{
return $this->lineProperties[$property];
}
/**
* Set Line Style Properties
*
* @param float $line_width
* @param string $compound_type
* @param string $dash_type
* @param string $cap_type
* @param string $join_type
* @param string $head_arrow_type
* @param string $head_arrow_size
* @param string $end_arrow_type
* @param string $end_arrow_size
*
*/
public function setLineStyleProperties($line_width = null, $compound_type = null, $dash_type = null, $cap_type = null, $join_type = null, $head_arrow_type = null, $head_arrow_size = null, $end_arrow_type = null, $end_arrow_size = null)
{
(!is_null($line_width)) ? $this->lineStyleProperties['width'] = $this->getExcelPointsWidth((float) $line_width) : null;
(!is_null($compound_type)) ? $this->lineStyleProperties['compound'] = (string) $compound_type : null;
(!is_null($dash_type)) ? $this->lineStyleProperties['dash'] = (string) $dash_type : null;
(!is_null($cap_type)) ? $this->lineStyleProperties['cap'] = (string) $cap_type : null;
(!is_null($join_type)) ? $this->lineStyleProperties['join'] = (string) $join_type : null;
(!is_null($head_arrow_type)) ? $this->lineStyleProperties['arrow']['head']['type'] = (string) $head_arrow_type : null;
(!is_null($head_arrow_size)) ? $this->lineStyleProperties['arrow']['head']['size'] = (string) $head_arrow_size : null;
(!is_null($end_arrow_type)) ? $this->lineStyleProperties['arrow']['end']['type'] = (string) $end_arrow_type : null;
(!is_null($end_arrow_size)) ? $this->lineStyleProperties['arrow']['end']['size'] = (string) $end_arrow_size : null;
}
/**
* Get Line Style Property
*
* @param array|string $elements
*
* @return string
*/
public function getLineStyleProperty($elements)
{
return $this->getArrayElementsValue($this->lineStyleProperties, $elements);
}
/**
* Get Line Style Arrow Excel Width
*
* @param string $arrow
*
* @return string
*/
public function getLineStyleArrowWidth($arrow)
{
return $this->getLineStyleArrowSize($this->lineStyleProperties['arrow'][$arrow]['size'], 'w');
}
/**
* Get Line Style Arrow Excel Length
*
* @param string $arrow
*
* @return string
*/
public function getLineStyleArrowLength($arrow)
{
return $this->getLineStyleArrowSize($this->lineStyleProperties['arrow'][$arrow]['size'], 'len');
}
/**
* Set Shadow Properties
*
* @param int $shadow_presets
* @param string $sh_color_value
* @param string $sh_color_type
* @param string $sh_color_alpha
* @param float $sh_blur
* @param int $sh_angle
* @param float $sh_distance
*
*/
public function setShadowProperties($sh_presets, $sh_color_value = null, $sh_color_type = null, $sh_color_alpha = null, $sh_blur = null, $sh_angle = null, $sh_distance = null)
{
$this->setShadowPresetsProperties((int) $sh_presets)
->setShadowColor(
is_null($sh_color_value) ? $this->shadowProperties['color']['value'] : $sh_color_value,
is_null($sh_color_alpha) ? (int) $this->shadowProperties['color']['alpha'] : $sh_color_alpha,
is_null($sh_color_type) ? $this->shadowProperties['color']['type'] : $sh_color_type
)
->setShadowBlur($sh_blur)
->setShadowAngle($sh_angle)
->setShadowDistance($sh_distance);
}
/**
* Set Shadow Color
*
* @param int $shadow_presets
*
* @return PHPExcel_Chart_Axis
*/
private function setShadowPresetsProperties($shadow_presets)
{
$this->shadowProperties['presets'] = $shadow_presets;
$this->setShadowProperiesMapValues($this->getShadowPresetsMap($shadow_presets));
return $this;
}
/**
* Set Shadow Properties from Maped Values
*
* @param array $properties_map
* @param * $reference
*
* @return PHPExcel_Chart_Axis
*/
private function setShadowProperiesMapValues(array $properties_map, &$reference = null)
{
$base_reference = $reference;
foreach ($properties_map as $property_key => $property_val) {
if (is_array($property_val)) {
if ($reference === null) {
$reference = & $this->shadowProperties[$property_key];
} else {
$reference = & $reference[$property_key];
}
$this->setShadowProperiesMapValues($property_val, $reference);
} else {
if ($base_reference === null) {
$this->shadowProperties[$property_key] = $property_val;
} else {
$reference[$property_key] = $property_val;
}
}
}
return $this;
}
/**
* Set Shadow Color
*
* @param string $color
* @param int $alpha
* @param string $type
*
* @return PHPExcel_Chart_Axis
*/
private function setShadowColor($color, $alpha, $type)
{
$this->shadowProperties['color'] = $this->setColorProperties($color, $alpha, $type);
return $this;
}
/**
* Set Shadow Blur
*
* @param float $blur
*
* @return PHPExcel_Chart_Axis
*/
private function setShadowBlur($blur)
{
if ($blur !== null) {
$this->shadowProperties['blur'] = (string) $this->getExcelPointsWidth($blur);
}
return $this;
}
/**
* Set Shadow Angle
*
* @param int $angle
*
* @return PHPExcel_Chart_Axis
*/
private function setShadowAngle($angle)
{
if ($angle !== null) {
$this->shadowProperties['direction'] = (string) $this->getExcelPointsAngle($angle);
}
return $this;
}
/**
* Set Shadow Distance
*
* @param float $distance
*
* @return PHPExcel_Chart_Axis
*/
private function setShadowDistance($distance)
{
if ($distance !== null) {
$this->shadowProperties['distance'] = (string) $this->getExcelPointsWidth($distance);
}
return $this;
}
/**
* Get Glow Property
*
* @param float $size
* @param string $color_value
* @param int $color_alpha
* @param string $color_type
*/
public function getShadowProperty($elements)
{
return $this->getArrayElementsValue($this->shadowProperties, $elements);
}
/**
* Set Glow Properties
*
* @param float $size
* @param string $color_value
* @param int $color_alpha
* @param string $color_type
*/
public function setGlowProperties($size, $color_value = null, $color_alpha = null, $color_type = null)
{
$this->setGlowSize($size)
->setGlowColor(
is_null($color_value) ? $this->glowProperties['color']['value'] : $color_value,
is_null($color_alpha) ? (int) $this->glowProperties['color']['alpha'] : $color_alpha,
is_null($color_type) ? $this->glowProperties['color']['type'] : $color_type
);
}
/**
* Get Glow Property
*
* @param array|string $property
*
* @return string
*/
public function getGlowProperty($property)
{
return $this->getArrayElementsValue($this->glowProperties, $property);
}
/**
* Set Glow Color
*
* @param float $size
*
* @return PHPExcel_Chart_Axis
*/
private function setGlowSize($size)
{
if (!is_null($size)) {
$this->glowProperties['size'] = $this->getExcelPointsWidth($size);
}
return $this;
}
/**
* Set Glow Color
*
* @param string $color
* @param int $alpha
* @param string $type
*
* @return PHPExcel_Chart_Axis
*/
private function setGlowColor($color, $alpha, $type)
{
$this->glowProperties['color'] = $this->setColorProperties($color, $alpha, $type);
return $this;
}
/**
* Set Soft Edges Size
*
* @param float $size
*/
public function setSoftEdges($size)
{
if (!is_null($size)) {
$softEdges['size'] = (string) $this->getExcelPointsWidth($size);
}
}
/**
* Get Soft Edges Size
*
* @return string
*/
public function getSoftEdgesSize()
{
return $this->softEdges['size'];
}
}

View File

@@ -2,7 +2,7 @@
/** /**
* PHPExcel * PHPExcel
* *
* Copyright (c) 2006 - 2014 PHPExcel * Copyright (c) 2006 - 2015 PHPExcel
* *
* This library is free software; you can redistribute it and/or * This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public * modify it under the terms of the GNU Lesser General Public
@@ -20,9 +20,9 @@
* *
* @category PHPExcel * @category PHPExcel
* @package PHPExcel_Chart * @package PHPExcel_Chart
* @copyright Copyright (c) 2006 - 2014 PHPExcel (http://www.codeplex.com/PHPExcel) * @copyright Copyright (c) 2006 - 2015 PHPExcel (http://www.codeplex.com/PHPExcel)
* @license http://www.gnu.org/licenses/old-licenses/lgpl-2.1.txt LGPL * @license http://www.gnu.org/licenses/old-licenses/lgpl-2.1.txt LGPL
* @version 1.8.0, 2014-03-02 * @version ##VERSION##, ##DATE##
*/ */
@@ -31,11 +31,10 @@
* *
* @category PHPExcel * @category PHPExcel
* @package PHPExcel_Chart * @package PHPExcel_Chart
* @copyright Copyright (c) 2006 - 2014 PHPExcel (http://www.codeplex.com/PHPExcel) * @copyright Copyright (c) 2006 - 2015 PHPExcel (http://www.codeplex.com/PHPExcel)
*/ */
class PHPExcel_Chart_DataSeries class PHPExcel_Chart_DataSeries
{ {
const TYPE_BARCHART = 'barChart'; const TYPE_BARCHART = 'barChart';
const TYPE_BARCHART_3D = 'bar3DChart'; const TYPE_BARCHART_3D = 'bar3DChart';
const TYPE_LINECHART = 'lineChart'; const TYPE_LINECHART = 'lineChart';
@@ -76,85 +75,90 @@ class PHPExcel_Chart_DataSeries
* *
* @var string * @var string
*/ */
private $_plotType = null; private $plotType;
/** /**
* Plot Grouping Type * Plot Grouping Type
* *
* @var boolean * @var boolean
*/ */
private $_plotGrouping = null; private $plotGrouping;
/** /**
* Plot Direction * Plot Direction
* *
* @var boolean * @var boolean
*/ */
private $_plotDirection = null; private $plotDirection;
/** /**
* Plot Style * Plot Style
* *
* @var string * @var string
*/ */
private $_plotStyle = null; private $plotStyle;
/** /**
* Order of plots in Series * Order of plots in Series
* *
* @var array of integer * @var array of integer
*/ */
private $_plotOrder = array(); private $plotOrder = array();
/** /**
* Plot Label * Plot Label
* *
* @var array of PHPExcel_Chart_DataSeriesValues * @var array of PHPExcel_Chart_DataSeriesValues
*/ */
private $_plotLabel = array(); private $plotLabel = array();
/** /**
* Plot Category * Plot Category
* *
* @var array of PHPExcel_Chart_DataSeriesValues * @var array of PHPExcel_Chart_DataSeriesValues
*/ */
private $_plotCategory = array(); private $plotCategory = array();
/** /**
* Smooth Line * Smooth Line
* *
* @var string * @var string
*/ */
private $_smoothLine = null; private $smoothLine;
/** /**
* Plot Values * Plot Values
* *
* @var array of PHPExcel_Chart_DataSeriesValues * @var array of PHPExcel_Chart_DataSeriesValues
*/ */
private $_plotValues = array(); private $plotValues = array();
/** /**
* Create a new PHPExcel_Chart_DataSeries * Create a new PHPExcel_Chart_DataSeries
*/ */
public function __construct($plotType = null, $plotGrouping = null, $plotOrder = array(), $plotLabel = array(), $plotCategory = array(), $plotValues = array(), $smoothLine = null, $plotStyle = null) public function __construct($plotType = null, $plotGrouping = null, $plotOrder = array(), $plotLabel = array(), $plotCategory = array(), $plotValues = array(), $plotDirection = null, $smoothLine = null, $plotStyle = null)
{ {
$this->_plotType = $plotType; $this->plotType = $plotType;
$this->_plotGrouping = $plotGrouping; $this->plotGrouping = $plotGrouping;
$this->_plotOrder = $plotOrder; $this->plotOrder = $plotOrder;
$keys = array_keys($plotValues); $keys = array_keys($plotValues);
$this->_plotValues = $plotValues; $this->plotValues = $plotValues;
if ((count($plotLabel) == 0) || (is_null($plotLabel[$keys[0]]))) { if ((count($plotLabel) == 0) || (is_null($plotLabel[$keys[0]]))) {
$plotLabel[$keys[0]] = new PHPExcel_Chart_DataSeriesValues(); $plotLabel[$keys[0]] = new PHPExcel_Chart_DataSeriesValues();
} }
$this->_plotLabel = $plotLabel; $this->plotLabel = $plotLabel;
if ((count($plotCategory) == 0) || (is_null($plotCategory[$keys[0]]))) { if ((count($plotCategory) == 0) || (is_null($plotCategory[$keys[0]]))) {
$plotCategory[$keys[0]] = new PHPExcel_Chart_DataSeriesValues(); $plotCategory[$keys[0]] = new PHPExcel_Chart_DataSeriesValues();
} }
$this->_plotCategory = $plotCategory; $this->plotCategory = $plotCategory;
$this->_smoothLine = $smoothLine; $this->smoothLine = $smoothLine;
$this->_plotStyle = $plotStyle; $this->plotStyle = $plotStyle;
if (is_null($plotDirection)) {
$plotDirection = self::DIRECTION_COL;
}
$this->plotDirection = $plotDirection;
} }
/** /**
@@ -162,8 +166,9 @@ class PHPExcel_Chart_DataSeries
* *
* @return string * @return string
*/ */
public function getPlotType() { public function getPlotType()
return $this->_plotType; {
return $this->plotType;
} }
/** /**
@@ -172,8 +177,9 @@ class PHPExcel_Chart_DataSeries
* @param string $plotType * @param string $plotType
* @return PHPExcel_Chart_DataSeries * @return PHPExcel_Chart_DataSeries
*/ */
public function setPlotType($plotType = '') { public function setPlotType($plotType = '')
$this->_plotType = $plotType; {
$this->plotType = $plotType;
return $this; return $this;
} }
@@ -182,8 +188,9 @@ class PHPExcel_Chart_DataSeries
* *
* @return string * @return string
*/ */
public function getPlotGrouping() { public function getPlotGrouping()
return $this->_plotGrouping; {
return $this->plotGrouping;
} }
/** /**
@@ -192,8 +199,9 @@ class PHPExcel_Chart_DataSeries
* @param string $groupingType * @param string $groupingType
* @return PHPExcel_Chart_DataSeries * @return PHPExcel_Chart_DataSeries
*/ */
public function setPlotGrouping($groupingType = null) { public function setPlotGrouping($groupingType = null)
$this->_plotGrouping = $groupingType; {
$this->plotGrouping = $groupingType;
return $this; return $this;
} }
@@ -202,8 +210,9 @@ class PHPExcel_Chart_DataSeries
* *
* @return string * @return string
*/ */
public function getPlotDirection() { public function getPlotDirection()
return $this->_plotDirection; {
return $this->plotDirection;
} }
/** /**
@@ -212,8 +221,9 @@ class PHPExcel_Chart_DataSeries
* @param string $plotDirection * @param string $plotDirection
* @return PHPExcel_Chart_DataSeries * @return PHPExcel_Chart_DataSeries
*/ */
public function setPlotDirection($plotDirection = null) { public function setPlotDirection($plotDirection = null)
$this->_plotDirection = $plotDirection; {
$this->plotDirection = $plotDirection;
return $this; return $this;
} }
@@ -222,8 +232,9 @@ class PHPExcel_Chart_DataSeries
* *
* @return string * @return string
*/ */
public function getPlotOrder() { public function getPlotOrder()
return $this->_plotOrder; {
return $this->plotOrder;
} }
/** /**
@@ -231,8 +242,9 @@ class PHPExcel_Chart_DataSeries
* *
* @return array of PHPExcel_Chart_DataSeriesValues * @return array of PHPExcel_Chart_DataSeriesValues
*/ */
public function getPlotLabels() { public function getPlotLabels()
return $this->_plotLabel; {
return $this->plotLabel;
} }
/** /**
@@ -240,12 +252,13 @@ class PHPExcel_Chart_DataSeries
* *
* @return PHPExcel_Chart_DataSeriesValues * @return PHPExcel_Chart_DataSeriesValues
*/ */
public function getPlotLabelByIndex($index) { public function getPlotLabelByIndex($index)
$keys = array_keys($this->_plotLabel); {
if (in_array($index,$keys)) { $keys = array_keys($this->plotLabel);
return $this->_plotLabel[$index]; if (in_array($index, $keys)) {
} elseif(isset($keys[$index])) { return $this->plotLabel[$index];
return $this->_plotLabel[$keys[$index]]; } elseif (isset($keys[$index])) {
return $this->plotLabel[$keys[$index]];
} }
return false; return false;
} }
@@ -255,8 +268,9 @@ class PHPExcel_Chart_DataSeries
* *
* @return array of PHPExcel_Chart_DataSeriesValues * @return array of PHPExcel_Chart_DataSeriesValues
*/ */
public function getPlotCategories() { public function getPlotCategories()
return $this->_plotCategory; {
return $this->plotCategory;
} }
/** /**
@@ -264,12 +278,13 @@ class PHPExcel_Chart_DataSeries
* *
* @return PHPExcel_Chart_DataSeriesValues * @return PHPExcel_Chart_DataSeriesValues
*/ */
public function getPlotCategoryByIndex($index) { public function getPlotCategoryByIndex($index)
$keys = array_keys($this->_plotCategory); {
if (in_array($index,$keys)) { $keys = array_keys($this->plotCategory);
return $this->_plotCategory[$index]; if (in_array($index, $keys)) {
} elseif(isset($keys[$index])) { return $this->plotCategory[$index];
return $this->_plotCategory[$keys[$index]]; } elseif (isset($keys[$index])) {
return $this->plotCategory[$keys[$index]];
} }
return false; return false;
} }
@@ -279,8 +294,9 @@ class PHPExcel_Chart_DataSeries
* *
* @return string * @return string
*/ */
public function getPlotStyle() { public function getPlotStyle()
return $this->_plotStyle; {
return $this->plotStyle;
} }
/** /**
@@ -289,8 +305,9 @@ class PHPExcel_Chart_DataSeries
* @param string $plotStyle * @param string $plotStyle
* @return PHPExcel_Chart_DataSeries * @return PHPExcel_Chart_DataSeries
*/ */
public function setPlotStyle($plotStyle = null) { public function setPlotStyle($plotStyle = null)
$this->_plotStyle = $plotStyle; {
$this->plotStyle = $plotStyle;
return $this; return $this;
} }
@@ -299,8 +316,9 @@ class PHPExcel_Chart_DataSeries
* *
* @return array of PHPExcel_Chart_DataSeriesValues * @return array of PHPExcel_Chart_DataSeriesValues
*/ */
public function getPlotValues() { public function getPlotValues()
return $this->_plotValues; {
return $this->plotValues;
} }
/** /**
@@ -308,12 +326,13 @@ class PHPExcel_Chart_DataSeries
* *
* @return PHPExcel_Chart_DataSeriesValues * @return PHPExcel_Chart_DataSeriesValues
*/ */
public function getPlotValuesByIndex($index) { public function getPlotValuesByIndex($index)
$keys = array_keys($this->_plotValues); {
if (in_array($index,$keys)) { $keys = array_keys($this->plotValues);
return $this->_plotValues[$index]; if (in_array($index, $keys)) {
} elseif(isset($keys[$index])) { return $this->plotValues[$index];
return $this->_plotValues[$keys[$index]]; } elseif (isset($keys[$index])) {
return $this->plotValues[$keys[$index]];
} }
return false; return false;
} }
@@ -323,8 +342,9 @@ class PHPExcel_Chart_DataSeries
* *
* @return integer * @return integer
*/ */
public function getPlotSeriesCount() { public function getPlotSeriesCount()
return count($this->_plotValues); {
return count($this->plotValues);
} }
/** /**
@@ -332,8 +352,9 @@ class PHPExcel_Chart_DataSeries
* *
* @return boolean * @return boolean
*/ */
public function getSmoothLine() { public function getSmoothLine()
return $this->_smoothLine; {
return $this->smoothLine;
} }
/** /**
@@ -342,24 +363,28 @@ class PHPExcel_Chart_DataSeries
* @param boolean $smoothLine * @param boolean $smoothLine
* @return PHPExcel_Chart_DataSeries * @return PHPExcel_Chart_DataSeries
*/ */
public function setSmoothLine($smoothLine = TRUE) { public function setSmoothLine($smoothLine = true)
$this->_smoothLine = $smoothLine; {
$this->smoothLine = $smoothLine;
return $this; return $this;
} }
public function refresh(PHPExcel_Worksheet $worksheet) { public function refresh(PHPExcel_Worksheet $worksheet)
foreach($this->_plotValues as $plotValues) { {
if ($plotValues !== NULL) foreach ($this->plotValues as $plotValues) {
$plotValues->refresh($worksheet, TRUE); if ($plotValues !== null) {
} $plotValues->refresh($worksheet, true);
foreach($this->_plotLabel as $plotValues) { }
if ($plotValues !== NULL) }
$plotValues->refresh($worksheet, TRUE); foreach ($this->plotLabel as $plotValues) {
} if ($plotValues !== null) {
foreach($this->_plotCategory as $plotValues) { $plotValues->refresh($worksheet, true);
if ($plotValues !== NULL) }
$plotValues->refresh($worksheet, FALSE); }
foreach ($this->plotCategory as $plotValues) {
if ($plotValues !== null) {
$plotValues->refresh($worksheet, false);
}
} }
} }
} }

View File

@@ -1,8 +1,9 @@
<?php <?php
/** /**
* PHPExcel * PHPExcel_Chart_DataSeriesValues
* *
* Copyright (c) 2006 - 2014 PHPExcel * Copyright (c) 2006 - 2015 PHPExcel
* *
* This library is free software; you can redistribute it and/or * This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public * modify it under the terms of the GNU Lesser General Public
@@ -20,18 +21,9 @@
* *
* @category PHPExcel * @category PHPExcel
* @package PHPExcel_Chart * @package PHPExcel_Chart
* @copyright Copyright (c) 2006 - 2014 PHPExcel (http://www.codeplex.com/PHPExcel) * @copyright Copyright (c) 2006 - 2015 PHPExcel (http://www.codeplex.com/PHPExcel)
* @license http://www.gnu.org/licenses/old-licenses/lgpl-2.1.txt LGPL * @license http://www.gnu.org/licenses/old-licenses/lgpl-2.1.txt LGPL
* @version 1.8.0, 2014-03-02 * @version ##VERSION##, ##DATE##
*/
/**
* PHPExcel_Chart_DataSeriesValues
*
* @category PHPExcel
* @package PHPExcel_Chart
* @copyright Copyright (c) 2006 - 2014 PHPExcel (http://www.codeplex.com/PHPExcel)
*/ */
class PHPExcel_Chart_DataSeriesValues class PHPExcel_Chart_DataSeriesValues
{ {
@@ -39,7 +31,7 @@ class PHPExcel_Chart_DataSeriesValues
const DATASERIES_TYPE_STRING = 'String'; const DATASERIES_TYPE_STRING = 'String';
const DATASERIES_TYPE_NUMBER = 'Number'; const DATASERIES_TYPE_NUMBER = 'Number';
private static $_dataTypeValues = array( private static $dataTypeValues = array(
self::DATASERIES_TYPE_STRING, self::DATASERIES_TYPE_STRING,
self::DATASERIES_TYPE_NUMBER, self::DATASERIES_TYPE_NUMBER,
); );
@@ -49,42 +41,42 @@ class PHPExcel_Chart_DataSeriesValues
* *
* @var string * @var string
*/ */
private $_dataType = null; private $dataType;
/** /**
* Series Data Source * Series Data Source
* *
* @var string * @var string
*/ */
private $_dataSource = null; private $dataSource;
/** /**
* Format Code * Format Code
* *
* @var string * @var string
*/ */
private $_formatCode = null; private $formatCode;
/** /**
* Series Point Marker * Series Point Marker
* *
* @var string * @var string
*/ */
private $_marker = null; private $pointMarker;
/** /**
* Point Count (The number of datapoints in the dataseries) * Point Count (The number of datapoints in the dataseries)
* *
* @var integer * @var integer
*/ */
private $_pointCount = 0; private $pointCount = 0;
/** /**
* Data Values * Data Values
* *
* @var array of mixed * @var array of mixed
*/ */
private $_dataValues = array(); private $dataValues = array();
/** /**
* Create a new PHPExcel_Chart_DataSeriesValues object * Create a new PHPExcel_Chart_DataSeriesValues object
@@ -92,11 +84,11 @@ class PHPExcel_Chart_DataSeriesValues
public function __construct($dataType = self::DATASERIES_TYPE_NUMBER, $dataSource = null, $formatCode = null, $pointCount = 0, $dataValues = array(), $marker = null) public function __construct($dataType = self::DATASERIES_TYPE_NUMBER, $dataSource = null, $formatCode = null, $pointCount = 0, $dataValues = array(), $marker = null)
{ {
$this->setDataType($dataType); $this->setDataType($dataType);
$this->_dataSource = $dataSource; $this->dataSource = $dataSource;
$this->_formatCode = $formatCode; $this->formatCode = $formatCode;
$this->_pointCount = $pointCount; $this->pointCount = $pointCount;
$this->_dataValues = $dataValues; $this->dataValues = $dataValues;
$this->_marker = $marker; $this->pointMarker = $marker;
} }
/** /**
@@ -104,8 +96,9 @@ class PHPExcel_Chart_DataSeriesValues
* *
* @return string * @return string
*/ */
public function getDataType() { public function getDataType()
return $this->_dataType; {
return $this->dataType;
} }
/** /**
@@ -119,11 +112,12 @@ class PHPExcel_Chart_DataSeriesValues
* Normally used for chart data values * Normally used for chart data values
* @return PHPExcel_Chart_DataSeriesValues * @return PHPExcel_Chart_DataSeriesValues
*/ */
public function setDataType($dataType = self::DATASERIES_TYPE_NUMBER) { public function setDataType($dataType = self::DATASERIES_TYPE_NUMBER)
if (!in_array($dataType, self::$_dataTypeValues)) { {
if (!in_array($dataType, self::$dataTypeValues)) {
throw new PHPExcel_Chart_Exception('Invalid datatype for chart data series values'); throw new PHPExcel_Chart_Exception('Invalid datatype for chart data series values');
} }
$this->_dataType = $dataType; $this->dataType = $dataType;
return $this; return $this;
} }
@@ -133,8 +127,9 @@ class PHPExcel_Chart_DataSeriesValues
* *
* @return string * @return string
*/ */
public function getDataSource() { public function getDataSource()
return $this->_dataSource; {
return $this->dataSource;
} }
/** /**
@@ -143,8 +138,9 @@ class PHPExcel_Chart_DataSeriesValues
* @param string $dataSource * @param string $dataSource
* @return PHPExcel_Chart_DataSeriesValues * @return PHPExcel_Chart_DataSeriesValues
*/ */
public function setDataSource($dataSource = null, $refreshDataValues = true) { public function setDataSource($dataSource = null, $refreshDataValues = true)
$this->_dataSource = $dataSource; {
$this->dataSource = $dataSource;
if ($refreshDataValues) { if ($refreshDataValues) {
// TO DO // TO DO
@@ -158,8 +154,9 @@ class PHPExcel_Chart_DataSeriesValues
* *
* @return string * @return string
*/ */
public function getPointMarker() { public function getPointMarker()
return $this->_marker; {
return $this->pointMarker;
} }
/** /**
@@ -168,8 +165,9 @@ class PHPExcel_Chart_DataSeriesValues
* @param string $marker * @param string $marker
* @return PHPExcel_Chart_DataSeriesValues * @return PHPExcel_Chart_DataSeriesValues
*/ */
public function setPointMarker($marker = null) { public function setPointMarker($marker = null)
$this->_marker = $marker; {
$this->pointMarker = $marker;
return $this; return $this;
} }
@@ -179,8 +177,9 @@ class PHPExcel_Chart_DataSeriesValues
* *
* @return string * @return string
*/ */
public function getFormatCode() { public function getFormatCode()
return $this->_formatCode; {
return $this->formatCode;
} }
/** /**
@@ -189,8 +188,9 @@ class PHPExcel_Chart_DataSeriesValues
* @param string $formatCode * @param string $formatCode
* @return PHPExcel_Chart_DataSeriesValues * @return PHPExcel_Chart_DataSeriesValues
*/ */
public function setFormatCode($formatCode = null) { public function setFormatCode($formatCode = null)
$this->_formatCode = $formatCode; {
$this->formatCode = $formatCode;
return $this; return $this;
} }
@@ -200,8 +200,9 @@ class PHPExcel_Chart_DataSeriesValues
* *
* @return integer * @return integer
*/ */
public function getPointCount() { public function getPointCount()
return $this->_pointCount; {
return $this->pointCount;
} }
/** /**
@@ -209,9 +210,10 @@ class PHPExcel_Chart_DataSeriesValues
* *
* @return boolean * @return boolean
*/ */
public function isMultiLevelSeries() { public function isMultiLevelSeries()
if (count($this->_dataValues) > 0) { {
return is_array($this->_dataValues[0]); if (count($this->dataValues) > 0) {
return is_array($this->dataValues[0]);
} }
return null; return null;
} }
@@ -221,10 +223,11 @@ class PHPExcel_Chart_DataSeriesValues
* *
* @return boolean * @return boolean
*/ */
public function multiLevelCount() { public function multiLevelCount()
{
$levelCount = 0; $levelCount = 0;
foreach($this->_dataValues as $dataValueSet) { foreach ($this->dataValues as $dataValueSet) {
$levelCount = max($levelCount,count($dataValueSet)); $levelCount = max($levelCount, count($dataValueSet));
} }
return $levelCount; return $levelCount;
} }
@@ -234,8 +237,9 @@ class PHPExcel_Chart_DataSeriesValues
* *
* @return array of mixed * @return array of mixed
*/ */
public function getDataValues() { public function getDataValues()
return $this->_dataValues; {
return $this->dataValues;
} }
/** /**
@@ -243,14 +247,15 @@ class PHPExcel_Chart_DataSeriesValues
* *
* @return mixed * @return mixed
*/ */
public function getDataValue() { public function getDataValue()
$count = count($this->_dataValues); {
$count = count($this->dataValues);
if ($count == 0) { if ($count == 0) {
return null; return null;
} elseif ($count == 1) { } elseif ($count == 1) {
return $this->_dataValues[0]; return $this->dataValues[0];
} }
return $this->_dataValues; return $this->dataValues;
} }
/** /**
@@ -258,13 +263,14 @@ class PHPExcel_Chart_DataSeriesValues
* *
* @param array $dataValues * @param array $dataValues
* @param boolean $refreshDataSource * @param boolean $refreshDataSource
* TRUE - refresh the value of _dataSource based on the values of $dataValues * TRUE - refresh the value of dataSource based on the values of $dataValues
* FALSE - don't change the value of _dataSource * FALSE - don't change the value of dataSource
* @return PHPExcel_Chart_DataSeriesValues * @return PHPExcel_Chart_DataSeriesValues
*/ */
public function setDataValues($dataValues = array(), $refreshDataSource = TRUE) { public function setDataValues($dataValues = array(), $refreshDataSource = true)
$this->_dataValues = PHPExcel_Calculation_Functions::flattenArray($dataValues); {
$this->_pointCount = count($dataValues); $this->dataValues = PHPExcel_Calculation_Functions::flattenArray($dataValues);
$this->pointCount = count($dataValues);
if ($refreshDataSource) { if ($refreshDataSource) {
// TO DO // TO DO
@@ -273,55 +279,55 @@ class PHPExcel_Chart_DataSeriesValues
return $this; return $this;
} }
private function _stripNulls($var) { private function stripNulls($var)
return $var !== NULL; {
return $var !== null;
} }
public function refresh(PHPExcel_Worksheet $worksheet, $flatten = TRUE) { public function refresh(PHPExcel_Worksheet $worksheet, $flatten = true)
if ($this->_dataSource !== NULL) { {
if ($this->dataSource !== null) {
$calcEngine = PHPExcel_Calculation::getInstance($worksheet->getParent()); $calcEngine = PHPExcel_Calculation::getInstance($worksheet->getParent());
$newDataValues = PHPExcel_Calculation::_unwrapResult( $newDataValues = PHPExcel_Calculation::unwrapResult(
$calcEngine->_calculateFormulaValue( $calcEngine->_calculateFormulaValue(
'='.$this->_dataSource, '='.$this->dataSource,
NULL, null,
$worksheet->getCell('A1') $worksheet->getCell('A1')
) )
); );
if ($flatten) { if ($flatten) {
$this->_dataValues = PHPExcel_Calculation_Functions::flattenArray($newDataValues); $this->dataValues = PHPExcel_Calculation_Functions::flattenArray($newDataValues);
foreach($this->_dataValues as &$dataValue) { foreach ($this->dataValues as &$dataValue) {
if ((!empty($dataValue)) && ($dataValue[0] == '#')) { if ((!empty($dataValue)) && ($dataValue[0] == '#')) {
$dataValue = 0.0; $dataValue = 0.0;
} }
} }
unset($dataValue); unset($dataValue);
} else { } else {
$cellRange = explode('!',$this->_dataSource); $cellRange = explode('!', $this->dataSource);
if (count($cellRange) > 1) { if (count($cellRange) > 1) {
list(,$cellRange) = $cellRange; list(, $cellRange) = $cellRange;
} }
$dimensions = PHPExcel_Cell::rangeDimension(str_replace('$','',$cellRange)); $dimensions = PHPExcel_Cell::rangeDimension(str_replace('$', '', $cellRange));
if (($dimensions[0] == 1) || ($dimensions[1] == 1)) { if (($dimensions[0] == 1) || ($dimensions[1] == 1)) {
$this->_dataValues = PHPExcel_Calculation_Functions::flattenArray($newDataValues); $this->dataValues = PHPExcel_Calculation_Functions::flattenArray($newDataValues);
} else { } else {
$newArray = array_values(array_shift($newDataValues)); $newArray = array_values(array_shift($newDataValues));
foreach($newArray as $i => $newDataSet) { foreach ($newArray as $i => $newDataSet) {
$newArray[$i] = array($newDataSet); $newArray[$i] = array($newDataSet);
} }
foreach($newDataValues as $newDataSet) { foreach ($newDataValues as $newDataSet) {
$i = 0; $i = 0;
foreach($newDataSet as $newDataVal) { foreach ($newDataSet as $newDataVal) {
array_unshift($newArray[$i++],$newDataVal); array_unshift($newArray[$i++], $newDataVal);
} }
} }
$this->_dataValues = $newArray; $this->dataValues = $newArray;
} }
} }
$this->_pointCount = count($this->_dataValues); $this->pointCount = count($this->dataValues);
} }
} }
} }

View File

@@ -1,8 +1,9 @@
<?php <?php
/** /**
* PHPExcel * PHPExcel_Chart_Exception
* *
* Copyright (c) 2006 - 2014 PHPExcel * Copyright (c) 2006 - 2015 PHPExcel
* *
* This library is free software; you can redistribute it and/or * This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public * modify it under the terms of the GNU Lesser General Public
@@ -20,20 +21,12 @@
* *
* @category PHPExcel * @category PHPExcel
* @package PHPExcel_Chart * @package PHPExcel_Chart
* @copyright Copyright (c) 2006 - 2014 PHPExcel (http://www.codeplex.com/PHPExcel) * @copyright Copyright (c) 2006 - 2015 PHPExcel (http://www.codeplex.com/PHPExcel)
* @license http://www.gnu.org/licenses/old-licenses/lgpl-2.1.txt LGPL * @license http://www.gnu.org/licenses/old-licenses/lgpl-2.1.txt LGPL
* @version 1.8.0, 2014-03-02 * @version ##VERSION##, ##DATE##
*/ */
class PHPExcel_Chart_Exception extends PHPExcel_Exception
{
/**
* PHPExcel_Chart_Exception
*
* @category PHPExcel
* @package PHPExcel_Chart
* @copyright Copyright (c) 2006 - 2014 PHPExcel (http://www.codeplex.com/PHPExcel)
*/
class PHPExcel_Chart_Exception extends PHPExcel_Exception {
/** /**
* Error handler callback * Error handler callback
* *
@@ -43,7 +36,8 @@ class PHPExcel_Chart_Exception extends PHPExcel_Exception {
* @param mixed $line * @param mixed $line
* @param mixed $context * @param mixed $context
*/ */
public static function errorHandlerCallback($code, $string, $file, $line, $context) { public static function errorHandlerCallback($code, $string, $file, $line, $context)
{
$e = new self($string, $code); $e = new self($string, $code);
$e->line = $line; $e->line = $line;
$e->file = $file; $e->file = $file;

View File

@@ -0,0 +1,472 @@
<?php
/**
* Created by PhpStorm.
* User: Wiktor Trzonkowski
* Date: 7/2/14
* Time: 2:36 PM
*/
class PHPExcel_Chart_GridLines extends PHPExcel_Chart_Properties
{
/**
* Properties of Class:
* Object State (State for Minor Tick Mark) @var bool
* Line Properties @var array of mixed
* Shadow Properties @var array of mixed
* Glow Properties @var array of mixed
* Soft Properties @var array of mixed
*
*/
private $objectState = false;
private $lineProperties = array(
'color' => array(
'type' => self::EXCEL_COLOR_TYPE_STANDARD,
'value' => null,
'alpha' => 0
),
'style' => array(
'width' => '9525',
'compound' => self::LINE_STYLE_COMPOUND_SIMPLE,
'dash' => self::LINE_STYLE_DASH_SOLID,
'cap' => self::LINE_STYLE_CAP_FLAT,
'join' => self::LINE_STYLE_JOIN_BEVEL,
'arrow' => array(
'head' => array(
'type' => self::LINE_STYLE_ARROW_TYPE_NOARROW,
'size' => self::LINE_STYLE_ARROW_SIZE_5
),
'end' => array(
'type' => self::LINE_STYLE_ARROW_TYPE_NOARROW,
'size' => self::LINE_STYLE_ARROW_SIZE_8
),
)
)
);
private $shadowProperties = array(
'presets' => self::SHADOW_PRESETS_NOSHADOW,
'effect' => null,
'color' => array(
'type' => self::EXCEL_COLOR_TYPE_STANDARD,
'value' => 'black',
'alpha' => 85,
),
'size' => array(
'sx' => null,
'sy' => null,
'kx' => null
),
'blur' => null,
'direction' => null,
'distance' => null,
'algn' => null,
'rotWithShape' => null
);
private $glowProperties = array(
'size' => null,
'color' => array(
'type' => self::EXCEL_COLOR_TYPE_STANDARD,
'value' => 'black',
'alpha' => 40
)
);
private $softEdges = array(
'size' => null
);
/**
* Get Object State
*
* @return bool
*/
public function getObjectState()
{
return $this->objectState;
}
/**
* Change Object State to True
*
* @return PHPExcel_Chart_GridLines
*/
private function activateObject()
{
$this->objectState = true;
return $this;
}
/**
* Set Line Color Properties
*
* @param string $value
* @param int $alpha
* @param string $type
*/
public function setLineColorProperties($value, $alpha = 0, $type = self::EXCEL_COLOR_TYPE_STANDARD)
{
$this->activateObject()
->lineProperties['color'] = $this->setColorProperties(
$value,
$alpha,
$type
);
}
/**
* Set Line Color Properties
*
* @param float $line_width
* @param string $compound_type
* @param string $dash_type
* @param string $cap_type
* @param string $join_type
* @param string $head_arrow_type
* @param string $head_arrow_size
* @param string $end_arrow_type
* @param string $end_arrow_size
*/
public function setLineStyleProperties($line_width = null, $compound_type = null, $dash_type = null, $cap_type = null, $join_type = null, $head_arrow_type = null, $head_arrow_size = null, $end_arrow_type = null, $end_arrow_size = null)
{
$this->activateObject();
(!is_null($line_width))
? $this->lineProperties['style']['width'] = $this->getExcelPointsWidth((float) $line_width)
: null;
(!is_null($compound_type))
? $this->lineProperties['style']['compound'] = (string) $compound_type
: null;
(!is_null($dash_type))
? $this->lineProperties['style']['dash'] = (string) $dash_type
: null;
(!is_null($cap_type))
? $this->lineProperties['style']['cap'] = (string) $cap_type
: null;
(!is_null($join_type))
? $this->lineProperties['style']['join'] = (string) $join_type
: null;
(!is_null($head_arrow_type))
? $this->lineProperties['style']['arrow']['head']['type'] = (string) $head_arrow_type
: null;
(!is_null($head_arrow_size))
? $this->lineProperties['style']['arrow']['head']['size'] = (string) $head_arrow_size
: null;
(!is_null($end_arrow_type))
? $this->lineProperties['style']['arrow']['end']['type'] = (string) $end_arrow_type
: null;
(!is_null($end_arrow_size))
? $this->lineProperties['style']['arrow']['end']['size'] = (string) $end_arrow_size
: null;
}
/**
* Get Line Color Property
*
* @param string $parameter
*
* @return string
*/
public function getLineColorProperty($parameter)
{
return $this->lineProperties['color'][$parameter];
}
/**
* Get Line Style Property
*
* @param array|string $elements
*
* @return string
*/
public function getLineStyleProperty($elements)
{
return $this->getArrayElementsValue($this->lineProperties['style'], $elements);
}
/**
* Set Glow Properties
*
* @param float $size
* @param string $color_value
* @param int $color_alpha
* @param string $color_type
*
*/
public function setGlowProperties($size, $color_value = null, $color_alpha = null, $color_type = null)
{
$this
->activateObject()
->setGlowSize($size)
->setGlowColor($color_value, $color_alpha, $color_type);
}
/**
* Get Glow Color Property
*
* @param string $property
*
* @return string
*/
public function getGlowColor($property)
{
return $this->glowProperties['color'][$property];
}
/**
* Get Glow Size
*
* @return string
*/
public function getGlowSize()
{
return $this->glowProperties['size'];
}
/**
* Set Glow Size
*
* @param float $size
*
* @return PHPExcel_Chart_GridLines
*/
private function setGlowSize($size)
{
$this->glowProperties['size'] = $this->getExcelPointsWidth((float) $size);
return $this;
}
/**
* Set Glow Color
*
* @param string $color
* @param int $alpha
* @param string $type
*
* @return PHPExcel_Chart_GridLines
*/
private function setGlowColor($color, $alpha, $type)
{
if (!is_null($color)) {
$this->glowProperties['color']['value'] = (string) $color;
}
if (!is_null($alpha)) {
$this->glowProperties['color']['alpha'] = $this->getTrueAlpha((int) $alpha);
}
if (!is_null($type)) {
$this->glowProperties['color']['type'] = (string) $type;
}
return $this;
}
/**
* Get Line Style Arrow Parameters
*
* @param string $arrow_selector
* @param string $property_selector
*
* @return string
*/
public function getLineStyleArrowParameters($arrow_selector, $property_selector)
{
return $this->getLineStyleArrowSize($this->lineProperties['style']['arrow'][$arrow_selector]['size'], $property_selector);
}
/**
* Set Shadow Properties
*
* @param int $sh_presets
* @param string $sh_color_value
* @param string $sh_color_type
* @param int $sh_color_alpha
* @param string $sh_blur
* @param int $sh_angle
* @param float $sh_distance
*
*/
public function setShadowProperties($sh_presets, $sh_color_value = null, $sh_color_type = null, $sh_color_alpha = null, $sh_blur = null, $sh_angle = null, $sh_distance = null)
{
$this->activateObject()
->setShadowPresetsProperties((int) $sh_presets)
->setShadowColor(
is_null($sh_color_value) ? $this->shadowProperties['color']['value'] : $sh_color_value,
is_null($sh_color_alpha) ? (int) $this->shadowProperties['color']['alpha'] : $this->getTrueAlpha($sh_color_alpha),
is_null($sh_color_type) ? $this->shadowProperties['color']['type'] : $sh_color_type
)
->setShadowBlur($sh_blur)
->setShadowAngle($sh_angle)
->setShadowDistance($sh_distance);
}
/**
* Set Shadow Presets Properties
*
* @param int $shadow_presets
*
* @return PHPExcel_Chart_GridLines
*/
private function setShadowPresetsProperties($shadow_presets)
{
$this->shadowProperties['presets'] = $shadow_presets;
$this->setShadowProperiesMapValues($this->getShadowPresetsMap($shadow_presets));
return $this;
}
/**
* Set Shadow Properties Values
*
* @param array $properties_map
* @param * $reference
*
* @return PHPExcel_Chart_GridLines
*/
private function setShadowProperiesMapValues(array $properties_map, &$reference = null)
{
$base_reference = $reference;
foreach ($properties_map as $property_key => $property_val) {
if (is_array($property_val)) {
if ($reference === null) {
$reference = & $this->shadowProperties[$property_key];
} else {
$reference = & $reference[$property_key];
}
$this->setShadowProperiesMapValues($property_val, $reference);
} else {
if ($base_reference === null) {
$this->shadowProperties[$property_key] = $property_val;
} else {
$reference[$property_key] = $property_val;
}
}
}
return $this;
}
/**
* Set Shadow Color
*
* @param string $color
* @param int $alpha
* @param string $type
* @return PHPExcel_Chart_GridLines
*/
private function setShadowColor($color, $alpha, $type)
{
if (!is_null($color)) {
$this->shadowProperties['color']['value'] = (string) $color;
}
if (!is_null($alpha)) {
$this->shadowProperties['color']['alpha'] = $this->getTrueAlpha((int) $alpha);
}
if (!is_null($type)) {
$this->shadowProperties['color']['type'] = (string) $type;
}
return $this;
}
/**
* Set Shadow Blur
*
* @param float $blur
*
* @return PHPExcel_Chart_GridLines
*/
private function setShadowBlur($blur)
{
if ($blur !== null) {
$this->shadowProperties['blur'] = (string) $this->getExcelPointsWidth($blur);
}
return $this;
}
/**
* Set Shadow Angle
*
* @param int $angle
* @return PHPExcel_Chart_GridLines
*/
private function setShadowAngle($angle)
{
if ($angle !== null) {
$this->shadowProperties['direction'] = (string) $this->getExcelPointsAngle($angle);
}
return $this;
}
/**
* Set Shadow Distance
*
* @param float $distance
* @return PHPExcel_Chart_GridLines
*/
private function setShadowDistance($distance)
{
if ($distance !== null) {
$this->shadowProperties['distance'] = (string) $this->getExcelPointsWidth($distance);
}
return $this;
}
/**
* Get Shadow Property
*
* @param string $elements
* @param array $elements
* @return string
*/
public function getShadowProperty($elements)
{
return $this->getArrayElementsValue($this->shadowProperties, $elements);
}
/**
* Set Soft Edges Size
*
* @param float $size
*/
public function setSoftEdgesSize($size)
{
if (!is_null($size)) {
$this->activateObject();
$softEdges['size'] = (string) $this->getExcelPointsWidth($size);
}
}
/**
* Get Soft Edges Size
*
* @return string
*/
public function getSoftEdgesSize()
{
return $this->softEdges['size'];
}
}

View File

@@ -2,7 +2,7 @@
/** /**
* PHPExcel * PHPExcel
* *
* Copyright (c) 2006 - 2014 PHPExcel * Copyright (c) 2006 - 2015 PHPExcel
* *
* This library is free software; you can redistribute it and/or * This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public * modify it under the terms of the GNU Lesser General Public
@@ -20,9 +20,9 @@
* *
* @category PHPExcel * @category PHPExcel
* @package PHPExcel_Chart * @package PHPExcel_Chart
* @copyright Copyright (c) 2006 - 2014 PHPExcel (http://www.codeplex.com/PHPExcel) * @copyright Copyright (c) 2006 - 2015 PHPExcel (http://www.codeplex.com/PHPExcel)
* @license http://www.gnu.org/licenses/old-licenses/lgpl-2.1.txt LGPL * @license http://www.gnu.org/licenses/old-licenses/lgpl-2.1.txt LGPL
* @version 1.8.0, 2014-03-02 * @version ##VERSION##, ##DATE##
*/ */
@@ -31,7 +31,7 @@
* *
* @category PHPExcel * @category PHPExcel
* @package PHPExcel_Chart * @package PHPExcel_Chart
* @copyright Copyright (c) 2006 - 2014 PHPExcel (http://www.codeplex.com/PHPExcel) * @copyright Copyright (c) 2006 - 2015 PHPExcel (http://www.codeplex.com/PHPExcel)
*/ */
class PHPExcel_Chart_Layout class PHPExcel_Chart_Layout
{ {
@@ -40,49 +40,49 @@ class PHPExcel_Chart_Layout
* *
* @var string * @var string
*/ */
private $_layoutTarget = NULL; private $layoutTarget;
/** /**
* X Mode * X Mode
* *
* @var string * @var string
*/ */
private $_xMode = NULL; private $xMode;
/** /**
* Y Mode * Y Mode
* *
* @var string * @var string
*/ */
private $_yMode = NULL; private $yMode;
/** /**
* X-Position * X-Position
* *
* @var float * @var float
*/ */
private $_xPos = NULL; private $xPos;
/** /**
* Y-Position * Y-Position
* *
* @var float * @var float
*/ */
private $_yPos = NULL; private $yPos;
/** /**
* width * width
* *
* @var float * @var float
*/ */
private $_width = NULL; private $width;
/** /**
* height * height
* *
* @var float * @var float
*/ */
private $_height = NULL; private $height;
/** /**
* show legend key * show legend key
@@ -90,7 +90,7 @@ class PHPExcel_Chart_Layout
* *
* @var boolean * @var boolean
*/ */
private $_showLegendKey = NULL; private $showLegendKey;
/** /**
* show value * show value
@@ -98,7 +98,7 @@ class PHPExcel_Chart_Layout
* *
* @var boolean * @var boolean
*/ */
private $_showVal = NULL; private $showVal;
/** /**
* show category name * show category name
@@ -106,7 +106,7 @@ class PHPExcel_Chart_Layout
* *
* @var boolean * @var boolean
*/ */
private $_showCatName = NULL; private $showCatName;
/** /**
* show data series name * show data series name
@@ -114,7 +114,7 @@ class PHPExcel_Chart_Layout
* *
* @var boolean * @var boolean
*/ */
private $_showSerName = NULL; private $showSerName;
/** /**
* show percentage * show percentage
@@ -122,14 +122,14 @@ class PHPExcel_Chart_Layout
* *
* @var boolean * @var boolean
*/ */
private $_showPercent = NULL; private $showPercent;
/** /**
* show bubble size * show bubble size
* *
* @var boolean * @var boolean
*/ */
private $_showBubbleSize = NULL; private $showBubbleSize;
/** /**
* show leader lines * show leader lines
@@ -137,21 +137,35 @@ class PHPExcel_Chart_Layout
* *
* @var boolean * @var boolean
*/ */
private $_showLeaderLines = NULL; private $showLeaderLines;
/** /**
* Create a new PHPExcel_Chart_Layout * Create a new PHPExcel_Chart_Layout
*/ */
public function __construct($layout=array()) public function __construct($layout = array())
{ {
if (isset($layout['layoutTarget'])) { $this->_layoutTarget = $layout['layoutTarget']; } if (isset($layout['layoutTarget'])) {
if (isset($layout['xMode'])) { $this->_xMode = $layout['xMode']; } $this->layoutTarget = $layout['layoutTarget'];
if (isset($layout['yMode'])) { $this->_yMode = $layout['yMode']; } }
if (isset($layout['x'])) { $this->_xPos = (float) $layout['x']; } if (isset($layout['xMode'])) {
if (isset($layout['y'])) { $this->_yPos = (float) $layout['y']; } $this->xMode = $layout['xMode'];
if (isset($layout['w'])) { $this->_width = (float) $layout['w']; } }
if (isset($layout['h'])) { $this->_height = (float) $layout['h']; } if (isset($layout['yMode'])) {
$this->yMode = $layout['yMode'];
}
if (isset($layout['x'])) {
$this->xPos = (float) $layout['x'];
}
if (isset($layout['y'])) {
$this->yPos = (float) $layout['y'];
}
if (isset($layout['w'])) {
$this->width = (float) $layout['w'];
}
if (isset($layout['h'])) {
$this->height = (float) $layout['h'];
}
} }
/** /**
@@ -159,8 +173,9 @@ class PHPExcel_Chart_Layout
* *
* @return string * @return string
*/ */
public function getLayoutTarget() { public function getLayoutTarget()
return $this->_layoutTarget; {
return $this->layoutTarget;
} }
/** /**
@@ -169,8 +184,9 @@ class PHPExcel_Chart_Layout
* @param Layout Target $value * @param Layout Target $value
* @return PHPExcel_Chart_Layout * @return PHPExcel_Chart_Layout
*/ */
public function setLayoutTarget($value) { public function setLayoutTarget($value)
$this->_layoutTarget = $value; {
$this->layoutTarget = $value;
return $this; return $this;
} }
@@ -179,8 +195,9 @@ class PHPExcel_Chart_Layout
* *
* @return string * @return string
*/ */
public function getXMode() { public function getXMode()
return $this->_xMode; {
return $this->xMode;
} }
/** /**
@@ -189,8 +206,9 @@ class PHPExcel_Chart_Layout
* @param X-Mode $value * @param X-Mode $value
* @return PHPExcel_Chart_Layout * @return PHPExcel_Chart_Layout
*/ */
public function setXMode($value) { public function setXMode($value)
$this->_xMode = $value; {
$this->xMode = $value;
return $this; return $this;
} }
@@ -199,8 +217,9 @@ class PHPExcel_Chart_Layout
* *
* @return string * @return string
*/ */
public function getYMode() { public function getYMode()
return $this->_yMode; {
return $this->yMode;
} }
/** /**
@@ -209,8 +228,9 @@ class PHPExcel_Chart_Layout
* @param Y-Mode $value * @param Y-Mode $value
* @return PHPExcel_Chart_Layout * @return PHPExcel_Chart_Layout
*/ */
public function setYMode($value) { public function setYMode($value)
$this->_yMode = $value; {
$this->yMode = $value;
return $this; return $this;
} }
@@ -219,8 +239,9 @@ class PHPExcel_Chart_Layout
* *
* @return number * @return number
*/ */
public function getXPosition() { public function getXPosition()
return $this->_xPos; {
return $this->xPos;
} }
/** /**
@@ -229,8 +250,9 @@ class PHPExcel_Chart_Layout
* @param X-Position $value * @param X-Position $value
* @return PHPExcel_Chart_Layout * @return PHPExcel_Chart_Layout
*/ */
public function setXPosition($value) { public function setXPosition($value)
$this->_xPos = $value; {
$this->xPos = $value;
return $this; return $this;
} }
@@ -239,8 +261,9 @@ class PHPExcel_Chart_Layout
* *
* @return number * @return number
*/ */
public function getYPosition() { public function getYPosition()
return $this->_yPos; {
return $this->yPos;
} }
/** /**
@@ -249,8 +272,9 @@ class PHPExcel_Chart_Layout
* @param Y-Position $value * @param Y-Position $value
* @return PHPExcel_Chart_Layout * @return PHPExcel_Chart_Layout
*/ */
public function setYPosition($value) { public function setYPosition($value)
$this->_yPos = $value; {
$this->yPos = $value;
return $this; return $this;
} }
@@ -259,8 +283,9 @@ class PHPExcel_Chart_Layout
* *
* @return number * @return number
*/ */
public function getWidth() { public function getWidth()
return $this->_width; {
return $this->width;
} }
/** /**
@@ -269,8 +294,9 @@ class PHPExcel_Chart_Layout
* @param Width $value * @param Width $value
* @return PHPExcel_Chart_Layout * @return PHPExcel_Chart_Layout
*/ */
public function setWidth($value) { public function setWidth($value)
$this->_width = $value; {
$this->width = $value;
return $this; return $this;
} }
@@ -279,8 +305,9 @@ class PHPExcel_Chart_Layout
* *
* @return number * @return number
*/ */
public function getHeight() { public function getHeight()
return $this->_height; {
return $this->height;
} }
/** /**
@@ -289,8 +316,9 @@ class PHPExcel_Chart_Layout
* @param Height $value * @param Height $value
* @return PHPExcel_Chart_Layout * @return PHPExcel_Chart_Layout
*/ */
public function setHeight($value) { public function setHeight($value)
$this->_height = $value; {
$this->height = $value;
return $this; return $this;
} }
@@ -300,8 +328,9 @@ class PHPExcel_Chart_Layout
* *
* @return boolean * @return boolean
*/ */
public function getShowLegendKey() { public function getShowLegendKey()
return $this->_showLegendKey; {
return $this->showLegendKey;
} }
/** /**
@@ -311,8 +340,9 @@ class PHPExcel_Chart_Layout
* @param boolean $value Show legend key * @param boolean $value Show legend key
* @return PHPExcel_Chart_Layout * @return PHPExcel_Chart_Layout
*/ */
public function setShowLegendKey($value) { public function setShowLegendKey($value)
$this->_showLegendKey = $value; {
$this->showLegendKey = $value;
return $this; return $this;
} }
@@ -321,8 +351,9 @@ class PHPExcel_Chart_Layout
* *
* @return boolean * @return boolean
*/ */
public function getShowVal() { public function getShowVal()
return $this->_showVal; {
return $this->showVal;
} }
/** /**
@@ -332,8 +363,9 @@ class PHPExcel_Chart_Layout
* @param boolean $value Show val * @param boolean $value Show val
* @return PHPExcel_Chart_Layout * @return PHPExcel_Chart_Layout
*/ */
public function setShowVal($value) { public function setShowVal($value)
$this->_showVal = $value; {
$this->showVal = $value;
return $this; return $this;
} }
@@ -342,8 +374,9 @@ class PHPExcel_Chart_Layout
* *
* @return boolean * @return boolean
*/ */
public function getShowCatName() { public function getShowCatName()
return $this->_showCatName; {
return $this->showCatName;
} }
/** /**
@@ -353,8 +386,9 @@ class PHPExcel_Chart_Layout
* @param boolean $value Show cat name * @param boolean $value Show cat name
* @return PHPExcel_Chart_Layout * @return PHPExcel_Chart_Layout
*/ */
public function setShowCatName($value) { public function setShowCatName($value)
$this->_showCatName = $value; {
$this->showCatName = $value;
return $this; return $this;
} }
@@ -363,8 +397,9 @@ class PHPExcel_Chart_Layout
* *
* @return boolean * @return boolean
*/ */
public function getShowSerName() { public function getShowSerName()
return $this->_showSerName; {
return $this->showSerName;
} }
/** /**
@@ -374,8 +409,9 @@ class PHPExcel_Chart_Layout
* @param boolean $value Show series name * @param boolean $value Show series name
* @return PHPExcel_Chart_Layout * @return PHPExcel_Chart_Layout
*/ */
public function setShowSerName($value) { public function setShowSerName($value)
$this->_showSerName = $value; {
$this->showSerName = $value;
return $this; return $this;
} }
@@ -384,8 +420,9 @@ class PHPExcel_Chart_Layout
* *
* @return boolean * @return boolean
*/ */
public function getShowPercent() { public function getShowPercent()
return $this->_showPercent; {
return $this->showPercent;
} }
/** /**
@@ -395,8 +432,9 @@ class PHPExcel_Chart_Layout
* @param boolean $value Show percentage * @param boolean $value Show percentage
* @return PHPExcel_Chart_Layout * @return PHPExcel_Chart_Layout
*/ */
public function setShowPercent($value) { public function setShowPercent($value)
$this->_showPercent = $value; {
$this->showPercent = $value;
return $this; return $this;
} }
@@ -405,8 +443,9 @@ class PHPExcel_Chart_Layout
* *
* @return boolean * @return boolean
*/ */
public function getShowBubbleSize() { public function getShowBubbleSize()
return $this->_showBubbleSize; {
return $this->showBubbleSize;
} }
/** /**
@@ -416,8 +455,9 @@ class PHPExcel_Chart_Layout
* @param boolean $value Show bubble size * @param boolean $value Show bubble size
* @return PHPExcel_Chart_Layout * @return PHPExcel_Chart_Layout
*/ */
public function setShowBubbleSize($value) { public function setShowBubbleSize($value)
$this->_showBubbleSize = $value; {
$this->showBubbleSize = $value;
return $this; return $this;
} }
@@ -426,8 +466,9 @@ class PHPExcel_Chart_Layout
* *
* @return boolean * @return boolean
*/ */
public function getShowLeaderLines() { public function getShowLeaderLines()
return $this->_showLeaderLines; {
return $this->showLeaderLines;
} }
/** /**
@@ -437,9 +478,9 @@ class PHPExcel_Chart_Layout
* @param boolean $value Show leader lines * @param boolean $value Show leader lines
* @return PHPExcel_Chart_Layout * @return PHPExcel_Chart_Layout
*/ */
public function setShowLeaderLines($value) { public function setShowLeaderLines($value)
$this->_showLeaderLines = $value; {
$this->showLeaderLines = $value;
return $this; return $this;
} }
} }

View File

@@ -1,8 +1,9 @@
<?php <?php
/** /**
* PHPExcel * PHPExcel_Chart_Legend
* *
* Copyright (c) 2006 - 2014 PHPExcel * Copyright (c) 2006 - 2015 PHPExcel
* *
* This library is free software; you can redistribute it and/or * This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public * modify it under the terms of the GNU Lesser General Public
@@ -20,18 +21,9 @@
* *
* @category PHPExcel * @category PHPExcel
* @package PHPExcel_Chart * @package PHPExcel_Chart
* @copyright Copyright (c) 2006 - 2014 PHPExcel (http://www.codeplex.com/PHPExcel) * @copyright Copyright (c) 2006 - 2015 PHPExcel (http://www.codeplex.com/PHPExcel)
* @license http://www.gnu.org/licenses/old-licenses/lgpl-2.1.txt LGPL * @license http://www.gnu.org/licenses/old-licenses/lgpl-2.1.txt LGPL
* @version 1.8.0, 2014-03-02 * @version ##VERSION##, ##DATE##
*/
/**
* PHPExcel_Chart_Legend
*
* @category PHPExcel
* @package PHPExcel_Chart
* @copyright Copyright (c) 2006 - 2014 PHPExcel (http://www.codeplex.com/PHPExcel)
*/ */
class PHPExcel_Chart_Legend class PHPExcel_Chart_Legend
{ {
@@ -49,7 +41,8 @@ class PHPExcel_Chart_Legend
const POSITION_TOP = 't'; const POSITION_TOP = 't';
const POSITION_TOPRIGHT = 'tr'; const POSITION_TOPRIGHT = 'tr';
private static $_positionXLref = array( self::xlLegendPositionBottom => self::POSITION_BOTTOM, private static $positionXLref = array(
self::xlLegendPositionBottom => self::POSITION_BOTTOM,
self::xlLegendPositionCorner => self::POSITION_TOPRIGHT, self::xlLegendPositionCorner => self::POSITION_TOPRIGHT,
self::xlLegendPositionCustom => '??', self::xlLegendPositionCustom => '??',
self::xlLegendPositionLeft => self::POSITION_LEFT, self::xlLegendPositionLeft => self::POSITION_LEFT,
@@ -62,30 +55,30 @@ class PHPExcel_Chart_Legend
* *
* @var string * @var string
*/ */
private $_position = self::POSITION_RIGHT; private $position = self::POSITION_RIGHT;
/** /**
* Allow overlay of other elements? * Allow overlay of other elements?
* *
* @var boolean * @var boolean
*/ */
private $_overlay = TRUE; private $overlay = true;
/** /**
* Legend Layout * Legend Layout
* *
* @var PHPExcel_Chart_Layout * @var PHPExcel_Chart_Layout
*/ */
private $_layout = NULL; private $layout = null;
/** /**
* Create a new PHPExcel_Chart_Legend * Create a new PHPExcel_Chart_Legend
*/ */
public function __construct($position = self::POSITION_RIGHT, PHPExcel_Chart_Layout $layout = NULL, $overlay = FALSE) public function __construct($position = self::POSITION_RIGHT, PHPExcel_Chart_Layout $layout = null, $overlay = false)
{ {
$this->setPosition($position); $this->setPosition($position);
$this->_layout = $layout; $this->layout = $layout;
$this->setOverlay($overlay); $this->setOverlay($overlay);
} }
@@ -94,8 +87,9 @@ class PHPExcel_Chart_Legend
* *
* @return string * @return string
*/ */
public function getPosition() { public function getPosition()
return $this->_position; {
return $this->position;
} }
/** /**
@@ -103,12 +97,13 @@ class PHPExcel_Chart_Legend
* *
* @param string $position * @param string $position
*/ */
public function setPosition($position = self::POSITION_RIGHT) { public function setPosition($position = self::POSITION_RIGHT)
if (!in_array($position,self::$_positionXLref)) { {
if (!in_array($position, self::$positionXLref)) {
return false; return false;
} }
$this->_position = $position; $this->position = $position;
return true; return true;
} }
@@ -117,8 +112,9 @@ class PHPExcel_Chart_Legend
* *
* @return number * @return number
*/ */
public function getPositionXL() { public function getPositionXL()
return array_search($this->_position,self::$_positionXLref); {
return array_search($this->position, self::$positionXLref);
} }
/** /**
@@ -126,12 +122,13 @@ class PHPExcel_Chart_Legend
* *
* @param number $positionXL * @param number $positionXL
*/ */
public function setPositionXL($positionXL = self::xlLegendPositionRight) { public function setPositionXL($positionXL = self::xlLegendPositionRight)
if (!array_key_exists($positionXL,self::$_positionXLref)) { {
if (!array_key_exists($positionXL, self::$positionXLref)) {
return false; return false;
} }
$this->_position = self::$_positionXLref[$positionXL]; $this->position = self::$positionXLref[$positionXL];
return true; return true;
} }
@@ -140,8 +137,9 @@ class PHPExcel_Chart_Legend
* *
* @return boolean * @return boolean
*/ */
public function getOverlay() { public function getOverlay()
return $this->_overlay; {
return $this->overlay;
} }
/** /**
@@ -150,12 +148,13 @@ class PHPExcel_Chart_Legend
* @param boolean $overlay * @param boolean $overlay
* @return boolean * @return boolean
*/ */
public function setOverlay($overlay = FALSE) { public function setOverlay($overlay = false)
{
if (!is_bool($overlay)) { if (!is_bool($overlay)) {
return false; return false;
} }
$this->_overlay = $overlay; $this->overlay = $overlay;
return true; return true;
} }
@@ -164,8 +163,8 @@ class PHPExcel_Chart_Legend
* *
* @return PHPExcel_Chart_Layout * @return PHPExcel_Chart_Layout
*/ */
public function getLayout() { public function getLayout()
return $this->_layout; {
return $this->layout;
} }
} }

View File

@@ -1,8 +1,9 @@
<?php <?php
/** /**
* PHPExcel * PHPExcel_Chart_PlotArea
* *
* Copyright (c) 2006 - 2014 PHPExcel * Copyright (c) 2006 - 2015 PHPExcel
* *
* This library is free software; you can redistribute it and/or * This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public * modify it under the terms of the GNU Lesser General Public
@@ -20,18 +21,9 @@
* *
* @category PHPExcel * @category PHPExcel
* @package PHPExcel_Chart * @package PHPExcel_Chart
* @copyright Copyright (c) 2006 - 2014 PHPExcel (http://www.codeplex.com/PHPExcel) * @copyright Copyright (c) 2006 - 2015 PHPExcel (http://www.codeplex.com/PHPExcel)
* @license http://www.gnu.org/licenses/old-licenses/lgpl-2.1.txt LGPL * @license http://www.gnu.org/licenses/old-licenses/lgpl-2.1.txt LGPL
* @version 1.8.0, 2014-03-02 * @version ##VERSION##, ##DATE##
*/
/**
* PHPExcel_Chart_PlotArea
*
* @category PHPExcel
* @package PHPExcel_Chart
* @copyright Copyright (c) 2006 - 2014 PHPExcel (http://www.codeplex.com/PHPExcel)
*/ */
class PHPExcel_Chart_PlotArea class PHPExcel_Chart_PlotArea
{ {
@@ -40,22 +32,22 @@ class PHPExcel_Chart_PlotArea
* *
* @var PHPExcel_Chart_Layout * @var PHPExcel_Chart_Layout
*/ */
private $_layout = null; private $layout = null;
/** /**
* Plot Series * Plot Series
* *
* @var array of PHPExcel_Chart_DataSeries * @var array of PHPExcel_Chart_DataSeries
*/ */
private $_plotSeries = array(); private $plotSeries = array();
/** /**
* Create a new PHPExcel_Chart_PlotArea * Create a new PHPExcel_Chart_PlotArea
*/ */
public function __construct(PHPExcel_Chart_Layout $layout = null, $plotSeries = array()) public function __construct(PHPExcel_Chart_Layout $layout = null, $plotSeries = array())
{ {
$this->_layout = $layout; $this->layout = $layout;
$this->_plotSeries = $plotSeries; $this->plotSeries = $plotSeries;
} }
/** /**
@@ -63,8 +55,9 @@ class PHPExcel_Chart_PlotArea
* *
* @return PHPExcel_Chart_Layout * @return PHPExcel_Chart_Layout
*/ */
public function getLayout() { public function getLayout()
return $this->_layout; {
return $this->layout;
} }
/** /**
@@ -72,8 +65,9 @@ class PHPExcel_Chart_PlotArea
* *
* @return array of PHPExcel_Chart_DataSeries * @return array of PHPExcel_Chart_DataSeries
*/ */
public function getPlotGroupCount() { public function getPlotGroupCount()
return count($this->_plotSeries); {
return count($this->plotSeries);
} }
/** /**
@@ -81,9 +75,10 @@ class PHPExcel_Chart_PlotArea
* *
* @return integer * @return integer
*/ */
public function getPlotSeriesCount() { public function getPlotSeriesCount()
{
$seriesCount = 0; $seriesCount = 0;
foreach($this->_plotSeries as $plot) { foreach ($this->plotSeries as $plot) {
$seriesCount += $plot->getPlotSeriesCount(); $seriesCount += $plot->getPlotSeriesCount();
} }
return $seriesCount; return $seriesCount;
@@ -94,8 +89,9 @@ class PHPExcel_Chart_PlotArea
* *
* @return array of PHPExcel_Chart_DataSeries * @return array of PHPExcel_Chart_DataSeries
*/ */
public function getPlotGroup() { public function getPlotGroup()
return $this->_plotSeries; {
return $this->plotSeries;
} }
/** /**
@@ -103,8 +99,9 @@ class PHPExcel_Chart_PlotArea
* *
* @return PHPExcel_Chart_DataSeries * @return PHPExcel_Chart_DataSeries
*/ */
public function getPlotGroupByIndex($index) { public function getPlotGroupByIndex($index)
return $this->_plotSeries[$index]; {
return $this->plotSeries[$index];
} }
/** /**
@@ -113,16 +110,17 @@ class PHPExcel_Chart_PlotArea
* @param [PHPExcel_Chart_DataSeries] * @param [PHPExcel_Chart_DataSeries]
* @return PHPExcel_Chart_PlotArea * @return PHPExcel_Chart_PlotArea
*/ */
public function setPlotSeries($plotSeries = array()) { public function setPlotSeries($plotSeries = array())
$this->_plotSeries = $plotSeries; {
$this->plotSeries = $plotSeries;
return $this; return $this;
} }
public function refresh(PHPExcel_Worksheet $worksheet) { public function refresh(PHPExcel_Worksheet $worksheet)
foreach($this->_plotSeries as $plotSeries) { {
foreach ($this->plotSeries as $plotSeries) {
$plotSeries->refresh($worksheet); $plotSeries->refresh($worksheet);
} }
} }
} }

View File

@@ -0,0 +1,363 @@
<?php
/**
* Created by PhpStorm.
* User: nhw2h8s
* Date: 7/2/14
* Time: 5:45 PM
*/
abstract class PHPExcel_Chart_Properties
{
const
EXCEL_COLOR_TYPE_STANDARD = 'prstClr',
EXCEL_COLOR_TYPE_SCHEME = 'schemeClr',
EXCEL_COLOR_TYPE_ARGB = 'srgbClr';
const
AXIS_LABELS_LOW = 'low',
AXIS_LABELS_HIGH = 'high',
AXIS_LABELS_NEXT_TO = 'nextTo',
AXIS_LABELS_NONE = 'none';
const
TICK_MARK_NONE = 'none',
TICK_MARK_INSIDE = 'in',
TICK_MARK_OUTSIDE = 'out',
TICK_MARK_CROSS = 'cross';
const
HORIZONTAL_CROSSES_AUTOZERO = 'autoZero',
HORIZONTAL_CROSSES_MAXIMUM = 'max';
const
FORMAT_CODE_GENERAL = 'General',
FORMAT_CODE_NUMBER = '#,##0.00',
FORMAT_CODE_CURRENCY = '$#,##0.00',
FORMAT_CODE_ACCOUNTING = '_($* #,##0.00_);_($* (#,##0.00);_($* "-"??_);_(@_)',
FORMAT_CODE_DATE = 'm/d/yyyy',
FORMAT_CODE_TIME = '[$-F400]h:mm:ss AM/PM',
FORMAT_CODE_PERCENTAGE = '0.00%',
FORMAT_CODE_FRACTION = '# ?/?',
FORMAT_CODE_SCIENTIFIC = '0.00E+00',
FORMAT_CODE_TEXT = '@',
FORMAT_CODE_SPECIAL = '00000';
const
ORIENTATION_NORMAL = 'minMax',
ORIENTATION_REVERSED = 'maxMin';
const
LINE_STYLE_COMPOUND_SIMPLE = 'sng',
LINE_STYLE_COMPOUND_DOUBLE = 'dbl',
LINE_STYLE_COMPOUND_THICKTHIN = 'thickThin',
LINE_STYLE_COMPOUND_THINTHICK = 'thinThick',
LINE_STYLE_COMPOUND_TRIPLE = 'tri',
LINE_STYLE_DASH_SOLID = 'solid',
LINE_STYLE_DASH_ROUND_DOT = 'sysDot',
LINE_STYLE_DASH_SQUERE_DOT = 'sysDash',
LINE_STYPE_DASH_DASH = 'dash',
LINE_STYLE_DASH_DASH_DOT = 'dashDot',
LINE_STYLE_DASH_LONG_DASH = 'lgDash',
LINE_STYLE_DASH_LONG_DASH_DOT = 'lgDashDot',
LINE_STYLE_DASH_LONG_DASH_DOT_DOT = 'lgDashDotDot',
LINE_STYLE_CAP_SQUARE = 'sq',
LINE_STYLE_CAP_ROUND = 'rnd',
LINE_STYLE_CAP_FLAT = 'flat',
LINE_STYLE_JOIN_ROUND = 'bevel',
LINE_STYLE_JOIN_MITER = 'miter',
LINE_STYLE_JOIN_BEVEL = 'bevel',
LINE_STYLE_ARROW_TYPE_NOARROW = null,
LINE_STYLE_ARROW_TYPE_ARROW = 'triangle',
LINE_STYLE_ARROW_TYPE_OPEN = 'arrow',
LINE_STYLE_ARROW_TYPE_STEALTH = 'stealth',
LINE_STYLE_ARROW_TYPE_DIAMOND = 'diamond',
LINE_STYLE_ARROW_TYPE_OVAL = 'oval',
LINE_STYLE_ARROW_SIZE_1 = 1,
LINE_STYLE_ARROW_SIZE_2 = 2,
LINE_STYLE_ARROW_SIZE_3 = 3,
LINE_STYLE_ARROW_SIZE_4 = 4,
LINE_STYLE_ARROW_SIZE_5 = 5,
LINE_STYLE_ARROW_SIZE_6 = 6,
LINE_STYLE_ARROW_SIZE_7 = 7,
LINE_STYLE_ARROW_SIZE_8 = 8,
LINE_STYLE_ARROW_SIZE_9 = 9;
const
SHADOW_PRESETS_NOSHADOW = null,
SHADOW_PRESETS_OUTER_BOTTTOM_RIGHT = 1,
SHADOW_PRESETS_OUTER_BOTTOM = 2,
SHADOW_PRESETS_OUTER_BOTTOM_LEFT = 3,
SHADOW_PRESETS_OUTER_RIGHT = 4,
SHADOW_PRESETS_OUTER_CENTER = 5,
SHADOW_PRESETS_OUTER_LEFT = 6,
SHADOW_PRESETS_OUTER_TOP_RIGHT = 7,
SHADOW_PRESETS_OUTER_TOP = 8,
SHADOW_PRESETS_OUTER_TOP_LEFT = 9,
SHADOW_PRESETS_INNER_BOTTTOM_RIGHT = 10,
SHADOW_PRESETS_INNER_BOTTOM = 11,
SHADOW_PRESETS_INNER_BOTTOM_LEFT = 12,
SHADOW_PRESETS_INNER_RIGHT = 13,
SHADOW_PRESETS_INNER_CENTER = 14,
SHADOW_PRESETS_INNER_LEFT = 15,
SHADOW_PRESETS_INNER_TOP_RIGHT = 16,
SHADOW_PRESETS_INNER_TOP = 17,
SHADOW_PRESETS_INNER_TOP_LEFT = 18,
SHADOW_PRESETS_PERSPECTIVE_BELOW = 19,
SHADOW_PRESETS_PERSPECTIVE_UPPER_RIGHT = 20,
SHADOW_PRESETS_PERSPECTIVE_UPPER_LEFT = 21,
SHADOW_PRESETS_PERSPECTIVE_LOWER_RIGHT = 22,
SHADOW_PRESETS_PERSPECTIVE_LOWER_LEFT = 23;
protected function getExcelPointsWidth($width)
{
return $width * 12700;
}
protected function getExcelPointsAngle($angle)
{
return $angle * 60000;
}
protected function getTrueAlpha($alpha)
{
return (string) 100 - $alpha . '000';
}
protected function setColorProperties($color, $alpha, $type)
{
return array(
'type' => (string) $type,
'value' => (string) $color,
'alpha' => (string) $this->getTrueAlpha($alpha)
);
}
protected function getLineStyleArrowSize($array_selector, $array_kay_selector)
{
$sizes = array(
1 => array('w' => 'sm', 'len' => 'sm'),
2 => array('w' => 'sm', 'len' => 'med'),
3 => array('w' => 'sm', 'len' => 'lg'),
4 => array('w' => 'med', 'len' => 'sm'),
5 => array('w' => 'med', 'len' => 'med'),
6 => array('w' => 'med', 'len' => 'lg'),
7 => array('w' => 'lg', 'len' => 'sm'),
8 => array('w' => 'lg', 'len' => 'med'),
9 => array('w' => 'lg', 'len' => 'lg')
);
return $sizes[$array_selector][$array_kay_selector];
}
protected function getShadowPresetsMap($shadow_presets_option)
{
$presets_options = array(
//OUTER
1 => array(
'effect' => 'outerShdw',
'blur' => '50800',
'distance' => '38100',
'direction' => '2700000',
'algn' => 'tl',
'rotWithShape' => '0'
),
2 => array(
'effect' => 'outerShdw',
'blur' => '50800',
'distance' => '38100',
'direction' => '5400000',
'algn' => 't',
'rotWithShape' => '0'
),
3 => array(
'effect' => 'outerShdw',
'blur' => '50800',
'distance' => '38100',
'direction' => '8100000',
'algn' => 'tr',
'rotWithShape' => '0'
),
4 => array(
'effect' => 'outerShdw',
'blur' => '50800',
'distance' => '38100',
'algn' => 'l',
'rotWithShape' => '0'
),
5 => array(
'effect' => 'outerShdw',
'size' => array(
'sx' => '102000',
'sy' => '102000'
)
,
'blur' => '63500',
'distance' => '38100',
'algn' => 'ctr',
'rotWithShape' => '0'
),
6 => array(
'effect' => 'outerShdw',
'blur' => '50800',
'distance' => '38100',
'direction' => '10800000',
'algn' => 'r',
'rotWithShape' => '0'
),
7 => array(
'effect' => 'outerShdw',
'blur' => '50800',
'distance' => '38100',
'direction' => '18900000',
'algn' => 'bl',
'rotWithShape' => '0'
),
8 => array(
'effect' => 'outerShdw',
'blur' => '50800',
'distance' => '38100',
'direction' => '16200000',
'rotWithShape' => '0'
),
9 => array(
'effect' => 'outerShdw',
'blur' => '50800',
'distance' => '38100',
'direction' => '13500000',
'algn' => 'br',
'rotWithShape' => '0'
),
//INNER
10 => array(
'effect' => 'innerShdw',
'blur' => '63500',
'distance' => '50800',
'direction' => '2700000',
),
11 => array(
'effect' => 'innerShdw',
'blur' => '63500',
'distance' => '50800',
'direction' => '5400000',
),
12 => array(
'effect' => 'innerShdw',
'blur' => '63500',
'distance' => '50800',
'direction' => '8100000',
),
13 => array(
'effect' => 'innerShdw',
'blur' => '63500',
'distance' => '50800',
),
14 => array(
'effect' => 'innerShdw',
'blur' => '114300',
),
15 => array(
'effect' => 'innerShdw',
'blur' => '63500',
'distance' => '50800',
'direction' => '10800000',
),
16 => array(
'effect' => 'innerShdw',
'blur' => '63500',
'distance' => '50800',
'direction' => '18900000',
),
17 => array(
'effect' => 'innerShdw',
'blur' => '63500',
'distance' => '50800',
'direction' => '16200000',
),
18 => array(
'effect' => 'innerShdw',
'blur' => '63500',
'distance' => '50800',
'direction' => '13500000',
),
//perspective
19 => array(
'effect' => 'outerShdw',
'blur' => '152400',
'distance' => '317500',
'size' => array(
'sx' => '90000',
'sy' => '-19000',
),
'direction' => '5400000',
'rotWithShape' => '0',
),
20 => array(
'effect' => 'outerShdw',
'blur' => '76200',
'direction' => '18900000',
'size' => array(
'sy' => '23000',
'kx' => '-1200000',
),
'algn' => 'bl',
'rotWithShape' => '0',
),
21 => array(
'effect' => 'outerShdw',
'blur' => '76200',
'direction' => '13500000',
'size' => array(
'sy' => '23000',
'kx' => '1200000',
),
'algn' => 'br',
'rotWithShape' => '0',
),
22 => array(
'effect' => 'outerShdw',
'blur' => '76200',
'distance' => '12700',
'direction' => '2700000',
'size' => array(
'sy' => '-23000',
'kx' => '-800400',
),
'algn' => 'bl',
'rotWithShape' => '0',
),
23 => array(
'effect' => 'outerShdw',
'blur' => '76200',
'distance' => '12700',
'direction' => '8100000',
'size' => array(
'sy' => '-23000',
'kx' => '800400',
),
'algn' => 'br',
'rotWithShape' => '0',
),
);
return $presets_options[$shadow_presets_option];
}
protected function getArrayElementsValue($properties, $elements)
{
$reference = & $properties;
if (!is_array($elements)) {
return $reference[$elements];
} else {
foreach ($elements as $keys) {
$reference = & $reference[$keys];
}
return $reference;
}
return $this;
}
}

File diff suppressed because it is too large Load Diff

View File

@@ -1,8 +1,9 @@
<?php <?php
/** /**
* PHPExcel * PHPExcel_Chart_Title
* *
* Copyright (c) 2006 - 2014 PHPExcel * Copyright (c) 2006 - 2015 PHPExcel
* *
* This library is free software; you can redistribute it and/or * This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public * modify it under the terms of the GNU Lesser General Public
@@ -20,18 +21,9 @@
* *
* @category PHPExcel * @category PHPExcel
* @package PHPExcel_Chart * @package PHPExcel_Chart
* @copyright Copyright (c) 2006 - 2014 PHPExcel (http://www.codeplex.com/PHPExcel) * @copyright Copyright (c) 2006 - 2015 PHPExcel (http://www.codeplex.com/PHPExcel)
* @license http://www.gnu.org/licenses/old-licenses/lgpl-2.1.txt LGPL * @license http://www.gnu.org/licenses/old-licenses/lgpl-2.1.txt LGPL
* @version 1.8.0, 2014-03-02 * @version ##VERSION##, ##DATE##
*/
/**
* PHPExcel_Chart_Title
*
* @category PHPExcel
* @package PHPExcel_Chart
* @copyright Copyright (c) 2006 - 2014 PHPExcel (http://www.codeplex.com/PHPExcel)
*/ */
class PHPExcel_Chart_Title class PHPExcel_Chart_Title
{ {
@@ -41,22 +33,22 @@ class PHPExcel_Chart_Title
* *
* @var string * @var string
*/ */
private $_caption = null; private $caption = null;
/** /**
* Title Layout * Title Layout
* *
* @var PHPExcel_Chart_Layout * @var PHPExcel_Chart_Layout
*/ */
private $_layout = null; private $layout = null;
/** /**
* Create a new PHPExcel_Chart_Title * Create a new PHPExcel_Chart_Title
*/ */
public function __construct($caption = null, PHPExcel_Chart_Layout $layout = null) public function __construct($caption = null, PHPExcel_Chart_Layout $layout = null)
{ {
$this->_caption = $caption; $this->caption = $caption;
$this->_layout = $layout; $this->layout = $layout;
} }
/** /**
@@ -64,8 +56,9 @@ class PHPExcel_Chart_Title
* *
* @return string * @return string
*/ */
public function getCaption() { public function getCaption()
return $this->_caption; {
return $this->caption;
} }
/** /**
@@ -74,8 +67,9 @@ class PHPExcel_Chart_Title
* @param string $caption * @param string $caption
* @return PHPExcel_Chart_Title * @return PHPExcel_Chart_Title
*/ */
public function setCaption($caption = null) { public function setCaption($caption = null)
$this->_caption = $caption; {
$this->caption = $caption;
return $this; return $this;
} }
@@ -85,8 +79,8 @@ class PHPExcel_Chart_Title
* *
* @return PHPExcel_Chart_Layout * @return PHPExcel_Chart_Layout
*/ */
public function getLayout() { public function getLayout()
return $this->_layout; {
return $this->layout;
} }
} }

View File

@@ -1,8 +1,9 @@
<?php <?php
/** /**
* PHPExcel * PHPExcel_Comment
* *
* Copyright (c) 2006 - 2014 PHPExcel * Copyright (c) 2006 - 2015 PHPExcel
* *
* This library is free software; you can redistribute it and/or * This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public * modify it under the terms of the GNU Lesser General Public
@@ -20,18 +21,9 @@
* *
* @category PHPExcel * @category PHPExcel
* @package PHPExcel * @package PHPExcel
* @copyright Copyright (c) 2006 - 2014 PHPExcel (http://www.codeplex.com/PHPExcel) * @copyright Copyright (c) 2006 - 2015 PHPExcel (http://www.codeplex.com/PHPExcel)
* @license http://www.gnu.org/licenses/old-licenses/lgpl-2.1.txt LGPL * @license http://www.gnu.org/licenses/old-licenses/lgpl-2.1.txt LGPL
* @version 1.8.0, 2014-03-02 * @version ##VERSION##, ##DATE##
*/
/**
* PHPExcel_Comment
*
* @category PHPExcel
* @package PHPExcel
* @copyright Copyright (c) 2006 - 2014 PHPExcel (http://www.codeplex.com/PHPExcel)
*/ */
class PHPExcel_Comment implements PHPExcel_IComparable class PHPExcel_Comment implements PHPExcel_IComparable
{ {
@@ -40,63 +32,63 @@ class PHPExcel_Comment implements PHPExcel_IComparable
* *
* @var string * @var string
*/ */
private $_author; private $author;
/** /**
* Rich text comment * Rich text comment
* *
* @var PHPExcel_RichText * @var PHPExcel_RichText
*/ */
private $_text; private $text;
/** /**
* Comment width (CSS style, i.e. XXpx or YYpt) * Comment width (CSS style, i.e. XXpx or YYpt)
* *
* @var string * @var string
*/ */
private $_width = '96pt'; private $width = '96pt';
/** /**
* Left margin (CSS style, i.e. XXpx or YYpt) * Left margin (CSS style, i.e. XXpx or YYpt)
* *
* @var string * @var string
*/ */
private $_marginLeft = '59.25pt'; private $marginLeft = '59.25pt';
/** /**
* Top margin (CSS style, i.e. XXpx or YYpt) * Top margin (CSS style, i.e. XXpx or YYpt)
* *
* @var string * @var string
*/ */
private $_marginTop = '1.5pt'; private $marginTop = '1.5pt';
/** /**
* Visible * Visible
* *
* @var boolean * @var boolean
*/ */
private $_visible = false; private $visible = false;
/** /**
* Comment height (CSS style, i.e. XXpx or YYpt) * Comment height (CSS style, i.e. XXpx or YYpt)
* *
* @var string * @var string
*/ */
private $_height = '55.5pt'; private $height = '55.5pt';
/** /**
* Comment fill color * Comment fill color
* *
* @var PHPExcel_Style_Color * @var PHPExcel_Style_Color
*/ */
private $_fillColor; private $fillColor;
/** /**
* Alignment * Alignment
* *
* @var string * @var string
*/ */
private $_alignment; private $alignment;
/** /**
* Create a new PHPExcel_Comment * Create a new PHPExcel_Comment
@@ -106,10 +98,10 @@ class PHPExcel_Comment implements PHPExcel_IComparable
public function __construct() public function __construct()
{ {
// Initialise variables // Initialise variables
$this->_author = 'Author'; $this->author = 'Author';
$this->_text = new PHPExcel_RichText(); $this->text = new PHPExcel_RichText();
$this->_fillColor = new PHPExcel_Style_Color('FFFFFFE1'); $this->fillColor = new PHPExcel_Style_Color('FFFFFFE1');
$this->_alignment = PHPExcel_Style_Alignment::HORIZONTAL_GENERAL; $this->alignment = PHPExcel_Style_Alignment::HORIZONTAL_GENERAL;
} }
/** /**
@@ -117,8 +109,9 @@ class PHPExcel_Comment implements PHPExcel_IComparable
* *
* @return string * @return string
*/ */
public function getAuthor() { public function getAuthor()
return $this->_author; {
return $this->author;
} }
/** /**
@@ -127,8 +120,9 @@ class PHPExcel_Comment implements PHPExcel_IComparable
* @param string $pValue * @param string $pValue
* @return PHPExcel_Comment * @return PHPExcel_Comment
*/ */
public function setAuthor($pValue = '') { public function setAuthor($pValue = '')
$this->_author = $pValue; {
$this->author = $pValue;
return $this; return $this;
} }
@@ -137,8 +131,9 @@ class PHPExcel_Comment implements PHPExcel_IComparable
* *
* @return PHPExcel_RichText * @return PHPExcel_RichText
*/ */
public function getText() { public function getText()
return $this->_text; {
return $this->text;
} }
/** /**
@@ -147,8 +142,9 @@ class PHPExcel_Comment implements PHPExcel_IComparable
* @param PHPExcel_RichText $pValue * @param PHPExcel_RichText $pValue
* @return PHPExcel_Comment * @return PHPExcel_Comment
*/ */
public function setText(PHPExcel_RichText $pValue) { public function setText(PHPExcel_RichText $pValue)
$this->_text = $pValue; {
$this->text = $pValue;
return $this; return $this;
} }
@@ -157,8 +153,9 @@ class PHPExcel_Comment implements PHPExcel_IComparable
* *
* @return string * @return string
*/ */
public function getWidth() { public function getWidth()
return $this->_width; {
return $this->width;
} }
/** /**
@@ -167,8 +164,9 @@ class PHPExcel_Comment implements PHPExcel_IComparable
* @param string $value * @param string $value
* @return PHPExcel_Comment * @return PHPExcel_Comment
*/ */
public function setWidth($value = '96pt') { public function setWidth($value = '96pt')
$this->_width = $value; {
$this->width = $value;
return $this; return $this;
} }
@@ -177,8 +175,9 @@ class PHPExcel_Comment implements PHPExcel_IComparable
* *
* @return string * @return string
*/ */
public function getHeight() { public function getHeight()
return $this->_height; {
return $this->height;
} }
/** /**
@@ -187,8 +186,9 @@ class PHPExcel_Comment implements PHPExcel_IComparable
* @param string $value * @param string $value
* @return PHPExcel_Comment * @return PHPExcel_Comment
*/ */
public function setHeight($value = '55.5pt') { public function setHeight($value = '55.5pt')
$this->_height = $value; {
$this->height = $value;
return $this; return $this;
} }
@@ -197,8 +197,9 @@ class PHPExcel_Comment implements PHPExcel_IComparable
* *
* @return string * @return string
*/ */
public function getMarginLeft() { public function getMarginLeft()
return $this->_marginLeft; {
return $this->marginLeft;
} }
/** /**
@@ -207,8 +208,9 @@ class PHPExcel_Comment implements PHPExcel_IComparable
* @param string $value * @param string $value
* @return PHPExcel_Comment * @return PHPExcel_Comment
*/ */
public function setMarginLeft($value = '59.25pt') { public function setMarginLeft($value = '59.25pt')
$this->_marginLeft = $value; {
$this->marginLeft = $value;
return $this; return $this;
} }
@@ -217,8 +219,9 @@ class PHPExcel_Comment implements PHPExcel_IComparable
* *
* @return string * @return string
*/ */
public function getMarginTop() { public function getMarginTop()
return $this->_marginTop; {
return $this->marginTop;
} }
/** /**
@@ -227,8 +230,9 @@ class PHPExcel_Comment implements PHPExcel_IComparable
* @param string $value * @param string $value
* @return PHPExcel_Comment * @return PHPExcel_Comment
*/ */
public function setMarginTop($value = '1.5pt') { public function setMarginTop($value = '1.5pt')
$this->_marginTop = $value; {
$this->marginTop = $value;
return $this; return $this;
} }
@@ -237,8 +241,9 @@ class PHPExcel_Comment implements PHPExcel_IComparable
* *
* @return boolean * @return boolean
*/ */
public function getVisible() { public function getVisible()
return $this->_visible; {
return $this->visible;
} }
/** /**
@@ -247,8 +252,9 @@ class PHPExcel_Comment implements PHPExcel_IComparable
* @param boolean $value * @param boolean $value
* @return PHPExcel_Comment * @return PHPExcel_Comment
*/ */
public function setVisible($value = false) { public function setVisible($value = false)
$this->_visible = $value; {
$this->visible = $value;
return $this; return $this;
} }
@@ -257,8 +263,9 @@ class PHPExcel_Comment implements PHPExcel_IComparable
* *
* @return PHPExcel_Style_Color * @return PHPExcel_Style_Color
*/ */
public function getFillColor() { public function getFillColor()
return $this->_fillColor; {
return $this->fillColor;
} }
/** /**
@@ -267,8 +274,9 @@ class PHPExcel_Comment implements PHPExcel_IComparable
* @param string $pValue * @param string $pValue
* @return PHPExcel_Comment * @return PHPExcel_Comment
*/ */
public function setAlignment($pValue = PHPExcel_Style_Alignment::HORIZONTAL_GENERAL) { public function setAlignment($pValue = PHPExcel_Style_Alignment::HORIZONTAL_GENERAL)
$this->_alignment = $pValue; {
$this->alignment = $pValue;
return $this; return $this;
} }
@@ -277,8 +285,9 @@ class PHPExcel_Comment implements PHPExcel_IComparable
* *
* @return string * @return string
*/ */
public function getAlignment() { public function getAlignment()
return $this->_alignment; {
return $this->alignment;
} }
/** /**
@@ -286,25 +295,27 @@ class PHPExcel_Comment implements PHPExcel_IComparable
* *
* @return string Hash code * @return string Hash code
*/ */
public function getHashCode() { public function getHashCode()
{
return md5( return md5(
$this->_author $this->author .
. $this->_text->getHashCode() $this->text->getHashCode() .
. $this->_width $this->width .
. $this->_height $this->height .
. $this->_marginLeft $this->marginLeft .
. $this->_marginTop $this->marginTop .
. ($this->_visible ? 1 : 0) ($this->visible ? 1 : 0) .
. $this->_fillColor->getHashCode() $this->fillColor->getHashCode() .
. $this->_alignment $this->alignment .
. __CLASS__ __CLASS__
); );
} }
/** /**
* Implement PHP __clone to create a deep clone, not just a shallow copy. * Implement PHP __clone to create a deep clone, not just a shallow copy.
*/ */
public function __clone() { public function __clone()
{
$vars = get_object_vars($this); $vars = get_object_vars($this);
foreach ($vars as $key => $value) { foreach ($vars as $key => $value) {
if (is_object($value)) { if (is_object($value)) {
@@ -320,8 +331,8 @@ class PHPExcel_Comment implements PHPExcel_IComparable
* *
* @return string * @return string
*/ */
public function __toString() { public function __toString()
return $this->_text->getPlainText(); {
return $this->text->getPlainText();
} }
} }

View File

@@ -1,8 +1,9 @@
<?php <?php
/** /**
* PHPExcel * PHPExcel_DocumentProperties
* *
* Copyright (c) 2006 - 2014 PHPExcel * Copyright (c) 2006 - 2015 PHPExcel
* *
* This library is free software; you can redistribute it and/or * This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public * modify it under the terms of the GNU Lesser General Public
@@ -20,18 +21,9 @@
* *
* @category PHPExcel * @category PHPExcel
* @package PHPExcel * @package PHPExcel
* @copyright Copyright (c) 2006 - 2014 PHPExcel (http://www.codeplex.com/PHPExcel) * @copyright Copyright (c) 2006 - 2015 PHPExcel (http://www.codeplex.com/PHPExcel)
* @license http://www.gnu.org/licenses/old-licenses/lgpl-2.1.txt LGPL * @license http://www.gnu.org/licenses/old-licenses/lgpl-2.1.txt LGPL
* @version 1.8.0, 2014-03-02 * @version ##VERSION##, ##DATE##
*/
/**
* PHPExcel_DocumentProperties
*
* @category PHPExcel
* @package PHPExcel
* @copyright Copyright (c) 2006 - 2014 PHPExcel (http://www.codeplex.com/PHPExcel)
*/ */
class PHPExcel_DocumentProperties class PHPExcel_DocumentProperties
{ {
@@ -48,84 +40,84 @@ class PHPExcel_DocumentProperties
* *
* @var string * @var string
*/ */
private $_creator = 'Unknown Creator'; private $creator = 'Unknown Creator';
/** /**
* LastModifiedBy * LastModifiedBy
* *
* @var string * @var string
*/ */
private $_lastModifiedBy; private $lastModifiedBy;
/** /**
* Created * Created
* *
* @var datetime * @var datetime
*/ */
private $_created; private $created;
/** /**
* Modified * Modified
* *
* @var datetime * @var datetime
*/ */
private $_modified; private $modified;
/** /**
* Title * Title
* *
* @var string * @var string
*/ */
private $_title = 'Untitled Spreadsheet'; private $title = 'Untitled Spreadsheet';
/** /**
* Description * Description
* *
* @var string * @var string
*/ */
private $_description = ''; private $description = '';
/** /**
* Subject * Subject
* *
* @var string * @var string
*/ */
private $_subject = ''; private $subject = '';
/** /**
* Keywords * Keywords
* *
* @var string * @var string
*/ */
private $_keywords = ''; private $keywords = '';
/** /**
* Category * Category
* *
* @var string * @var string
*/ */
private $_category = ''; private $category = '';
/** /**
* Manager * Manager
* *
* @var string * @var string
*/ */
private $_manager = ''; private $manager = '';
/** /**
* Company * Company
* *
* @var string * @var string
*/ */
private $_company = 'Microsoft Corporation'; private $company = 'Microsoft Corporation';
/** /**
* Custom Properties * Custom Properties
* *
* @var string * @var string
*/ */
private $_customProperties = array(); private $customProperties = array();
/** /**
@@ -134,9 +126,9 @@ class PHPExcel_DocumentProperties
public function __construct() public function __construct()
{ {
// Initialise values // Initialise values
$this->_lastModifiedBy = $this->_creator; $this->lastModifiedBy = $this->creator;
$this->_created = time(); $this->created = time();
$this->_modified = time(); $this->modified = time();
} }
/** /**
@@ -144,8 +136,9 @@ class PHPExcel_DocumentProperties
* *
* @return string * @return string
*/ */
public function getCreator() { public function getCreator()
return $this->_creator; {
return $this->creator;
} }
/** /**
@@ -154,8 +147,9 @@ class PHPExcel_DocumentProperties
* @param string $pValue * @param string $pValue
* @return PHPExcel_DocumentProperties * @return PHPExcel_DocumentProperties
*/ */
public function setCreator($pValue = '') { public function setCreator($pValue = '')
$this->_creator = $pValue; {
$this->creator = $pValue;
return $this; return $this;
} }
@@ -164,8 +158,9 @@ class PHPExcel_DocumentProperties
* *
* @return string * @return string
*/ */
public function getLastModifiedBy() { public function getLastModifiedBy()
return $this->_lastModifiedBy; {
return $this->lastModifiedBy;
} }
/** /**
@@ -174,8 +169,9 @@ class PHPExcel_DocumentProperties
* @param string $pValue * @param string $pValue
* @return PHPExcel_DocumentProperties * @return PHPExcel_DocumentProperties
*/ */
public function setLastModifiedBy($pValue = '') { public function setLastModifiedBy($pValue = '')
$this->_lastModifiedBy = $pValue; {
$this->lastModifiedBy = $pValue;
return $this; return $this;
} }
@@ -184,8 +180,9 @@ class PHPExcel_DocumentProperties
* *
* @return datetime * @return datetime
*/ */
public function getCreated() { public function getCreated()
return $this->_created; {
return $this->created;
} }
/** /**
@@ -194,8 +191,9 @@ class PHPExcel_DocumentProperties
* @param datetime $pValue * @param datetime $pValue
* @return PHPExcel_DocumentProperties * @return PHPExcel_DocumentProperties
*/ */
public function setCreated($pValue = null) { public function setCreated($pValue = null)
if ($pValue === NULL) { {
if ($pValue === null) {
$pValue = time(); $pValue = time();
} elseif (is_string($pValue)) { } elseif (is_string($pValue)) {
if (is_numeric($pValue)) { if (is_numeric($pValue)) {
@@ -205,7 +203,7 @@ class PHPExcel_DocumentProperties
} }
} }
$this->_created = $pValue; $this->created = $pValue;
return $this; return $this;
} }
@@ -214,8 +212,9 @@ class PHPExcel_DocumentProperties
* *
* @return datetime * @return datetime
*/ */
public function getModified() { public function getModified()
return $this->_modified; {
return $this->modified;
} }
/** /**
@@ -224,8 +223,9 @@ class PHPExcel_DocumentProperties
* @param datetime $pValue * @param datetime $pValue
* @return PHPExcel_DocumentProperties * @return PHPExcel_DocumentProperties
*/ */
public function setModified($pValue = null) { public function setModified($pValue = null)
if ($pValue === NULL) { {
if ($pValue === null) {
$pValue = time(); $pValue = time();
} elseif (is_string($pValue)) { } elseif (is_string($pValue)) {
if (is_numeric($pValue)) { if (is_numeric($pValue)) {
@@ -235,7 +235,7 @@ class PHPExcel_DocumentProperties
} }
} }
$this->_modified = $pValue; $this->modified = $pValue;
return $this; return $this;
} }
@@ -244,8 +244,9 @@ class PHPExcel_DocumentProperties
* *
* @return string * @return string
*/ */
public function getTitle() { public function getTitle()
return $this->_title; {
return $this->title;
} }
/** /**
@@ -254,8 +255,9 @@ class PHPExcel_DocumentProperties
* @param string $pValue * @param string $pValue
* @return PHPExcel_DocumentProperties * @return PHPExcel_DocumentProperties
*/ */
public function setTitle($pValue = '') { public function setTitle($pValue = '')
$this->_title = $pValue; {
$this->title = $pValue;
return $this; return $this;
} }
@@ -264,8 +266,9 @@ class PHPExcel_DocumentProperties
* *
* @return string * @return string
*/ */
public function getDescription() { public function getDescription()
return $this->_description; {
return $this->description;
} }
/** /**
@@ -274,8 +277,9 @@ class PHPExcel_DocumentProperties
* @param string $pValue * @param string $pValue
* @return PHPExcel_DocumentProperties * @return PHPExcel_DocumentProperties
*/ */
public function setDescription($pValue = '') { public function setDescription($pValue = '')
$this->_description = $pValue; {
$this->description = $pValue;
return $this; return $this;
} }
@@ -284,8 +288,9 @@ class PHPExcel_DocumentProperties
* *
* @return string * @return string
*/ */
public function getSubject() { public function getSubject()
return $this->_subject; {
return $this->subject;
} }
/** /**
@@ -294,8 +299,9 @@ class PHPExcel_DocumentProperties
* @param string $pValue * @param string $pValue
* @return PHPExcel_DocumentProperties * @return PHPExcel_DocumentProperties
*/ */
public function setSubject($pValue = '') { public function setSubject($pValue = '')
$this->_subject = $pValue; {
$this->subject = $pValue;
return $this; return $this;
} }
@@ -304,8 +310,9 @@ class PHPExcel_DocumentProperties
* *
* @return string * @return string
*/ */
public function getKeywords() { public function getKeywords()
return $this->_keywords; {
return $this->keywords;
} }
/** /**
@@ -314,8 +321,9 @@ class PHPExcel_DocumentProperties
* @param string $pValue * @param string $pValue
* @return PHPExcel_DocumentProperties * @return PHPExcel_DocumentProperties
*/ */
public function setKeywords($pValue = '') { public function setKeywords($pValue = '')
$this->_keywords = $pValue; {
$this->keywords = $pValue;
return $this; return $this;
} }
@@ -324,8 +332,9 @@ class PHPExcel_DocumentProperties
* *
* @return string * @return string
*/ */
public function getCategory() { public function getCategory()
return $this->_category; {
return $this->category;
} }
/** /**
@@ -334,8 +343,9 @@ class PHPExcel_DocumentProperties
* @param string $pValue * @param string $pValue
* @return PHPExcel_DocumentProperties * @return PHPExcel_DocumentProperties
*/ */
public function setCategory($pValue = '') { public function setCategory($pValue = '')
$this->_category = $pValue; {
$this->category = $pValue;
return $this; return $this;
} }
@@ -344,8 +354,9 @@ class PHPExcel_DocumentProperties
* *
* @return string * @return string
*/ */
public function getCompany() { public function getCompany()
return $this->_company; {
return $this->company;
} }
/** /**
@@ -354,8 +365,9 @@ class PHPExcel_DocumentProperties
* @param string $pValue * @param string $pValue
* @return PHPExcel_DocumentProperties * @return PHPExcel_DocumentProperties
*/ */
public function setCompany($pValue = '') { public function setCompany($pValue = '')
$this->_company = $pValue; {
$this->company = $pValue;
return $this; return $this;
} }
@@ -364,8 +376,9 @@ class PHPExcel_DocumentProperties
* *
* @return string * @return string
*/ */
public function getManager() { public function getManager()
return $this->_manager; {
return $this->manager;
} }
/** /**
@@ -374,8 +387,9 @@ class PHPExcel_DocumentProperties
* @param string $pValue * @param string $pValue
* @return PHPExcel_DocumentProperties * @return PHPExcel_DocumentProperties
*/ */
public function setManager($pValue = '') { public function setManager($pValue = '')
$this->_manager = $pValue; {
$this->manager = $pValue;
return $this; return $this;
} }
@@ -384,8 +398,9 @@ class PHPExcel_DocumentProperties
* *
* @return array of string * @return array of string
*/ */
public function getCustomProperties() { public function getCustomProperties()
return array_keys($this->_customProperties); {
return array_keys($this->customProperties);
} }
/** /**
@@ -394,8 +409,9 @@ class PHPExcel_DocumentProperties
* @param string $propertyName * @param string $propertyName
* @return boolean * @return boolean
*/ */
public function isCustomPropertySet($propertyName) { public function isCustomPropertySet($propertyName)
return isset($this->_customProperties[$propertyName]); {
return isset($this->customProperties[$propertyName]);
} }
/** /**
@@ -404,9 +420,10 @@ class PHPExcel_DocumentProperties
* @param string $propertyName * @param string $propertyName
* @return string * @return string
*/ */
public function getCustomPropertyValue($propertyName) { public function getCustomPropertyValue($propertyName)
if (isset($this->_customProperties[$propertyName])) { {
return $this->_customProperties[$propertyName]['value']; if (isset($this->customProperties[$propertyName])) {
return $this->customProperties[$propertyName]['value'];
} }
} }
@@ -417,9 +434,10 @@ class PHPExcel_DocumentProperties
* @param string $propertyName * @param string $propertyName
* @return string * @return string
*/ */
public function getCustomPropertyType($propertyName) { public function getCustomPropertyType($propertyName)
if (isset($this->_customProperties[$propertyName])) { {
return $this->_customProperties[$propertyName]['type']; if (isset($this->customProperties[$propertyName])) {
return $this->customProperties[$propertyName]['type'];
} }
} }
@@ -437,17 +455,18 @@ class PHPExcel_DocumentProperties
* 'b' : Boolean * 'b' : Boolean
* @return PHPExcel_DocumentProperties * @return PHPExcel_DocumentProperties
*/ */
public function setCustomProperty($propertyName,$propertyValue='',$propertyType=NULL) { public function setCustomProperty($propertyName, $propertyValue = '', $propertyType = null)
if (($propertyType === NULL) || (!in_array($propertyType,array(self::PROPERTY_TYPE_INTEGER, {
if (($propertyType === null) || (!in_array($propertyType, array(self::PROPERTY_TYPE_INTEGER,
self::PROPERTY_TYPE_FLOAT, self::PROPERTY_TYPE_FLOAT,
self::PROPERTY_TYPE_STRING, self::PROPERTY_TYPE_STRING,
self::PROPERTY_TYPE_DATE, self::PROPERTY_TYPE_DATE,
self::PROPERTY_TYPE_BOOLEAN)))) { self::PROPERTY_TYPE_BOOLEAN)))) {
if ($propertyValue === NULL) { if ($propertyValue === null) {
$propertyType = self::PROPERTY_TYPE_STRING; $propertyType = self::PROPERTY_TYPE_STRING;
} elseif (is_float($propertyValue)) { } elseif (is_float($propertyValue)) {
$propertyType = self::PROPERTY_TYPE_FLOAT; $propertyType = self::PROPERTY_TYPE_FLOAT;
} elseif(is_int($propertyValue)) { } elseif (is_int($propertyValue)) {
$propertyType = self::PROPERTY_TYPE_INTEGER; $propertyType = self::PROPERTY_TYPE_INTEGER;
} elseif (is_bool($propertyValue)) { } elseif (is_bool($propertyValue)) {
$propertyType = self::PROPERTY_TYPE_BOOLEAN; $propertyType = self::PROPERTY_TYPE_BOOLEAN;
@@ -456,14 +475,18 @@ class PHPExcel_DocumentProperties
} }
} }
$this->_customProperties[$propertyName] = array('value' => $propertyValue, 'type' => $propertyType); $this->customProperties[$propertyName] = array(
'value' => $propertyValue,
'type' => $propertyType
);
return $this; return $this;
} }
/** /**
* Implement PHP __clone to create a deep clone, not just a shallow copy. * Implement PHP __clone to create a deep clone, not just a shallow copy.
*/ */
public function __clone() { public function __clone()
{
$vars = get_object_vars($this); $vars = get_object_vars($this);
foreach ($vars as $key => $value) { foreach ($vars as $key => $value) {
if (is_object($value)) { if (is_object($value)) {
@@ -474,114 +497,115 @@ class PHPExcel_DocumentProperties
} }
} }
public static function convertProperty($propertyValue,$propertyType) { public static function convertProperty($propertyValue, $propertyType)
{
switch ($propertyType) { switch ($propertyType) {
case 'empty' : // Empty case 'empty': // Empty
return ''; return '';
break; break;
case 'null' : // Null case 'null': // Null
return NULL; return null;
break; break;
case 'i1' : // 1-Byte Signed Integer case 'i1': // 1-Byte Signed Integer
case 'i2' : // 2-Byte Signed Integer case 'i2': // 2-Byte Signed Integer
case 'i4' : // 4-Byte Signed Integer case 'i4': // 4-Byte Signed Integer
case 'i8' : // 8-Byte Signed Integer case 'i8': // 8-Byte Signed Integer
case 'int' : // Integer case 'int': // Integer
return (int) $propertyValue; return (int) $propertyValue;
break; break;
case 'ui1' : // 1-Byte Unsigned Integer case 'ui1': // 1-Byte Unsigned Integer
case 'ui2' : // 2-Byte Unsigned Integer case 'ui2': // 2-Byte Unsigned Integer
case 'ui4' : // 4-Byte Unsigned Integer case 'ui4': // 4-Byte Unsigned Integer
case 'ui8' : // 8-Byte Unsigned Integer case 'ui8': // 8-Byte Unsigned Integer
case 'uint' : // Unsigned Integer case 'uint': // Unsigned Integer
return abs((int) $propertyValue); return abs((int) $propertyValue);
break; break;
case 'r4' : // 4-Byte Real Number case 'r4': // 4-Byte Real Number
case 'r8' : // 8-Byte Real Number case 'r8': // 8-Byte Real Number
case 'decimal' : // Decimal case 'decimal': // Decimal
return (float) $propertyValue; return (float) $propertyValue;
break; break;
case 'lpstr' : // LPSTR case 'lpstr': // LPSTR
case 'lpwstr' : // LPWSTR case 'lpwstr': // LPWSTR
case 'bstr' : // Basic String case 'bstr': // Basic String
return $propertyValue; return $propertyValue;
break; break;
case 'date' : // Date and Time case 'date': // Date and Time
case 'filetime' : // File Time case 'filetime': // File Time
return strtotime($propertyValue); return strtotime($propertyValue);
break; break;
case 'bool' : // Boolean case 'bool': // Boolean
return ($propertyValue == 'true') ? True : False; return ($propertyValue == 'true') ? true : false;
break; break;
case 'cy' : // Currency case 'cy': // Currency
case 'error' : // Error Status Code case 'error': // Error Status Code
case 'vector' : // Vector case 'vector': // Vector
case 'array' : // Array case 'array': // Array
case 'blob' : // Binary Blob case 'blob': // Binary Blob
case 'oblob' : // Binary Blob Object case 'oblob': // Binary Blob Object
case 'stream' : // Binary Stream case 'stream': // Binary Stream
case 'ostream' : // Binary Stream Object case 'ostream': // Binary Stream Object
case 'storage' : // Binary Storage case 'storage': // Binary Storage
case 'ostorage' : // Binary Storage Object case 'ostorage': // Binary Storage Object
case 'vstream' : // Binary Versioned Stream case 'vstream': // Binary Versioned Stream
case 'clsid' : // Class ID case 'clsid': // Class ID
case 'cf' : // Clipboard Data case 'cf': // Clipboard Data
return $propertyValue; return $propertyValue;
break; break;
} }
return $propertyValue; return $propertyValue;
} }
public static function convertPropertyType($propertyType) { public static function convertPropertyType($propertyType)
{
switch ($propertyType) { switch ($propertyType) {
case 'i1' : // 1-Byte Signed Integer case 'i1': // 1-Byte Signed Integer
case 'i2' : // 2-Byte Signed Integer case 'i2': // 2-Byte Signed Integer
case 'i4' : // 4-Byte Signed Integer case 'i4': // 4-Byte Signed Integer
case 'i8' : // 8-Byte Signed Integer case 'i8': // 8-Byte Signed Integer
case 'int' : // Integer case 'int': // Integer
case 'ui1' : // 1-Byte Unsigned Integer case 'ui1': // 1-Byte Unsigned Integer
case 'ui2' : // 2-Byte Unsigned Integer case 'ui2': // 2-Byte Unsigned Integer
case 'ui4' : // 4-Byte Unsigned Integer case 'ui4': // 4-Byte Unsigned Integer
case 'ui8' : // 8-Byte Unsigned Integer case 'ui8': // 8-Byte Unsigned Integer
case 'uint' : // Unsigned Integer case 'uint': // Unsigned Integer
return self::PROPERTY_TYPE_INTEGER; return self::PROPERTY_TYPE_INTEGER;
break; break;
case 'r4' : // 4-Byte Real Number case 'r4': // 4-Byte Real Number
case 'r8' : // 8-Byte Real Number case 'r8': // 8-Byte Real Number
case 'decimal' : // Decimal case 'decimal': // Decimal
return self::PROPERTY_TYPE_FLOAT; return self::PROPERTY_TYPE_FLOAT;
break; break;
case 'empty' : // Empty case 'empty': // Empty
case 'null' : // Null case 'null': // Null
case 'lpstr' : // LPSTR case 'lpstr': // LPSTR
case 'lpwstr' : // LPWSTR case 'lpwstr': // LPWSTR
case 'bstr' : // Basic String case 'bstr': // Basic String
return self::PROPERTY_TYPE_STRING; return self::PROPERTY_TYPE_STRING;
break; break;
case 'date' : // Date and Time case 'date': // Date and Time
case 'filetime' : // File Time case 'filetime': // File Time
return self::PROPERTY_TYPE_DATE; return self::PROPERTY_TYPE_DATE;
break; break;
case 'bool' : // Boolean case 'bool': // Boolean
return self::PROPERTY_TYPE_BOOLEAN; return self::PROPERTY_TYPE_BOOLEAN;
break; break;
case 'cy' : // Currency case 'cy': // Currency
case 'error' : // Error Status Code case 'error': // Error Status Code
case 'vector' : // Vector case 'vector': // Vector
case 'array' : // Array case 'array': // Array
case 'blob' : // Binary Blob case 'blob': // Binary Blob
case 'oblob' : // Binary Blob Object case 'oblob': // Binary Blob Object
case 'stream' : // Binary Stream case 'stream': // Binary Stream
case 'ostream' : // Binary Stream Object case 'ostream': // Binary Stream Object
case 'storage' : // Binary Storage case 'storage': // Binary Storage
case 'ostorage' : // Binary Storage Object case 'ostorage': // Binary Storage Object
case 'vstream' : // Binary Versioned Stream case 'vstream': // Binary Versioned Stream
case 'clsid' : // Class ID case 'clsid': // Class ID
case 'cf' : // Clipboard Data case 'cf': // Clipboard Data
return self::PROPERTY_TYPE_UNKNOWN; return self::PROPERTY_TYPE_UNKNOWN;
break; break;
} }
return self::PROPERTY_TYPE_UNKNOWN; return self::PROPERTY_TYPE_UNKNOWN;
} }
} }

View File

@@ -1,8 +1,9 @@
<?php <?php
/** /**
* PHPExcel * PHPExcel_DocumentSecurity
* *
* Copyright (c) 2006 - 2014 PHPExcel * Copyright (c) 2006 - 2015 PHPExcel
* *
* This library is free software; you can redistribute it and/or * This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public * modify it under the terms of the GNU Lesser General Public
@@ -20,18 +21,9 @@
* *
* @category PHPExcel * @category PHPExcel
* @package PHPExcel * @package PHPExcel
* @copyright Copyright (c) 2006 - 2014 PHPExcel (http://www.codeplex.com/PHPExcel) * @copyright Copyright (c) 2006 - 2015 PHPExcel (http://www.codeplex.com/PHPExcel)
* @license http://www.gnu.org/licenses/old-licenses/lgpl-2.1.txt LGPL * @license http://www.gnu.org/licenses/old-licenses/lgpl-2.1.txt LGPL
* @version 1.8.0, 2014-03-02 * @version ##VERSION##, ##DATE##
*/
/**
* PHPExcel_DocumentSecurity
*
* @category PHPExcel
* @package PHPExcel
* @copyright Copyright (c) 2006 - 2014 PHPExcel (http://www.codeplex.com/PHPExcel)
*/ */
class PHPExcel_DocumentSecurity class PHPExcel_DocumentSecurity
{ {
@@ -40,35 +32,35 @@ class PHPExcel_DocumentSecurity
* *
* @var boolean * @var boolean
*/ */
private $_lockRevision; private $lockRevision;
/** /**
* LockStructure * LockStructure
* *
* @var boolean * @var boolean
*/ */
private $_lockStructure; private $lockStructure;
/** /**
* LockWindows * LockWindows
* *
* @var boolean * @var boolean
*/ */
private $_lockWindows; private $lockWindows;
/** /**
* RevisionsPassword * RevisionsPassword
* *
* @var string * @var string
*/ */
private $_revisionsPassword; private $revisionsPassword;
/** /**
* WorkbookPassword * WorkbookPassword
* *
* @var string * @var string
*/ */
private $_workbookPassword; private $workbookPassword;
/** /**
* Create a new PHPExcel_DocumentSecurity * Create a new PHPExcel_DocumentSecurity
@@ -76,22 +68,23 @@ class PHPExcel_DocumentSecurity
public function __construct() public function __construct()
{ {
// Initialise values // Initialise values
$this->_lockRevision = false; $this->lockRevision = false;
$this->_lockStructure = false; $this->lockStructure = false;
$this->_lockWindows = false; $this->lockWindows = false;
$this->_revisionsPassword = ''; $this->revisionsPassword = '';
$this->_workbookPassword = ''; $this->workbookPassword = '';
} }
/** /**
* Is some sort of dcument security enabled? * Is some sort of document security enabled?
* *
* @return boolean * @return boolean
*/ */
function isSecurityEnabled() { public function isSecurityEnabled()
return $this->_lockRevision || {
$this->_lockStructure || return $this->lockRevision ||
$this->_lockWindows; $this->lockStructure ||
$this->lockWindows;
} }
/** /**
@@ -99,8 +92,9 @@ class PHPExcel_DocumentSecurity
* *
* @return boolean * @return boolean
*/ */
function getLockRevision() { public function getLockRevision()
return $this->_lockRevision; {
return $this->lockRevision;
} }
/** /**
@@ -109,8 +103,9 @@ class PHPExcel_DocumentSecurity
* @param boolean $pValue * @param boolean $pValue
* @return PHPExcel_DocumentSecurity * @return PHPExcel_DocumentSecurity
*/ */
function setLockRevision($pValue = false) { public function setLockRevision($pValue = false)
$this->_lockRevision = $pValue; {
$this->lockRevision = $pValue;
return $this; return $this;
} }
@@ -119,8 +114,9 @@ class PHPExcel_DocumentSecurity
* *
* @return boolean * @return boolean
*/ */
function getLockStructure() { public function getLockStructure()
return $this->_lockStructure; {
return $this->lockStructure;
} }
/** /**
@@ -129,8 +125,9 @@ class PHPExcel_DocumentSecurity
* @param boolean $pValue * @param boolean $pValue
* @return PHPExcel_DocumentSecurity * @return PHPExcel_DocumentSecurity
*/ */
function setLockStructure($pValue = false) { public function setLockStructure($pValue = false)
$this->_lockStructure = $pValue; {
$this->lockStructure = $pValue;
return $this; return $this;
} }
@@ -139,8 +136,9 @@ class PHPExcel_DocumentSecurity
* *
* @return boolean * @return boolean
*/ */
function getLockWindows() { public function getLockWindows()
return $this->_lockWindows; {
return $this->lockWindows;
} }
/** /**
@@ -149,8 +147,9 @@ class PHPExcel_DocumentSecurity
* @param boolean $pValue * @param boolean $pValue
* @return PHPExcel_DocumentSecurity * @return PHPExcel_DocumentSecurity
*/ */
function setLockWindows($pValue = false) { public function setLockWindows($pValue = false)
$this->_lockWindows = $pValue; {
$this->lockWindows = $pValue;
return $this; return $this;
} }
@@ -159,8 +158,9 @@ class PHPExcel_DocumentSecurity
* *
* @return string * @return string
*/ */
function getRevisionsPassword() { public function getRevisionsPassword()
return $this->_revisionsPassword; {
return $this->revisionsPassword;
} }
/** /**
@@ -170,11 +170,12 @@ class PHPExcel_DocumentSecurity
* @param boolean $pAlreadyHashed If the password has already been hashed, set this to true * @param boolean $pAlreadyHashed If the password has already been hashed, set this to true
* @return PHPExcel_DocumentSecurity * @return PHPExcel_DocumentSecurity
*/ */
function setRevisionsPassword($pValue = '', $pAlreadyHashed = false) { public function setRevisionsPassword($pValue = '', $pAlreadyHashed = false)
{
if (!$pAlreadyHashed) { if (!$pAlreadyHashed) {
$pValue = PHPExcel_Shared_PasswordHasher::hashPassword($pValue); $pValue = PHPExcel_Shared_PasswordHasher::hashPassword($pValue);
} }
$this->_revisionsPassword = $pValue; $this->revisionsPassword = $pValue;
return $this; return $this;
} }
@@ -183,8 +184,9 @@ class PHPExcel_DocumentSecurity
* *
* @return string * @return string
*/ */
function getWorkbookPassword() { public function getWorkbookPassword()
return $this->_workbookPassword; {
return $this->workbookPassword;
} }
/** /**
@@ -194,18 +196,20 @@ class PHPExcel_DocumentSecurity
* @param boolean $pAlreadyHashed If the password has already been hashed, set this to true * @param boolean $pAlreadyHashed If the password has already been hashed, set this to true
* @return PHPExcel_DocumentSecurity * @return PHPExcel_DocumentSecurity
*/ */
function setWorkbookPassword($pValue = '', $pAlreadyHashed = false) { public function setWorkbookPassword($pValue = '', $pAlreadyHashed = false)
{
if (!$pAlreadyHashed) { if (!$pAlreadyHashed) {
$pValue = PHPExcel_Shared_PasswordHasher::hashPassword($pValue); $pValue = PHPExcel_Shared_PasswordHasher::hashPassword($pValue);
} }
$this->_workbookPassword = $pValue; $this->workbookPassword = $pValue;
return $this; return $this;
} }
/** /**
* Implement PHP __clone to create a deep clone, not just a shallow copy. * Implement PHP __clone to create a deep clone, not just a shallow copy.
*/ */
public function __clone() { public function __clone()
{
$vars = get_object_vars($this); $vars = get_object_vars($this);
foreach ($vars as $key => $value) { foreach ($vars as $key => $value) {
if (is_object($value)) { if (is_object($value)) {

View File

@@ -2,7 +2,7 @@
/** /**
* PHPExcel * PHPExcel
* *
* Copyright (c) 2006 - 2014 PHPExcel * Copyright (c) 2006 - 2015 PHPExcel
* *
* This library is free software; you can redistribute it and/or * This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public * modify it under the terms of the GNU Lesser General Public
@@ -20,9 +20,9 @@
* *
* @category PHPExcel * @category PHPExcel
* @package PHPExcel * @package PHPExcel
* @copyright Copyright (c) 2006 - 2014 PHPExcel (http://www.codeplex.com/PHPExcel) * @copyright Copyright (c) 2006 - 2015 PHPExcel (http://www.codeplex.com/PHPExcel)
* @license http://www.gnu.org/licenses/old-licenses/lgpl-2.1.txt LGPL * @license http://www.gnu.org/licenses/old-licenses/lgpl-2.1.txt LGPL
* @version 1.8.0, 2014-03-02 * @version ##VERSION##, ##DATE##
*/ */
@@ -31,9 +31,10 @@
* *
* @category PHPExcel * @category PHPExcel
* @package PHPExcel * @package PHPExcel
* @copyright Copyright (c) 2006 - 2014 PHPExcel (http://www.codeplex.com/PHPExcel) * @copyright Copyright (c) 2006 - 2015 PHPExcel (http://www.codeplex.com/PHPExcel)
*/ */
class PHPExcel_Exception extends Exception { class PHPExcel_Exception extends Exception
{
/** /**
* Error handler callback * Error handler callback
* *
@@ -43,7 +44,8 @@ class PHPExcel_Exception extends Exception {
* @param mixed $line * @param mixed $line
* @param mixed $context * @param mixed $context
*/ */
public static function errorHandlerCallback($code, $string, $file, $line, $context) { public static function errorHandlerCallback($code, $string, $file, $line, $context)
{
$e = new self($string, $code); $e = new self($string, $code);
$e->line = $line; $e->line = $line;
$e->file = $file; $e->file = $file;

View File

@@ -1,8 +1,9 @@
<?php <?php
/** /**
* PHPExcel * PHPExcel_HashTable
* *
* Copyright (c) 2006 - 2014 PHPExcel * Copyright (c) 2006 - 2015 PHPExcel
* *
* This library is free software; you can redistribute it and/or * This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public * modify it under the terms of the GNU Lesser General Public
@@ -20,18 +21,9 @@
* *
* @category PHPExcel * @category PHPExcel
* @package PHPExcel * @package PHPExcel
* @copyright Copyright (c) 2006 - 2014 PHPExcel (http://www.codeplex.com/PHPExcel) * @copyright Copyright (c) 2006 - 2015 PHPExcel (http://www.codeplex.com/PHPExcel)
* @license http://www.gnu.org/licenses/old-licenses/lgpl-2.1.txt LGPL * @license http://www.gnu.org/licenses/old-licenses/lgpl-2.1.txt LGPL
* @version 1.8.0, 2014-03-02 * @version ##VERSION##, ##DATE##
*/
/**
* PHPExcel_HashTable
*
* @category PHPExcel
* @package PHPExcel
* @copyright Copyright (c) 2006 - 2014 PHPExcel (http://www.codeplex.com/PHPExcel)
*/ */
class PHPExcel_HashTable class PHPExcel_HashTable
{ {
@@ -40,14 +32,14 @@ class PHPExcel_HashTable
* *
* @var array * @var array
*/ */
public $_items = array(); protected $items = array();
/** /**
* HashTable key map * HashTable key map
* *
* @var array * @var array
*/ */
public $_keyMap = array(); protected $keyMap = array();
/** /**
* Create a new PHPExcel_HashTable * Create a new PHPExcel_HashTable
@@ -57,7 +49,7 @@ class PHPExcel_HashTable
*/ */
public function __construct($pSource = null) public function __construct($pSource = null)
{ {
if ($pSource !== NULL) { if ($pSource !== null) {
// Create HashTable // Create HashTable
$this->addFromSource($pSource); $this->addFromSource($pSource);
} }
@@ -69,11 +61,12 @@ class PHPExcel_HashTable
* @param PHPExcel_IComparable[] $pSource Source array to create HashTable from * @param PHPExcel_IComparable[] $pSource Source array to create HashTable from
* @throws PHPExcel_Exception * @throws PHPExcel_Exception
*/ */
public function addFromSource($pSource = null) { public function addFromSource($pSource = null)
{
// Check if an array was passed // Check if an array was passed
if ($pSource == null) { if ($pSource == null) {
return; return;
} else if (!is_array($pSource)) { } elseif (!is_array($pSource)) {
throw new PHPExcel_Exception('Invalid array parameter passed.'); throw new PHPExcel_Exception('Invalid array parameter passed.');
} }
@@ -88,11 +81,12 @@ class PHPExcel_HashTable
* @param PHPExcel_IComparable $pSource Item to add * @param PHPExcel_IComparable $pSource Item to add
* @throws PHPExcel_Exception * @throws PHPExcel_Exception
*/ */
public function add(PHPExcel_IComparable $pSource = null) { public function add(PHPExcel_IComparable $pSource = null)
{
$hash = $pSource->getHashCode(); $hash = $pSource->getHashCode();
if (!isset($this->_items[$hash])) { if (!isset($this->items[$hash])) {
$this->_items[$hash] = $pSource; $this->items[$hash] = $pSource;
$this->_keyMap[count($this->_items) - 1] = $hash; $this->keyMap[count($this->items) - 1] = $hash;
} }
} }
@@ -102,22 +96,23 @@ class PHPExcel_HashTable
* @param PHPExcel_IComparable $pSource Item to remove * @param PHPExcel_IComparable $pSource Item to remove
* @throws PHPExcel_Exception * @throws PHPExcel_Exception
*/ */
public function remove(PHPExcel_IComparable $pSource = null) { public function remove(PHPExcel_IComparable $pSource = null)
{
$hash = $pSource->getHashCode(); $hash = $pSource->getHashCode();
if (isset($this->_items[$hash])) { if (isset($this->items[$hash])) {
unset($this->_items[$hash]); unset($this->items[$hash]);
$deleteKey = -1; $deleteKey = -1;
foreach ($this->_keyMap as $key => $value) { foreach ($this->keyMap as $key => $value) {
if ($deleteKey >= 0) { if ($deleteKey >= 0) {
$this->_keyMap[$key - 1] = $value; $this->keyMap[$key - 1] = $value;
} }
if ($value == $hash) { if ($value == $hash) {
$deleteKey = $key; $deleteKey = $key;
} }
} }
unset($this->_keyMap[count($this->_keyMap) - 1]); unset($this->keyMap[count($this->keyMap) - 1]);
} }
} }
@@ -125,9 +120,10 @@ class PHPExcel_HashTable
* Clear HashTable * Clear HashTable
* *
*/ */
public function clear() { public function clear()
$this->_items = array(); {
$this->_keyMap = array(); $this->items = array();
$this->keyMap = array();
} }
/** /**
@@ -135,8 +131,9 @@ class PHPExcel_HashTable
* *
* @return int * @return int
*/ */
public function count() { public function count()
return count($this->_items); {
return count($this->items);
} }
/** /**
@@ -145,8 +142,9 @@ class PHPExcel_HashTable
* @param string $pHashCode * @param string $pHashCode
* @return int Index * @return int Index
*/ */
public function getIndexForHashCode($pHashCode = '') { public function getIndexForHashCode($pHashCode = '')
return array_search($pHashCode, $this->_keyMap); {
return array_search($pHashCode, $this->keyMap);
} }
/** /**
@@ -156,9 +154,10 @@ class PHPExcel_HashTable
* @return PHPExcel_IComparable * @return PHPExcel_IComparable
* *
*/ */
public function getByIndex($pIndex = 0) { public function getByIndex($pIndex = 0)
if (isset($this->_keyMap[$pIndex])) { {
return $this->getByHashCode( $this->_keyMap[$pIndex] ); if (isset($this->keyMap[$pIndex])) {
return $this->getByHashCode($this->keyMap[$pIndex]);
} }
return null; return null;
@@ -171,9 +170,10 @@ class PHPExcel_HashTable
* @return PHPExcel_IComparable * @return PHPExcel_IComparable
* *
*/ */
public function getByHashCode($pHashCode = '') { public function getByHashCode($pHashCode = '')
if (isset($this->_items[$pHashCode])) { {
return $this->_items[$pHashCode]; if (isset($this->items[$pHashCode])) {
return $this->items[$pHashCode];
} }
return null; return null;
@@ -184,14 +184,16 @@ class PHPExcel_HashTable
* *
* @return PHPExcel_IComparable[] * @return PHPExcel_IComparable[]
*/ */
public function toArray() { public function toArray()
return $this->_items; {
return $this->items;
} }
/** /**
* Implement PHP __clone to create a deep clone, not just a shallow copy. * Implement PHP __clone to create a deep clone, not just a shallow copy.
*/ */
public function __clone() { public function __clone()
{
$vars = get_object_vars($this); $vars = get_object_vars($this);
foreach ($vars as $key => $value) { foreach ($vars as $key => $value) {
if (is_object($value)) { if (is_object($value)) {

View File

@@ -0,0 +1,808 @@
<?php
class PHPExcel_Helper_HTML
{
protected static $colourMap = array(
'aliceblue' => 'f0f8ff',
'antiquewhite' => 'faebd7',
'antiquewhite1' => 'ffefdb',
'antiquewhite2' => 'eedfcc',
'antiquewhite3' => 'cdc0b0',
'antiquewhite4' => '8b8378',
'aqua' => '00ffff',
'aquamarine1' => '7fffd4',
'aquamarine2' => '76eec6',
'aquamarine4' => '458b74',
'azure1' => 'f0ffff',
'azure2' => 'e0eeee',
'azure3' => 'c1cdcd',
'azure4' => '838b8b',
'beige' => 'f5f5dc',
'bisque1' => 'ffe4c4',
'bisque2' => 'eed5b7',
'bisque3' => 'cdb79e',
'bisque4' => '8b7d6b',
'black' => '000000',
'blanchedalmond' => 'ffebcd',
'blue' => '0000ff',
'blue1' => '0000ff',
'blue2' => '0000ee',
'blue4' => '00008b',
'blueviolet' => '8a2be2',
'brown' => 'a52a2a',
'brown1' => 'ff4040',
'brown2' => 'ee3b3b',
'brown3' => 'cd3333',
'brown4' => '8b2323',
'burlywood' => 'deb887',
'burlywood1' => 'ffd39b',
'burlywood2' => 'eec591',
'burlywood3' => 'cdaa7d',
'burlywood4' => '8b7355',
'cadetblue' => '5f9ea0',
'cadetblue1' => '98f5ff',
'cadetblue2' => '8ee5ee',
'cadetblue3' => '7ac5cd',
'cadetblue4' => '53868b',
'chartreuse1' => '7fff00',
'chartreuse2' => '76ee00',
'chartreuse3' => '66cd00',
'chartreuse4' => '458b00',
'chocolate' => 'd2691e',
'chocolate1' => 'ff7f24',
'chocolate2' => 'ee7621',
'chocolate3' => 'cd661d',
'coral' => 'ff7f50',
'coral1' => 'ff7256',
'coral2' => 'ee6a50',
'coral3' => 'cd5b45',
'coral4' => '8b3e2f',
'cornflowerblue' => '6495ed',
'cornsilk1' => 'fff8dc',
'cornsilk2' => 'eee8cd',
'cornsilk3' => 'cdc8b1',
'cornsilk4' => '8b8878',
'cyan1' => '00ffff',
'cyan2' => '00eeee',
'cyan3' => '00cdcd',
'cyan4' => '008b8b',
'darkgoldenrod' => 'b8860b',
'darkgoldenrod1' => 'ffb90f',
'darkgoldenrod2' => 'eead0e',
'darkgoldenrod3' => 'cd950c',
'darkgoldenrod4' => '8b6508',
'darkgreen' => '006400',
'darkkhaki' => 'bdb76b',
'darkolivegreen' => '556b2f',
'darkolivegreen1' => 'caff70',
'darkolivegreen2' => 'bcee68',
'darkolivegreen3' => 'a2cd5a',
'darkolivegreen4' => '6e8b3d',
'darkorange' => 'ff8c00',
'darkorange1' => 'ff7f00',
'darkorange2' => 'ee7600',
'darkorange3' => 'cd6600',
'darkorange4' => '8b4500',
'darkorchid' => '9932cc',
'darkorchid1' => 'bf3eff',
'darkorchid2' => 'b23aee',
'darkorchid3' => '9a32cd',
'darkorchid4' => '68228b',
'darksalmon' => 'e9967a',
'darkseagreen' => '8fbc8f',
'darkseagreen1' => 'c1ffc1',
'darkseagreen2' => 'b4eeb4',
'darkseagreen3' => '9bcd9b',
'darkseagreen4' => '698b69',
'darkslateblue' => '483d8b',
'darkslategray' => '2f4f4f',
'darkslategray1' => '97ffff',
'darkslategray2' => '8deeee',
'darkslategray3' => '79cdcd',
'darkslategray4' => '528b8b',
'darkturquoise' => '00ced1',
'darkviolet' => '9400d3',
'deeppink1' => 'ff1493',
'deeppink2' => 'ee1289',
'deeppink3' => 'cd1076',
'deeppink4' => '8b0a50',
'deepskyblue1' => '00bfff',
'deepskyblue2' => '00b2ee',
'deepskyblue3' => '009acd',
'deepskyblue4' => '00688b',
'dimgray' => '696969',
'dodgerblue1' => '1e90ff',
'dodgerblue2' => '1c86ee',
'dodgerblue3' => '1874cd',
'dodgerblue4' => '104e8b',
'firebrick' => 'b22222',
'firebrick1' => 'ff3030',
'firebrick2' => 'ee2c2c',
'firebrick3' => 'cd2626',
'firebrick4' => '8b1a1a',
'floralwhite' => 'fffaf0',
'forestgreen' => '228b22',
'fuchsia' => 'ff00ff',
'gainsboro' => 'dcdcdc',
'ghostwhite' => 'f8f8ff',
'gold1' => 'ffd700',
'gold2' => 'eec900',
'gold3' => 'cdad00',
'gold4' => '8b7500',
'goldenrod' => 'daa520',
'goldenrod1' => 'ffc125',
'goldenrod2' => 'eeb422',
'goldenrod3' => 'cd9b1d',
'goldenrod4' => '8b6914',
'gray' => 'bebebe',
'gray1' => '030303',
'gray10' => '1a1a1a',
'gray11' => '1c1c1c',
'gray12' => '1f1f1f',
'gray13' => '212121',
'gray14' => '242424',
'gray15' => '262626',
'gray16' => '292929',
'gray17' => '2b2b2b',
'gray18' => '2e2e2e',
'gray19' => '303030',
'gray2' => '050505',
'gray20' => '333333',
'gray21' => '363636',
'gray22' => '383838',
'gray23' => '3b3b3b',
'gray24' => '3d3d3d',
'gray25' => '404040',
'gray26' => '424242',
'gray27' => '454545',
'gray28' => '474747',
'gray29' => '4a4a4a',
'gray3' => '080808',
'gray30' => '4d4d4d',
'gray31' => '4f4f4f',
'gray32' => '525252',
'gray33' => '545454',
'gray34' => '575757',
'gray35' => '595959',
'gray36' => '5c5c5c',
'gray37' => '5e5e5e',
'gray38' => '616161',
'gray39' => '636363',
'gray4' => '0a0a0a',
'gray40' => '666666',
'gray41' => '696969',
'gray42' => '6b6b6b',
'gray43' => '6e6e6e',
'gray44' => '707070',
'gray45' => '737373',
'gray46' => '757575',
'gray47' => '787878',
'gray48' => '7a7a7a',
'gray49' => '7d7d7d',
'gray5' => '0d0d0d',
'gray50' => '7f7f7f',
'gray51' => '828282',
'gray52' => '858585',
'gray53' => '878787',
'gray54' => '8a8a8a',
'gray55' => '8c8c8c',
'gray56' => '8f8f8f',
'gray57' => '919191',
'gray58' => '949494',
'gray59' => '969696',
'gray6' => '0f0f0f',
'gray60' => '999999',
'gray61' => '9c9c9c',
'gray62' => '9e9e9e',
'gray63' => 'a1a1a1',
'gray64' => 'a3a3a3',
'gray65' => 'a6a6a6',
'gray66' => 'a8a8a8',
'gray67' => 'ababab',
'gray68' => 'adadad',
'gray69' => 'b0b0b0',
'gray7' => '121212',
'gray70' => 'b3b3b3',
'gray71' => 'b5b5b5',
'gray72' => 'b8b8b8',
'gray73' => 'bababa',
'gray74' => 'bdbdbd',
'gray75' => 'bfbfbf',
'gray76' => 'c2c2c2',
'gray77' => 'c4c4c4',
'gray78' => 'c7c7c7',
'gray79' => 'c9c9c9',
'gray8' => '141414',
'gray80' => 'cccccc',
'gray81' => 'cfcfcf',
'gray82' => 'd1d1d1',
'gray83' => 'd4d4d4',
'gray84' => 'd6d6d6',
'gray85' => 'd9d9d9',
'gray86' => 'dbdbdb',
'gray87' => 'dedede',
'gray88' => 'e0e0e0',
'gray89' => 'e3e3e3',
'gray9' => '171717',
'gray90' => 'e5e5e5',
'gray91' => 'e8e8e8',
'gray92' => 'ebebeb',
'gray93' => 'ededed',
'gray94' => 'f0f0f0',
'gray95' => 'f2f2f2',
'gray97' => 'f7f7f7',
'gray98' => 'fafafa',
'gray99' => 'fcfcfc',
'green' => '00ff00',
'green1' => '00ff00',
'green2' => '00ee00',
'green3' => '00cd00',
'green4' => '008b00',
'greenyellow' => 'adff2f',
'honeydew1' => 'f0fff0',
'honeydew2' => 'e0eee0',
'honeydew3' => 'c1cdc1',
'honeydew4' => '838b83',
'hotpink' => 'ff69b4',
'hotpink1' => 'ff6eb4',
'hotpink2' => 'ee6aa7',
'hotpink3' => 'cd6090',
'hotpink4' => '8b3a62',
'indianred' => 'cd5c5c',
'indianred1' => 'ff6a6a',
'indianred2' => 'ee6363',
'indianred3' => 'cd5555',
'indianred4' => '8b3a3a',
'ivory1' => 'fffff0',
'ivory2' => 'eeeee0',
'ivory3' => 'cdcdc1',
'ivory4' => '8b8b83',
'khaki' => 'f0e68c',
'khaki1' => 'fff68f',
'khaki2' => 'eee685',
'khaki3' => 'cdc673',
'khaki4' => '8b864e',
'lavender' => 'e6e6fa',
'lavenderblush1' => 'fff0f5',
'lavenderblush2' => 'eee0e5',
'lavenderblush3' => 'cdc1c5',
'lavenderblush4' => '8b8386',
'lawngreen' => '7cfc00',
'lemonchiffon1' => 'fffacd',
'lemonchiffon2' => 'eee9bf',
'lemonchiffon3' => 'cdc9a5',
'lemonchiffon4' => '8b8970',
'light' => 'eedd82',
'lightblue' => 'add8e6',
'lightblue1' => 'bfefff',
'lightblue2' => 'b2dfee',
'lightblue3' => '9ac0cd',
'lightblue4' => '68838b',
'lightcoral' => 'f08080',
'lightcyan1' => 'e0ffff',
'lightcyan2' => 'd1eeee',
'lightcyan3' => 'b4cdcd',
'lightcyan4' => '7a8b8b',
'lightgoldenrod1' => 'ffec8b',
'lightgoldenrod2' => 'eedc82',
'lightgoldenrod3' => 'cdbe70',
'lightgoldenrod4' => '8b814c',
'lightgoldenrodyellow' => 'fafad2',
'lightgray' => 'd3d3d3',
'lightpink' => 'ffb6c1',
'lightpink1' => 'ffaeb9',
'lightpink2' => 'eea2ad',
'lightpink3' => 'cd8c95',
'lightpink4' => '8b5f65',
'lightsalmon1' => 'ffa07a',
'lightsalmon2' => 'ee9572',
'lightsalmon3' => 'cd8162',
'lightsalmon4' => '8b5742',
'lightseagreen' => '20b2aa',
'lightskyblue' => '87cefa',
'lightskyblue1' => 'b0e2ff',
'lightskyblue2' => 'a4d3ee',
'lightskyblue3' => '8db6cd',
'lightskyblue4' => '607b8b',
'lightslateblue' => '8470ff',
'lightslategray' => '778899',
'lightsteelblue' => 'b0c4de',
'lightsteelblue1' => 'cae1ff',
'lightsteelblue2' => 'bcd2ee',
'lightsteelblue3' => 'a2b5cd',
'lightsteelblue4' => '6e7b8b',
'lightyellow1' => 'ffffe0',
'lightyellow2' => 'eeeed1',
'lightyellow3' => 'cdcdb4',
'lightyellow4' => '8b8b7a',
'lime' => '00ff00',
'limegreen' => '32cd32',
'linen' => 'faf0e6',
'magenta' => 'ff00ff',
'magenta2' => 'ee00ee',
'magenta3' => 'cd00cd',
'magenta4' => '8b008b',
'maroon' => 'b03060',
'maroon1' => 'ff34b3',
'maroon2' => 'ee30a7',
'maroon3' => 'cd2990',
'maroon4' => '8b1c62',
'medium' => '66cdaa',
'mediumaquamarine' => '66cdaa',
'mediumblue' => '0000cd',
'mediumorchid' => 'ba55d3',
'mediumorchid1' => 'e066ff',
'mediumorchid2' => 'd15fee',
'mediumorchid3' => 'b452cd',
'mediumorchid4' => '7a378b',
'mediumpurple' => '9370db',
'mediumpurple1' => 'ab82ff',
'mediumpurple2' => '9f79ee',
'mediumpurple3' => '8968cd',
'mediumpurple4' => '5d478b',
'mediumseagreen' => '3cb371',
'mediumslateblue' => '7b68ee',
'mediumspringgreen' => '00fa9a',
'mediumturquoise' => '48d1cc',
'mediumvioletred' => 'c71585',
'midnightblue' => '191970',
'mintcream' => 'f5fffa',
'mistyrose1' => 'ffe4e1',
'mistyrose2' => 'eed5d2',
'mistyrose3' => 'cdb7b5',
'mistyrose4' => '8b7d7b',
'moccasin' => 'ffe4b5',
'navajowhite1' => 'ffdead',
'navajowhite2' => 'eecfa1',
'navajowhite3' => 'cdb38b',
'navajowhite4' => '8b795e',
'navy' => '000080',
'navyblue' => '000080',
'oldlace' => 'fdf5e6',
'olive' => '808000',
'olivedrab' => '6b8e23',
'olivedrab1' => 'c0ff3e',
'olivedrab2' => 'b3ee3a',
'olivedrab4' => '698b22',
'orange' => 'ffa500',
'orange1' => 'ffa500',
'orange2' => 'ee9a00',
'orange3' => 'cd8500',
'orange4' => '8b5a00',
'orangered1' => 'ff4500',
'orangered2' => 'ee4000',
'orangered3' => 'cd3700',
'orangered4' => '8b2500',
'orchid' => 'da70d6',
'orchid1' => 'ff83fa',
'orchid2' => 'ee7ae9',
'orchid3' => 'cd69c9',
'orchid4' => '8b4789',
'pale' => 'db7093',
'palegoldenrod' => 'eee8aa',
'palegreen' => '98fb98',
'palegreen1' => '9aff9a',
'palegreen2' => '90ee90',
'palegreen3' => '7ccd7c',
'palegreen4' => '548b54',
'paleturquoise' => 'afeeee',
'paleturquoise1' => 'bbffff',
'paleturquoise2' => 'aeeeee',
'paleturquoise3' => '96cdcd',
'paleturquoise4' => '668b8b',
'palevioletred' => 'db7093',
'palevioletred1' => 'ff82ab',
'palevioletred2' => 'ee799f',
'palevioletred3' => 'cd6889',
'palevioletred4' => '8b475d',
'papayawhip' => 'ffefd5',
'peachpuff1' => 'ffdab9',
'peachpuff2' => 'eecbad',
'peachpuff3' => 'cdaf95',
'peachpuff4' => '8b7765',
'pink' => 'ffc0cb',
'pink1' => 'ffb5c5',
'pink2' => 'eea9b8',
'pink3' => 'cd919e',
'pink4' => '8b636c',
'plum' => 'dda0dd',
'plum1' => 'ffbbff',
'plum2' => 'eeaeee',
'plum3' => 'cd96cd',
'plum4' => '8b668b',
'powderblue' => 'b0e0e6',
'purple' => 'a020f0',
'rebeccapurple' => '663399',
'purple1' => '9b30ff',
'purple2' => '912cee',
'purple3' => '7d26cd',
'purple4' => '551a8b',
'red' => 'ff0000',
'red1' => 'ff0000',
'red2' => 'ee0000',
'red3' => 'cd0000',
'red4' => '8b0000',
'rosybrown' => 'bc8f8f',
'rosybrown1' => 'ffc1c1',
'rosybrown2' => 'eeb4b4',
'rosybrown3' => 'cd9b9b',
'rosybrown4' => '8b6969',
'royalblue' => '4169e1',
'royalblue1' => '4876ff',
'royalblue2' => '436eee',
'royalblue3' => '3a5fcd',
'royalblue4' => '27408b',
'saddlebrown' => '8b4513',
'salmon' => 'fa8072',
'salmon1' => 'ff8c69',
'salmon2' => 'ee8262',
'salmon3' => 'cd7054',
'salmon4' => '8b4c39',
'sandybrown' => 'f4a460',
'seagreen1' => '54ff9f',
'seagreen2' => '4eee94',
'seagreen3' => '43cd80',
'seagreen4' => '2e8b57',
'seashell1' => 'fff5ee',
'seashell2' => 'eee5de',
'seashell3' => 'cdc5bf',
'seashell4' => '8b8682',
'sienna' => 'a0522d',
'sienna1' => 'ff8247',
'sienna2' => 'ee7942',
'sienna3' => 'cd6839',
'sienna4' => '8b4726',
'silver' => 'c0c0c0',
'skyblue' => '87ceeb',
'skyblue1' => '87ceff',
'skyblue2' => '7ec0ee',
'skyblue3' => '6ca6cd',
'skyblue4' => '4a708b',
'slateblue' => '6a5acd',
'slateblue1' => '836fff',
'slateblue2' => '7a67ee',
'slateblue3' => '6959cd',
'slateblue4' => '473c8b',
'slategray' => '708090',
'slategray1' => 'c6e2ff',
'slategray2' => 'b9d3ee',
'slategray3' => '9fb6cd',
'slategray4' => '6c7b8b',
'snow1' => 'fffafa',
'snow2' => 'eee9e9',
'snow3' => 'cdc9c9',
'snow4' => '8b8989',
'springgreen1' => '00ff7f',
'springgreen2' => '00ee76',
'springgreen3' => '00cd66',
'springgreen4' => '008b45',
'steelblue' => '4682b4',
'steelblue1' => '63b8ff',
'steelblue2' => '5cacee',
'steelblue3' => '4f94cd',
'steelblue4' => '36648b',
'tan' => 'd2b48c',
'tan1' => 'ffa54f',
'tan2' => 'ee9a49',
'tan3' => 'cd853f',
'tan4' => '8b5a2b',
'teal' => '008080',
'thistle' => 'd8bfd8',
'thistle1' => 'ffe1ff',
'thistle2' => 'eed2ee',
'thistle3' => 'cdb5cd',
'thistle4' => '8b7b8b',
'tomato1' => 'ff6347',
'tomato2' => 'ee5c42',
'tomato3' => 'cd4f39',
'tomato4' => '8b3626',
'turquoise' => '40e0d0',
'turquoise1' => '00f5ff',
'turquoise2' => '00e5ee',
'turquoise3' => '00c5cd',
'turquoise4' => '00868b',
'violet' => 'ee82ee',
'violetred' => 'd02090',
'violetred1' => 'ff3e96',
'violetred2' => 'ee3a8c',
'violetred3' => 'cd3278',
'violetred4' => '8b2252',
'wheat' => 'f5deb3',
'wheat1' => 'ffe7ba',
'wheat2' => 'eed8ae',
'wheat3' => 'cdba96',
'wheat4' => '8b7e66',
'white' => 'ffffff',
'whitesmoke' => 'f5f5f5',
'yellow' => 'ffff00',
'yellow1' => 'ffff00',
'yellow2' => 'eeee00',
'yellow3' => 'cdcd00',
'yellow4' => '8b8b00',
'yellowgreen' => '9acd32',
);
protected $face;
protected $size;
protected $color;
protected $bold = false;
protected $italic = false;
protected $underline = false;
protected $superscript = false;
protected $subscript = false;
protected $strikethrough = false;
protected $startTagCallbacks = array(
'font' => 'startFontTag',
'b' => 'startBoldTag',
'strong' => 'startBoldTag',
'i' => 'startItalicTag',
'em' => 'startItalicTag',
'u' => 'startUnderlineTag',
'ins' => 'startUnderlineTag',
'del' => 'startStrikethruTag',
'sup' => 'startSuperscriptTag',
'sub' => 'startSubscriptTag',
);
protected $endTagCallbacks = array(
'font' => 'endFontTag',
'b' => 'endBoldTag',
'strong' => 'endBoldTag',
'i' => 'endItalicTag',
'em' => 'endItalicTag',
'u' => 'endUnderlineTag',
'ins' => 'endUnderlineTag',
'del' => 'endStrikethruTag',
'sup' => 'endSuperscriptTag',
'sub' => 'endSubscriptTag',
'br' => 'breakTag',
'p' => 'breakTag',
'h1' => 'breakTag',
'h2' => 'breakTag',
'h3' => 'breakTag',
'h4' => 'breakTag',
'h5' => 'breakTag',
'h6' => 'breakTag',
);
protected $stack = array();
protected $stringData = '';
protected $richTextObject;
protected function initialise()
{
$this->face = $this->size = $this->color = null;
$this->bold = $this->italic = $this->underline = $this->superscript = $this->subscript = $this->strikethrough = false;
$this->stack = array();
$this->stringData = '';
}
public function toRichTextObject($html)
{
$this->initialise();
// Create a new DOM object
$dom = new \DOMDocument;
// Load the HTML file into the DOM object
// Note the use of error suppression, because typically this will be an html fragment, so not fully valid markup
$loaded = @$dom->loadHTML($html);
// Discard excess white space
$dom->preserveWhiteSpace = false;
$this->richTextObject = new PHPExcel_RichText();;
$this->parseElements($dom);
// Clean any further spurious whitespace
$this->cleanWhitespace();
return $this->richTextObject;
}
protected function cleanWhitespace()
{
foreach ($this->richTextObject->getRichTextElements() as $key => $element) {
$text = $element->getText();
// Trim any leading spaces on the first run
if ($key == 0) {
$text = ltrim($text);
}
// Trim any spaces immediately after a line break
$text = preg_replace('/\n */mu', "\n", $text);
$element->setText($text);
}
}
protected function buildTextRun()
{
$text = $this->stringData;
if (trim($text) === '') {
return;
}
$richtextRun = $this->richTextObject->createTextRun($this->stringData);
if ($this->face) {
$richtextRun->getFont()->setName($this->face);
}
if ($this->size) {
$richtextRun->getFont()->setSize($this->size);
}
if ($this->color) {
$richtextRun->getFont()->setColor(new PHPExcel_Style_Color('ff' . $this->color));
}
if ($this->bold) {
$richtextRun->getFont()->setBold(true);
}
if ($this->italic) {
$richtextRun->getFont()->setItalic(true);
}
if ($this->underline) {
$richtextRun->getFont()->setUnderline(PHPExcel_Style_Font::UNDERLINE_SINGLE);
}
if ($this->superscript) {
$richtextRun->getFont()->setSuperScript(true);
}
if ($this->subscript) {
$richtextRun->getFont()->setSubScript(true);
}
if ($this->strikethrough) {
$richtextRun->getFont()->setStrikethrough(true);
}
$this->stringData = '';
}
protected function rgbToColour($rgb)
{
preg_match_all('/\d+/', $rgb, $values);
foreach ($values[0] as &$value) {
$value = str_pad(dechex($value), 2, '0', STR_PAD_LEFT);
}
return implode($values[0]);
}
protected function colourNameLookup($rgb)
{
return self::$colourMap[$rgb];
}
protected function startFontTag($tag)
{
foreach ($tag->attributes as $attribute) {
$attributeName = strtolower($attribute->name);
$attributeValue = $attribute->value;
if ($attributeName == 'color') {
if (preg_match('/rgb\s*\(/', $attributeValue)) {
$this->$attributeName = $this->rgbToColour($attributeValue);
} elseif (strpos(trim($attributeValue), '#') === 0) {
$this->$attributeName = ltrim($attributeValue, '#');
} else {
$this->$attributeName = $this->colourNameLookup($attributeValue);
}
} else {
$this->$attributeName = $attributeValue;
}
}
}
protected function endFontTag()
{
$this->face = $this->size = $this->color = null;
}
protected function startBoldTag()
{
$this->bold = true;
}
protected function endBoldTag()
{
$this->bold = false;
}
protected function startItalicTag()
{
$this->italic = true;
}
protected function endItalicTag()
{
$this->italic = false;
}
protected function startUnderlineTag()
{
$this->underline = true;
}
protected function endUnderlineTag()
{
$this->underline = false;
}
protected function startSubscriptTag()
{
$this->subscript = true;
}
protected function endSubscriptTag()
{
$this->subscript = false;
}
protected function startSuperscriptTag()
{
$this->superscript = true;
}
protected function endSuperscriptTag()
{
$this->superscript = false;
}
protected function startStrikethruTag()
{
$this->strikethrough = true;
}
protected function endStrikethruTag()
{
$this->strikethrough = false;
}
protected function breakTag()
{
$this->stringData .= "\n";
}
protected function parseTextNode(DOMText $textNode)
{
$domText = preg_replace(
'/\s+/u',
' ',
str_replace(["\r", "\n"], ' ', $textNode->nodeValue)
);
$this->stringData .= $domText;
$this->buildTextRun();
}
protected function handleCallback($element, $callbackTag, $callbacks)
{
if (isset($callbacks[$callbackTag])) {
$elementHandler = $callbacks[$callbackTag];
if (method_exists($this, $elementHandler)) {
call_user_func(array($this, $elementHandler), $element);
}
}
}
protected function parseElementNode(DOMElement $element)
{
$callbackTag = strtolower($element->nodeName);
$this->stack[] = $callbackTag;
$this->handleCallback($element, $callbackTag, $this->startTagCallbacks);
$this->parseElements($element);
array_pop($this->stack);
$this->handleCallback($element, $callbackTag, $this->endTagCallbacks);
}
protected function parseElements(DOMNode $element)
{
foreach ($element->childNodes as $child) {
if ($child instanceof DOMText) {
$this->parseTextNode($child);
} elseif ($child instanceof DOMElement) {
$this->parseElementNode($child);
}
}
}
}

View File

@@ -1,6 +1,7 @@
<?php <?php
/** /**
* PHPExcel * PHPExcel_IComparable
* *
* This library is free software; you can redistribute it and/or * This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public * modify it under the terms of the GNU Lesser General Public
@@ -18,18 +19,9 @@
* *
* @category PHPExcel * @category PHPExcel
* @package PHPExcel * @package PHPExcel
* @copyright Copyright (c) 2006 - 2014 PHPExcel (http://www.codeplex.com/PHPExcel) * @copyright Copyright (c) 2006 - 2015 PHPExcel (http://www.codeplex.com/PHPExcel)
* @license http://www.gnu.org/licenses/old-licenses/lgpl-2.1.txt LGPL * @license http://www.gnu.org/licenses/old-licenses/lgpl-2.1.txt LGPL
* @version 1.8.0, 2014-03-02 * @version ##VERSION##, ##DATE##
*/
/**
* PHPExcel_IComparable
*
* @category PHPExcel
* @package PHPExcel
* @copyright Copyright (c) 2006 - 2014 PHPExcel (http://www.codeplex.com/PHPExcel)
*/ */
interface PHPExcel_IComparable interface PHPExcel_IComparable
{ {
@@ -39,5 +31,4 @@ interface PHPExcel_IComparable
* @return string Hash code * @return string Hash code
*/ */
public function getHashCode(); public function getHashCode();
} }

View File

@@ -1,8 +1,18 @@
<?php <?php
/** PHPExcel root directory */
if (!defined('PHPEXCEL_ROOT')) {
/**
* @ignore
*/
define('PHPEXCEL_ROOT', dirname(__FILE__) . '/../');
require(PHPEXCEL_ROOT . 'PHPExcel/Autoloader.php');
}
/** /**
* PHPExcel * PHPExcel_IOFactory
* *
* Copyright (c) 2006 - 2014 PHPExcel * Copyright (c) 2006 - 2015 PHPExcel
* *
* This library is free software; you can redistribute it and/or * This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public * modify it under the terms of the GNU Lesser General Public
@@ -20,27 +30,9 @@
* *
* @category PHPExcel * @category PHPExcel
* @package PHPExcel * @package PHPExcel
* @copyright Copyright (c) 2006 - 2014 PHPExcel (http://www.codeplex.com/PHPExcel) * @copyright Copyright (c) 2006 - 2015 PHPExcel (http://www.codeplex.com/PHPExcel)
* @license http://www.gnu.org/licenses/old-licenses/lgpl-2.1.txt LGPL * @license http://www.gnu.org/licenses/old-licenses/lgpl-2.1.txt LGPL
* @version 1.8.0, 2014-03-02 * @version ##VERSION##, ##DATE##
*/
/** PHPExcel root directory */
if (!defined('PHPEXCEL_ROOT')) {
/**
* @ignore
*/
define('PHPEXCEL_ROOT', dirname(__FILE__) . '/../');
require(PHPEXCEL_ROOT . 'PHPExcel/Autoloader.php');
}
/**
* PHPExcel_IOFactory
*
* @category PHPExcel
* @package PHPExcel
* @copyright Copyright (c) 2006 - 2014 PHPExcel (http://www.codeplex.com/PHPExcel)
*/ */
class PHPExcel_IOFactory class PHPExcel_IOFactory
{ {
@@ -51,7 +43,7 @@ class PHPExcel_IOFactory
* @access private * @access private
* @static * @static
*/ */
private static $_searchLocations = array( private static $searchLocations = array(
array( 'type' => 'IWriter', 'path' => 'PHPExcel/Writer/{0}.php', 'class' => 'PHPExcel_Writer_{0}' ), array( 'type' => 'IWriter', 'path' => 'PHPExcel/Writer/{0}.php', 'class' => 'PHPExcel_Writer_{0}' ),
array( 'type' => 'IReader', 'path' => 'PHPExcel/Reader/{0}.php', 'class' => 'PHPExcel_Reader_{0}' ) array( 'type' => 'IReader', 'path' => 'PHPExcel/Reader/{0}.php', 'class' => 'PHPExcel_Reader_{0}' )
); );
@@ -63,7 +55,7 @@ class PHPExcel_IOFactory
* @access private * @access private
* @static * @static
*/ */
private static $_autoResolveClasses = array( private static $autoResolveClasses = array(
'Excel2007', 'Excel2007',
'Excel5', 'Excel5',
'Excel2003XML', 'Excel2003XML',
@@ -77,7 +69,9 @@ class PHPExcel_IOFactory
/** /**
* Private constructor for PHPExcel_IOFactory * Private constructor for PHPExcel_IOFactory
*/ */
private function __construct() { } private function __construct()
{
}
/** /**
* Get search locations * Get search locations
@@ -86,9 +80,10 @@ class PHPExcel_IOFactory
* @access public * @access public
* @return array * @return array
*/ */
public static function getSearchLocations() { public static function getSearchLocations()
return self::$_searchLocations; {
} // function getSearchLocations() return self::$searchLocations;
}
/** /**
* Set search locations * Set search locations
@@ -98,13 +93,14 @@ class PHPExcel_IOFactory
* @param array $value * @param array $value
* @throws PHPExcel_Reader_Exception * @throws PHPExcel_Reader_Exception
*/ */
public static function setSearchLocations($value) { public static function setSearchLocations($value)
{
if (is_array($value)) { if (is_array($value)) {
self::$_searchLocations = $value; self::$searchLocations = $value;
} else { } else {
throw new PHPExcel_Reader_Exception('Invalid parameter passed.'); throw new PHPExcel_Reader_Exception('Invalid parameter passed.');
} }
} // function setSearchLocations() }
/** /**
* Add search location * Add search location
@@ -115,9 +111,10 @@ class PHPExcel_IOFactory
* @param string $location Example: PHPExcel/Writer/{0}.php * @param string $location Example: PHPExcel/Writer/{0}.php
* @param string $classname Example: PHPExcel_Writer_{0} * @param string $classname Example: PHPExcel_Writer_{0}
*/ */
public static function addSearchLocation($type = '', $location = '', $classname = '') { public static function addSearchLocation($type = '', $location = '', $classname = '')
self::$_searchLocations[] = array( 'type' => $type, 'path' => $location, 'class' => $classname ); {
} // function addSearchLocation() self::$searchLocations[] = array( 'type' => $type, 'path' => $location, 'class' => $classname );
}
/** /**
* Create PHPExcel_Writer_IWriter * Create PHPExcel_Writer_IWriter
@@ -129,17 +126,18 @@ class PHPExcel_IOFactory
* @return PHPExcel_Writer_IWriter * @return PHPExcel_Writer_IWriter
* @throws PHPExcel_Reader_Exception * @throws PHPExcel_Reader_Exception
*/ */
public static function createWriter(PHPExcel $phpExcel, $writerType = '') { public static function createWriter(PHPExcel $phpExcel, $writerType = '')
{
// Search type // Search type
$searchType = 'IWriter'; $searchType = 'IWriter';
// Include class // Include class
foreach (self::$_searchLocations as $searchLocation) { foreach (self::$searchLocations as $searchLocation) {
if ($searchLocation['type'] == $searchType) { if ($searchLocation['type'] == $searchType) {
$className = str_replace('{0}', $writerType, $searchLocation['class']); $className = str_replace('{0}', $writerType, $searchLocation['class']);
$instance = new $className($phpExcel); $instance = new $className($phpExcel);
if ($instance !== NULL) { if ($instance !== null) {
return $instance; return $instance;
} }
} }
@@ -147,7 +145,7 @@ class PHPExcel_IOFactory
// Nothing found... // Nothing found...
throw new PHPExcel_Reader_Exception("No $searchType found for type $writerType"); throw new PHPExcel_Reader_Exception("No $searchType found for type $writerType");
} // function createWriter() }
/** /**
* Create PHPExcel_Reader_IReader * Create PHPExcel_Reader_IReader
@@ -158,17 +156,18 @@ class PHPExcel_IOFactory
* @return PHPExcel_Reader_IReader * @return PHPExcel_Reader_IReader
* @throws PHPExcel_Reader_Exception * @throws PHPExcel_Reader_Exception
*/ */
public static function createReader($readerType = '') { public static function createReader($readerType = '')
{
// Search type // Search type
$searchType = 'IReader'; $searchType = 'IReader';
// Include class // Include class
foreach (self::$_searchLocations as $searchLocation) { foreach (self::$searchLocations as $searchLocation) {
if ($searchLocation['type'] == $searchType) { if ($searchLocation['type'] == $searchType) {
$className = str_replace('{0}', $readerType, $searchLocation['class']); $className = str_replace('{0}', $readerType, $searchLocation['class']);
$instance = new $className(); $instance = new $className();
if ($instance !== NULL) { if ($instance !== null) {
return $instance; return $instance;
} }
} }
@@ -176,7 +175,7 @@ class PHPExcel_IOFactory
// Nothing found... // Nothing found...
throw new PHPExcel_Reader_Exception("No $searchType found for type $readerType"); throw new PHPExcel_Reader_Exception("No $searchType found for type $readerType");
} // function createReader() }
/** /**
* Loads PHPExcel from file using automatic PHPExcel_Reader_IReader resolution * Loads PHPExcel from file using automatic PHPExcel_Reader_IReader resolution
@@ -187,10 +186,11 @@ class PHPExcel_IOFactory
* @return PHPExcel * @return PHPExcel
* @throws PHPExcel_Reader_Exception * @throws PHPExcel_Reader_Exception
*/ */
public static function load($pFilename) { public static function load($pFilename)
{
$reader = self::createReaderForFile($pFilename); $reader = self::createReaderForFile($pFilename);
return $reader->load($pFilename); return $reader->load($pFilename);
} // function load() }
/** /**
* Identify file type using automatic PHPExcel_Reader_IReader resolution * Identify file type using automatic PHPExcel_Reader_IReader resolution
@@ -201,13 +201,14 @@ class PHPExcel_IOFactory
* @return string * @return string
* @throws PHPExcel_Reader_Exception * @throws PHPExcel_Reader_Exception
*/ */
public static function identify($pFilename) { public static function identify($pFilename)
{
$reader = self::createReaderForFile($pFilename); $reader = self::createReaderForFile($pFilename);
$className = get_class($reader); $className = get_class($reader);
$classType = explode('_',$className); $classType = explode('_', $className);
unset($reader); unset($reader);
return array_pop($classType); return array_pop($classType);
} // function identify() }
/** /**
* Create PHPExcel_Reader_IReader for file using automatic PHPExcel_Reader_IReader resolution * Create PHPExcel_Reader_IReader for file using automatic PHPExcel_Reader_IReader resolution
@@ -218,12 +219,12 @@ class PHPExcel_IOFactory
* @return PHPExcel_Reader_IReader * @return PHPExcel_Reader_IReader
* @throws PHPExcel_Reader_Exception * @throws PHPExcel_Reader_Exception
*/ */
public static function createReaderForFile($pFilename) { public static function createReaderForFile($pFilename)
{
// First, lucky guess by inspecting file extension // First, lucky guess by inspecting file extension
$pathinfo = pathinfo($pFilename); $pathinfo = pathinfo($pFilename);
$extensionType = NULL; $extensionType = null;
if (isset($pathinfo['extension'])) { if (isset($pathinfo['extension'])) {
switch (strtolower($pathinfo['extension'])) { switch (strtolower($pathinfo['extension'])) {
case 'xlsx': // Excel (OfficeOpenXML) Spreadsheet case 'xlsx': // Excel (OfficeOpenXML) Spreadsheet
@@ -262,7 +263,7 @@ class PHPExcel_IOFactory
break; break;
} }
if ($extensionType !== NULL) { if ($extensionType !== null) {
$reader = self::createReader($extensionType); $reader = self::createReader($extensionType);
// Let's see if we are lucky // Let's see if we are lucky
if (isset($reader) && $reader->canRead($pFilename)) { if (isset($reader) && $reader->canRead($pFilename)) {
@@ -272,8 +273,8 @@ class PHPExcel_IOFactory
} }
// If we reach here then "lucky guess" didn't give any result // If we reach here then "lucky guess" didn't give any result
// Try walking through all the options in self::$_autoResolveClasses // Try walking through all the options in self::$autoResolveClasses
foreach (self::$_autoResolveClasses as $autoResolveClass) { foreach (self::$autoResolveClasses as $autoResolveClass) {
// Ignore our original guess, we know that won't work // Ignore our original guess, we know that won't work
if ($autoResolveClass !== $extensionType) { if ($autoResolveClass !== $extensionType) {
$reader = self::createReader($autoResolveClass); $reader = self::createReader($autoResolveClass);
@@ -284,5 +285,5 @@ class PHPExcel_IOFactory
} }
throw new PHPExcel_Reader_Exception('Unable to identify a reader for this file'); throw new PHPExcel_Reader_Exception('Unable to identify a reader for this file');
} // function createReaderForFile() }
} }

View File

@@ -1,8 +1,9 @@
<?php <?php
/** /**
* PHPExcel * PHPExcel_NamedRange
* *
* Copyright (c) 2006 - 2014 PHPExcel * Copyright (c) 2006 - 2015 PHPExcel
* *
* This library is free software; you can redistribute it and/or * This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public * modify it under the terms of the GNU Lesser General Public
@@ -20,18 +21,9 @@
* *
* @category PHPExcel * @category PHPExcel
* @package PHPExcel * @package PHPExcel
* @copyright Copyright (c) 2006 - 2014 PHPExcel (http://www.codeplex.com/PHPExcel) * @copyright Copyright (c) 2006 - 2015 PHPExcel (http://www.codeplex.com/PHPExcel)
* @license http://www.gnu.org/licenses/old-licenses/lgpl-2.1.txt LGPL * @license http://www.gnu.org/licenses/old-licenses/lgpl-2.1.txt LGPL
* @version 1.8.0, 2014-03-02 * @version ##VERSION##, ##DATE##
*/
/**
* PHPExcel_NamedRange
*
* @category PHPExcel
* @package PHPExcel
* @copyright Copyright (c) 2006 - 2014 PHPExcel (http://www.codeplex.com/PHPExcel)
*/ */
class PHPExcel_NamedRange class PHPExcel_NamedRange
{ {
@@ -40,35 +32,35 @@ class PHPExcel_NamedRange
* *
* @var string * @var string
*/ */
private $_name; private $name;
/** /**
* Worksheet on which the named range can be resolved * Worksheet on which the named range can be resolved
* *
* @var PHPExcel_Worksheet * @var PHPExcel_Worksheet
*/ */
private $_worksheet; private $worksheet;
/** /**
* Range of the referenced cells * Range of the referenced cells
* *
* @var string * @var string
*/ */
private $_range; private $range;
/** /**
* Is the named range local? (i.e. can only be used on $this->_worksheet) * Is the named range local? (i.e. can only be used on $this->worksheet)
* *
* @var bool * @var bool
*/ */
private $_localOnly; private $localOnly;
/** /**
* Scope * Scope
* *
* @var PHPExcel_Worksheet * @var PHPExcel_Worksheet
*/ */
private $_scope; private $scope;
/** /**
* Create a new NamedRange * Create a new NamedRange
@@ -83,17 +75,16 @@ class PHPExcel_NamedRange
public function __construct($pName = null, PHPExcel_Worksheet $pWorksheet, $pRange = 'A1', $pLocalOnly = false, $pScope = null) public function __construct($pName = null, PHPExcel_Worksheet $pWorksheet, $pRange = 'A1', $pLocalOnly = false, $pScope = null)
{ {
// Validate data // Validate data
if (($pName === NULL) || ($pWorksheet === NULL) || ($pRange === NULL)) { if (($pName === null) || ($pWorksheet === null) || ($pRange === null)) {
throw new PHPExcel_Exception('Parameters can not be null.'); throw new PHPExcel_Exception('Parameters can not be null.');
} }
// Set local members // Set local members
$this->_name = $pName; $this->name = $pName;
$this->_worksheet = $pWorksheet; $this->worksheet = $pWorksheet;
$this->_range = $pRange; $this->range = $pRange;
$this->_localOnly = $pLocalOnly; $this->localOnly = $pLocalOnly;
$this->_scope = ($pLocalOnly == true) ? $this->scope = ($pLocalOnly == true) ? (($pScope == null) ? $pWorksheet : $pScope) : null;
(($pScope == null) ? $pWorksheet : $pScope) : null;
} }
/** /**
@@ -101,8 +92,9 @@ class PHPExcel_NamedRange
* *
* @return string * @return string
*/ */
public function getName() { public function getName()
return $this->_name; {
return $this->name;
} }
/** /**
@@ -111,24 +103,25 @@ class PHPExcel_NamedRange
* @param string $value * @param string $value
* @return PHPExcel_NamedRange * @return PHPExcel_NamedRange
*/ */
public function setName($value = null) { public function setName($value = null)
if ($value !== NULL) { {
if ($value !== null) {
// Old title // Old title
$oldTitle = $this->_name; $oldTitle = $this->name;
// Re-attach // Re-attach
if ($this->_worksheet !== NULL) { if ($this->worksheet !== null) {
$this->_worksheet->getParent()->removeNamedRange($this->_name,$this->_worksheet); $this->worksheet->getParent()->removeNamedRange($this->name, $this->worksheet);
} }
$this->_name = $value; $this->name = $value;
if ($this->_worksheet !== NULL) { if ($this->worksheet !== null) {
$this->_worksheet->getParent()->addNamedRange($this); $this->worksheet->getParent()->addNamedRange($this);
} }
// New title // New title
$newTitle = $this->_name; $newTitle = $this->name;
PHPExcel_ReferenceHelper::getInstance()->updateNamedFormulas($this->_worksheet->getParent(), $oldTitle, $newTitle); PHPExcel_ReferenceHelper::getInstance()->updateNamedFormulas($this->worksheet->getParent(), $oldTitle, $newTitle);
} }
return $this; return $this;
} }
@@ -138,8 +131,9 @@ class PHPExcel_NamedRange
* *
* @return PHPExcel_Worksheet * @return PHPExcel_Worksheet
*/ */
public function getWorksheet() { public function getWorksheet()
return $this->_worksheet; {
return $this->worksheet;
} }
/** /**
@@ -148,9 +142,10 @@ class PHPExcel_NamedRange
* @param PHPExcel_Worksheet $value * @param PHPExcel_Worksheet $value
* @return PHPExcel_NamedRange * @return PHPExcel_NamedRange
*/ */
public function setWorksheet(PHPExcel_Worksheet $value = null) { public function setWorksheet(PHPExcel_Worksheet $value = null)
if ($value !== NULL) { {
$this->_worksheet = $value; if ($value !== null) {
$this->worksheet = $value;
} }
return $this; return $this;
} }
@@ -160,8 +155,9 @@ class PHPExcel_NamedRange
* *
* @return string * @return string
*/ */
public function getRange() { public function getRange()
return $this->_range; {
return $this->range;
} }
/** /**
@@ -170,9 +166,10 @@ class PHPExcel_NamedRange
* @param string $value * @param string $value
* @return PHPExcel_NamedRange * @return PHPExcel_NamedRange
*/ */
public function setRange($value = null) { public function setRange($value = null)
if ($value !== NULL) { {
$this->_range = $value; if ($value !== null) {
$this->range = $value;
} }
return $this; return $this;
} }
@@ -182,8 +179,9 @@ class PHPExcel_NamedRange
* *
* @return bool * @return bool
*/ */
public function getLocalOnly() { public function getLocalOnly()
return $this->_localOnly; {
return $this->localOnly;
} }
/** /**
@@ -192,9 +190,10 @@ class PHPExcel_NamedRange
* @param bool $value * @param bool $value
* @return PHPExcel_NamedRange * @return PHPExcel_NamedRange
*/ */
public function setLocalOnly($value = false) { public function setLocalOnly($value = false)
$this->_localOnly = $value; {
$this->_scope = $value ? $this->_worksheet : null; $this->localOnly = $value;
$this->scope = $value ? $this->worksheet : null;
return $this; return $this;
} }
@@ -203,8 +202,9 @@ class PHPExcel_NamedRange
* *
* @return PHPExcel_Worksheet|null * @return PHPExcel_Worksheet|null
*/ */
public function getScope() { public function getScope()
return $this->_scope; {
return $this->scope;
} }
/** /**
@@ -213,9 +213,10 @@ class PHPExcel_NamedRange
* @param PHPExcel_Worksheet|null $value * @param PHPExcel_Worksheet|null $value
* @return PHPExcel_NamedRange * @return PHPExcel_NamedRange
*/ */
public function setScope(PHPExcel_Worksheet $value = null) { public function setScope(PHPExcel_Worksheet $value = null)
$this->_scope = $value; {
$this->_localOnly = ($value == null) ? false : true; $this->scope = $value;
$this->localOnly = ($value == null) ? false : true;
return $this; return $this;
} }
@@ -226,14 +227,16 @@ class PHPExcel_NamedRange
* @param PHPExcel_Worksheet|null $pSheet Scope. Use null for global scope * @param PHPExcel_Worksheet|null $pSheet Scope. Use null for global scope
* @return PHPExcel_NamedRange * @return PHPExcel_NamedRange
*/ */
public static function resolveRange($pNamedRange = '', PHPExcel_Worksheet $pSheet) { public static function resolveRange($pNamedRange = '', PHPExcel_Worksheet $pSheet)
{
return $pSheet->getParent()->getNamedRange($pNamedRange, $pSheet); return $pSheet->getParent()->getNamedRange($pNamedRange, $pSheet);
} }
/** /**
* Implement PHP __clone to create a deep clone, not just a shallow copy. * Implement PHP __clone to create a deep clone, not just a shallow copy.
*/ */
public function __clone() { public function __clone()
{
$vars = get_object_vars($this); $vars = get_object_vars($this);
foreach ($vars as $key => $value) { foreach ($vars as $key => $value) {
if (is_object($value)) { if (is_object($value)) {

View File

@@ -1,8 +1,9 @@
<?php <?php
/** /**
* PHPExcel * PHPExcel_Reader_Abstract
* *
* Copyright (c) 2006 - 2014 PHPExcel * Copyright (c) 2006 - 2015 PHPExcel
* *
* This library is free software; you can redistribute it and/or * This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public * modify it under the terms of the GNU Lesser General Public
@@ -20,18 +21,9 @@
* *
* @category PHPExcel * @category PHPExcel
* @package PHPExcel_Reader * @package PHPExcel_Reader
* @copyright Copyright (c) 2006 - 2014 PHPExcel (http://www.codeplex.com/PHPExcel) * @copyright Copyright (c) 2006 - 2015 PHPExcel (http://www.codeplex.com/PHPExcel)
* @license http://www.gnu.org/licenses/old-licenses/lgpl-2.1.txt LGPL * @license http://www.gnu.org/licenses/old-licenses/lgpl-2.1.txt LGPL
* @version 1.8.0, 2014-03-02 * @version ##VERSION##, ##DATE##
*/
/**
* PHPExcel_Reader_Abstract
*
* @category PHPExcel
* @package PHPExcel_Reader
* @copyright Copyright (c) 2006 - 2014 PHPExcel (http://www.codeplex.com/PHPExcel)
*/ */
abstract class PHPExcel_Reader_Abstract implements PHPExcel_Reader_IReader abstract class PHPExcel_Reader_Abstract implements PHPExcel_Reader_IReader
{ {
@@ -42,7 +34,7 @@ abstract class PHPExcel_Reader_Abstract implements PHPExcel_Reader_IReader
* *
* @var boolean * @var boolean
*/ */
protected $_readDataOnly = FALSE; protected $readDataOnly = false;
/** /**
* Read charts that are defined in the workbook? * Read charts that are defined in the workbook?
@@ -50,7 +42,7 @@ abstract class PHPExcel_Reader_Abstract implements PHPExcel_Reader_IReader
* *
* @var boolean * @var boolean
*/ */
protected $_includeCharts = FALSE; protected $includeCharts = false;
/** /**
* Restrict which sheets should be loaded? * Restrict which sheets should be loaded?
@@ -58,16 +50,16 @@ abstract class PHPExcel_Reader_Abstract implements PHPExcel_Reader_IReader
* *
* @var array of string * @var array of string
*/ */
protected $_loadSheetsOnly = NULL; protected $loadSheetsOnly;
/** /**
* PHPExcel_Reader_IReadFilter instance * PHPExcel_Reader_IReadFilter instance
* *
* @var PHPExcel_Reader_IReadFilter * @var PHPExcel_Reader_IReadFilter
*/ */
protected $_readFilter = NULL; protected $readFilter;
protected $_fileHandle = NULL; protected $fileHandle = null;
/** /**
@@ -77,8 +69,9 @@ abstract class PHPExcel_Reader_Abstract implements PHPExcel_Reader_IReader
* *
* @return boolean * @return boolean
*/ */
public function getReadDataOnly() { public function getReadDataOnly()
return $this->_readDataOnly; {
return $this->readDataOnly;
} }
/** /**
@@ -90,8 +83,9 @@ abstract class PHPExcel_Reader_Abstract implements PHPExcel_Reader_IReader
* *
* @return PHPExcel_Reader_IReader * @return PHPExcel_Reader_IReader
*/ */
public function setReadDataOnly($pValue = FALSE) { public function setReadDataOnly($pValue = false)
$this->_readDataOnly = $pValue; {
$this->readDataOnly = $pValue;
return $this; return $this;
} }
@@ -103,8 +97,9 @@ abstract class PHPExcel_Reader_Abstract implements PHPExcel_Reader_IReader
* *
* @return boolean * @return boolean
*/ */
public function getIncludeCharts() { public function getIncludeCharts()
return $this->_includeCharts; {
return $this->includeCharts;
} }
/** /**
@@ -117,8 +112,9 @@ abstract class PHPExcel_Reader_Abstract implements PHPExcel_Reader_IReader
* *
* @return PHPExcel_Reader_IReader * @return PHPExcel_Reader_IReader
*/ */
public function setIncludeCharts($pValue = FALSE) { public function setIncludeCharts($pValue = false)
$this->_includeCharts = (boolean) $pValue; {
$this->includeCharts = (boolean) $pValue;
return $this; return $this;
} }
@@ -131,7 +127,7 @@ abstract class PHPExcel_Reader_Abstract implements PHPExcel_Reader_IReader
*/ */
public function getLoadSheetsOnly() public function getLoadSheetsOnly()
{ {
return $this->_loadSheetsOnly; return $this->loadSheetsOnly;
} }
/** /**
@@ -143,10 +139,13 @@ abstract class PHPExcel_Reader_Abstract implements PHPExcel_Reader_IReader
* *
* @return PHPExcel_Reader_IReader * @return PHPExcel_Reader_IReader
*/ */
public function setLoadSheetsOnly($value = NULL) public function setLoadSheetsOnly($value = null)
{ {
$this->_loadSheetsOnly = is_array($value) ? if ($value === null) {
$value : array($value); return $this->setLoadAllSheets();
}
$this->loadSheetsOnly = is_array($value) ? $value : array($value);
return $this; return $this;
} }
@@ -158,7 +157,7 @@ abstract class PHPExcel_Reader_Abstract implements PHPExcel_Reader_IReader
*/ */
public function setLoadAllSheets() public function setLoadAllSheets()
{ {
$this->_loadSheetsOnly = NULL; $this->loadSheetsOnly = null;
return $this; return $this;
} }
@@ -167,8 +166,9 @@ abstract class PHPExcel_Reader_Abstract implements PHPExcel_Reader_IReader
* *
* @return PHPExcel_Reader_IReadFilter * @return PHPExcel_Reader_IReadFilter
*/ */
public function getReadFilter() { public function getReadFilter()
return $this->_readFilter; {
return $this->readFilter;
} }
/** /**
@@ -177,8 +177,9 @@ abstract class PHPExcel_Reader_Abstract implements PHPExcel_Reader_IReader
* @param PHPExcel_Reader_IReadFilter $pValue * @param PHPExcel_Reader_IReadFilter $pValue
* @return PHPExcel_Reader_IReader * @return PHPExcel_Reader_IReader
*/ */
public function setReadFilter(PHPExcel_Reader_IReadFilter $pValue) { public function setReadFilter(PHPExcel_Reader_IReadFilter $pValue)
$this->_readFilter = $pValue; {
$this->readFilter = $pValue;
return $this; return $this;
} }
@@ -189,7 +190,7 @@ abstract class PHPExcel_Reader_Abstract implements PHPExcel_Reader_IReader
* @throws PHPExcel_Reader_Exception * @throws PHPExcel_Reader_Exception
* @return resource * @return resource
*/ */
protected function _openFile($pFilename) protected function openFile($pFilename)
{ {
// Check if file exists // Check if file exists
if (!file_exists($pFilename) || !is_readable($pFilename)) { if (!file_exists($pFilename) || !is_readable($pFilename)) {
@@ -197,8 +198,8 @@ abstract class PHPExcel_Reader_Abstract implements PHPExcel_Reader_IReader
} }
// Open file // Open file
$this->_fileHandle = fopen($pFilename, 'r'); $this->fileHandle = fopen($pFilename, 'r');
if ($this->_fileHandle === FALSE) { if ($this->fileHandle === false) {
throw new PHPExcel_Reader_Exception("Could not open file " . $pFilename . " for reading."); throw new PHPExcel_Reader_Exception("Could not open file " . $pFilename . " for reading.");
} }
} }
@@ -214,14 +215,39 @@ abstract class PHPExcel_Reader_Abstract implements PHPExcel_Reader_IReader
{ {
// Check if file exists // Check if file exists
try { try {
$this->_openFile($pFilename); $this->openFile($pFilename);
} catch (Exception $e) { } catch (Exception $e) {
return FALSE; return false;
} }
$readable = $this->_isValidFormat(); $readable = $this->isValidFormat();
fclose ($this->_fileHandle); fclose($this->fileHandle);
return $readable; return $readable;
} }
/**
* Scan theXML for use of <!ENTITY to prevent XXE/XEE attacks
*
* @param string $xml
* @throws PHPExcel_Reader_Exception
*/
public function securityScan($xml)
{
$pattern = '/\\0?' . implode('\\0?', str_split('<!DOCTYPE')) . '\\0?/';
if (preg_match($pattern, $xml)) {
throw new PHPExcel_Reader_Exception('Detected use of ENTITY in XML, spreadsheet file load() aborted to prevent XXE/XEE attacks');
}
return $xml;
}
/**
* Scan theXML for use of <!ENTITY to prevent XXE/XEE attacks
*
* @param string $filestream
* @throws PHPExcel_Reader_Exception
*/
public function securityScanFile($filestream)
{
return $this->securityScan(file_get_contents($filestream));
}
} }

View File

@@ -1,8 +1,18 @@
<?php <?php
/** PHPExcel root directory */
if (!defined('PHPEXCEL_ROOT')) {
/**
* @ignore
*/
define('PHPEXCEL_ROOT', dirname(__FILE__) . '/../../');
require(PHPEXCEL_ROOT . 'PHPExcel/Autoloader.php');
}
/** /**
* PHPExcel * PHPExcel_Reader_CSV
* *
* Copyright (c) 2006 - 2014 PHPExcel * Copyright (c) 2006 - 2015 PHPExcel
* *
* This library is free software; you can redistribute it and/or * This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public * modify it under the terms of the GNU Lesser General Public
@@ -20,27 +30,9 @@
* *
* @category PHPExcel * @category PHPExcel
* @package PHPExcel_Reader * @package PHPExcel_Reader
* @copyright Copyright (c) 2006 - 2014 PHPExcel (http://www.codeplex.com/PHPExcel) * @copyright Copyright (c) 2006 - 2015 PHPExcel (http://www.codeplex.com/PHPExcel)
* @license http://www.gnu.org/licenses/old-licenses/lgpl-2.1.txt LGPL * @license http://www.gnu.org/licenses/old-licenses/lgpl-2.1.txt LGPL
* @version 1.8.0, 2014-03-02 * @version ##VERSION##, ##DATE##
*/
/** PHPExcel root directory */
if (!defined('PHPEXCEL_ROOT')) {
/**
* @ignore
*/
define('PHPEXCEL_ROOT', dirname(__FILE__) . '/../../');
require(PHPEXCEL_ROOT . 'PHPExcel/Autoloader.php');
}
/**
* PHPExcel_Reader_CSV
*
* @category PHPExcel
* @package PHPExcel_Reader
* @copyright Copyright (c) 2006 - 2014 PHPExcel (http://www.codeplex.com/PHPExcel)
*/ */
class PHPExcel_Reader_CSV extends PHPExcel_Reader_Abstract implements PHPExcel_Reader_IReader class PHPExcel_Reader_CSV extends PHPExcel_Reader_Abstract implements PHPExcel_Reader_IReader
{ {
@@ -50,7 +42,7 @@ class PHPExcel_Reader_CSV extends PHPExcel_Reader_Abstract implements PHPExcel_R
* @access private * @access private
* @var string * @var string
*/ */
private $_inputEncoding = 'UTF-8'; private $inputEncoding = 'UTF-8';
/** /**
* Delimiter * Delimiter
@@ -58,7 +50,7 @@ class PHPExcel_Reader_CSV extends PHPExcel_Reader_Abstract implements PHPExcel_R
* @access private * @access private
* @var string * @var string
*/ */
private $_delimiter = ','; private $delimiter = ',';
/** /**
* Enclosure * Enclosure
@@ -66,15 +58,7 @@ class PHPExcel_Reader_CSV extends PHPExcel_Reader_Abstract implements PHPExcel_R
* @access private * @access private
* @var string * @var string
*/ */
private $_enclosure = '"'; private $enclosure = '"';
/**
* Line ending
*
* @access private
* @var string
*/
private $_lineEnding = PHP_EOL;
/** /**
* Sheet index to read * Sheet index to read
@@ -82,7 +66,7 @@ class PHPExcel_Reader_CSV extends PHPExcel_Reader_Abstract implements PHPExcel_R
* @access private * @access private
* @var int * @var int
*/ */
private $_sheetIndex = 0; private $sheetIndex = 0;
/** /**
* Load rows contiguously * Load rows contiguously
@@ -90,21 +74,22 @@ class PHPExcel_Reader_CSV extends PHPExcel_Reader_Abstract implements PHPExcel_R
* @access private * @access private
* @var int * @var int
*/ */
private $_contiguous = false; private $contiguous = false;
/** /**
* Row counter for loading rows contiguously * Row counter for loading rows contiguously
* *
* @var int * @var int
*/ */
private $_contiguousRow = -1; private $contiguousRow = -1;
/** /**
* Create a new PHPExcel_Reader_CSV * Create a new PHPExcel_Reader_CSV
*/ */
public function __construct() { public function __construct()
$this->_readFilter = new PHPExcel_Reader_DefaultReadFilter(); {
$this->readFilter = new PHPExcel_Reader_DefaultReadFilter();
} }
/** /**
@@ -112,9 +97,9 @@ class PHPExcel_Reader_CSV extends PHPExcel_Reader_Abstract implements PHPExcel_R
* *
* @return boolean * @return boolean
*/ */
protected function _isValidFormat() protected function isValidFormat()
{ {
return TRUE; return true;
} }
/** /**
@@ -124,7 +109,7 @@ class PHPExcel_Reader_CSV extends PHPExcel_Reader_Abstract implements PHPExcel_R
*/ */
public function setInputEncoding($pValue = 'UTF-8') public function setInputEncoding($pValue = 'UTF-8')
{ {
$this->_inputEncoding = $pValue; $this->inputEncoding = $pValue;
return $this; return $this;
} }
@@ -135,37 +120,37 @@ class PHPExcel_Reader_CSV extends PHPExcel_Reader_Abstract implements PHPExcel_R
*/ */
public function getInputEncoding() public function getInputEncoding()
{ {
return $this->_inputEncoding; return $this->inputEncoding;
} }
/** /**
* Move filepointer past any BOM marker * Move filepointer past any BOM marker
* *
*/ */
protected function _skipBOM() protected function skipBOM()
{ {
rewind($this->_fileHandle); rewind($this->fileHandle);
switch ($this->_inputEncoding) { switch ($this->inputEncoding) {
case 'UTF-8': case 'UTF-8':
fgets($this->_fileHandle, 4) == "\xEF\xBB\xBF" ? fgets($this->fileHandle, 4) == "\xEF\xBB\xBF" ?
fseek($this->_fileHandle, 3) : fseek($this->_fileHandle, 0); fseek($this->fileHandle, 3) : fseek($this->fileHandle, 0);
break; break;
case 'UTF-16LE': case 'UTF-16LE':
fgets($this->_fileHandle, 3) == "\xFF\xFE" ? fgets($this->fileHandle, 3) == "\xFF\xFE" ?
fseek($this->_fileHandle, 2) : fseek($this->_fileHandle, 0); fseek($this->fileHandle, 2) : fseek($this->fileHandle, 0);
break; break;
case 'UTF-16BE': case 'UTF-16BE':
fgets($this->_fileHandle, 3) == "\xFE\xFF" ? fgets($this->fileHandle, 3) == "\xFE\xFF" ?
fseek($this->_fileHandle, 2) : fseek($this->_fileHandle, 0); fseek($this->fileHandle, 2) : fseek($this->fileHandle, 0);
break; break;
case 'UTF-32LE': case 'UTF-32LE':
fgets($this->_fileHandle, 5) == "\xFF\xFE\x00\x00" ? fgets($this->fileHandle, 5) == "\xFF\xFE\x00\x00" ?
fseek($this->_fileHandle, 4) : fseek($this->_fileHandle, 0); fseek($this->fileHandle, 4) : fseek($this->fileHandle, 0);
break; break;
case 'UTF-32BE': case 'UTF-32BE':
fgets($this->_fileHandle, 5) == "\x00\x00\xFE\xFF" ? fgets($this->fileHandle, 5) == "\x00\x00\xFE\xFF" ?
fseek($this->_fileHandle, 4) : fseek($this->_fileHandle, 0); fseek($this->fileHandle, 4) : fseek($this->fileHandle, 0);
break; break;
default: default:
break; break;
@@ -181,17 +166,17 @@ class PHPExcel_Reader_CSV extends PHPExcel_Reader_Abstract implements PHPExcel_R
public function listWorksheetInfo($pFilename) public function listWorksheetInfo($pFilename)
{ {
// Open file // Open file
$this->_openFile($pFilename); $this->openFile($pFilename);
if (!$this->_isValidFormat()) { if (!$this->isValidFormat()) {
fclose ($this->_fileHandle); fclose($this->fileHandle);
throw new PHPExcel_Reader_Exception($pFilename . " is an Invalid Spreadsheet file."); throw new PHPExcel_Reader_Exception($pFilename . " is an Invalid Spreadsheet file.");
} }
$fileHandle = $this->_fileHandle; $fileHandle = $this->fileHandle;
// Skip BOM, if any // Skip BOM, if any
$this->_skipBOM(); $this->skipBOM();
$escapeEnclosures = array( "\\" . $this->_enclosure, $this->_enclosure . $this->_enclosure ); $escapeEnclosures = array( "\\" . $this->enclosure, $this->enclosure . $this->enclosure );
$worksheetInfo = array(); $worksheetInfo = array();
$worksheetInfo[0]['worksheetName'] = 'Worksheet'; $worksheetInfo[0]['worksheetName'] = 'Worksheet';
@@ -201,7 +186,7 @@ class PHPExcel_Reader_CSV extends PHPExcel_Reader_Abstract implements PHPExcel_R
$worksheetInfo[0]['totalColumns'] = 0; $worksheetInfo[0]['totalColumns'] = 0;
// Loop through each line of the file in turn // Loop through each line of the file in turn
while (($rowData = fgetcsv($fileHandle, 0, $this->_delimiter, $this->_enclosure)) !== FALSE) { while (($rowData = fgetcsv($fileHandle, 0, $this->delimiter, $this->enclosure)) !== false) {
$worksheetInfo[0]['totalRows']++; $worksheetInfo[0]['totalRows']++;
$worksheetInfo[0]['lastColumnIndex'] = max($worksheetInfo[0]['lastColumnIndex'], count($rowData) - 1); $worksheetInfo[0]['lastColumnIndex'] = max($worksheetInfo[0]['lastColumnIndex'], count($rowData) - 1);
} }
@@ -245,43 +230,43 @@ class PHPExcel_Reader_CSV extends PHPExcel_Reader_Abstract implements PHPExcel_R
ini_set('auto_detect_line_endings', true); ini_set('auto_detect_line_endings', true);
// Open file // Open file
$this->_openFile($pFilename); $this->openFile($pFilename);
if (!$this->_isValidFormat()) { if (!$this->isValidFormat()) {
fclose ($this->_fileHandle); fclose($this->fileHandle);
throw new PHPExcel_Reader_Exception($pFilename . " is an Invalid Spreadsheet file."); throw new PHPExcel_Reader_Exception($pFilename . " is an Invalid Spreadsheet file.");
} }
$fileHandle = $this->_fileHandle; $fileHandle = $this->fileHandle;
// Skip BOM, if any // Skip BOM, if any
$this->_skipBOM(); $this->skipBOM();
// Create new PHPExcel object // Create new PHPExcel object
while ($objPHPExcel->getSheetCount() <= $this->_sheetIndex) { while ($objPHPExcel->getSheetCount() <= $this->sheetIndex) {
$objPHPExcel->createSheet(); $objPHPExcel->createSheet();
} }
$sheet = $objPHPExcel->setActiveSheetIndex($this->_sheetIndex); $sheet = $objPHPExcel->setActiveSheetIndex($this->sheetIndex);
$escapeEnclosures = array( "\\" . $this->_enclosure, $escapeEnclosures = array( "\\" . $this->enclosure,
$this->_enclosure . $this->_enclosure $this->enclosure . $this->enclosure
); );
// Set our starting row based on whether we're in contiguous mode or not // Set our starting row based on whether we're in contiguous mode or not
$currentRow = 1; $currentRow = 1;
if ($this->_contiguous) { if ($this->contiguous) {
$currentRow = ($this->_contiguousRow == -1) ? $sheet->getHighestRow(): $this->_contiguousRow; $currentRow = ($this->contiguousRow == -1) ? $sheet->getHighestRow(): $this->contiguousRow;
} }
// Loop through each line of the file in turn // Loop through each line of the file in turn
while (($rowData = fgetcsv($fileHandle, 0, $this->_delimiter, $this->_enclosure)) !== FALSE) { while (($rowData = fgetcsv($fileHandle, 0, $this->delimiter, $this->enclosure)) !== false) {
$columnLetter = 'A'; $columnLetter = 'A';
foreach($rowData as $rowDatum) { foreach ($rowData as $rowDatum) {
if ($rowDatum != '' && $this->_readFilter->readCell($columnLetter, $currentRow)) { if ($rowDatum != '' && $this->readFilter->readCell($columnLetter, $currentRow)) {
// Unescape enclosures // Unescape enclosures
$rowDatum = str_replace($escapeEnclosures, $this->_enclosure, $rowDatum); $rowDatum = str_replace($escapeEnclosures, $this->enclosure, $rowDatum);
// Convert encoding if necessary // Convert encoding if necessary
if ($this->_inputEncoding !== 'UTF-8') { if ($this->inputEncoding !== 'UTF-8') {
$rowDatum = PHPExcel_Shared_String::ConvertEncoding($rowDatum, 'UTF-8', $this->_inputEncoding); $rowDatum = PHPExcel_Shared_String::ConvertEncoding($rowDatum, 'UTF-8', $this->inputEncoding);
} }
// Set cell value // Set cell value
@@ -295,8 +280,8 @@ class PHPExcel_Reader_CSV extends PHPExcel_Reader_Abstract implements PHPExcel_R
// Close file // Close file
fclose($fileHandle); fclose($fileHandle);
if ($this->_contiguous) { if ($this->contiguous) {
$this->_contiguousRow = $currentRow; $this->contiguousRow = $currentRow;
} }
ini_set('auto_detect_line_endings', $lineEnding); ini_set('auto_detect_line_endings', $lineEnding);
@@ -310,8 +295,9 @@ class PHPExcel_Reader_CSV extends PHPExcel_Reader_Abstract implements PHPExcel_R
* *
* @return string * @return string
*/ */
public function getDelimiter() { public function getDelimiter()
return $this->_delimiter; {
return $this->delimiter;
} }
/** /**
@@ -320,8 +306,9 @@ class PHPExcel_Reader_CSV extends PHPExcel_Reader_Abstract implements PHPExcel_R
* @param string $pValue Delimiter, defaults to , * @param string $pValue Delimiter, defaults to ,
* @return PHPExcel_Reader_CSV * @return PHPExcel_Reader_CSV
*/ */
public function setDelimiter($pValue = ',') { public function setDelimiter($pValue = ',')
$this->_delimiter = $pValue; {
$this->delimiter = $pValue;
return $this; return $this;
} }
@@ -330,8 +317,9 @@ class PHPExcel_Reader_CSV extends PHPExcel_Reader_Abstract implements PHPExcel_R
* *
* @return string * @return string
*/ */
public function getEnclosure() { public function getEnclosure()
return $this->_enclosure; {
return $this->enclosure;
} }
/** /**
@@ -340,31 +328,12 @@ class PHPExcel_Reader_CSV extends PHPExcel_Reader_Abstract implements PHPExcel_R
* @param string $pValue Enclosure, defaults to " * @param string $pValue Enclosure, defaults to "
* @return PHPExcel_Reader_CSV * @return PHPExcel_Reader_CSV
*/ */
public function setEnclosure($pValue = '"') { public function setEnclosure($pValue = '"')
{
if ($pValue == '') { if ($pValue == '') {
$pValue = '"'; $pValue = '"';
} }
$this->_enclosure = $pValue; $this->enclosure = $pValue;
return $this;
}
/**
* Get line ending
*
* @return string
*/
public function getLineEnding() {
return $this->_lineEnding;
}
/**
* Set line ending
*
* @param string $pValue Line ending, defaults to OS line ending (PHP_EOL)
* @return PHPExcel_Reader_CSV
*/
public function setLineEnding($pValue = PHP_EOL) {
$this->_lineEnding = $pValue;
return $this; return $this;
} }
@@ -373,8 +342,9 @@ class PHPExcel_Reader_CSV extends PHPExcel_Reader_Abstract implements PHPExcel_R
* *
* @return integer * @return integer
*/ */
public function getSheetIndex() { public function getSheetIndex()
return $this->_sheetIndex; {
return $this->sheetIndex;
} }
/** /**
@@ -383,8 +353,9 @@ class PHPExcel_Reader_CSV extends PHPExcel_Reader_Abstract implements PHPExcel_R
* @param integer $pValue Sheet index * @param integer $pValue Sheet index
* @return PHPExcel_Reader_CSV * @return PHPExcel_Reader_CSV
*/ */
public function setSheetIndex($pValue = 0) { public function setSheetIndex($pValue = 0)
$this->_sheetIndex = $pValue; {
$this->sheetIndex = $pValue;
return $this; return $this;
} }
@@ -393,11 +364,11 @@ class PHPExcel_Reader_CSV extends PHPExcel_Reader_Abstract implements PHPExcel_R
* *
* @param boolean $contiguous * @param boolean $contiguous
*/ */
public function setContiguous($contiguous = FALSE) public function setContiguous($contiguous = false)
{ {
$this->_contiguous = (bool) $contiguous; $this->contiguous = (bool) $contiguous;
if (!$contiguous) { if (!$contiguous) {
$this->_contiguousRow = -1; $this->contiguousRow = -1;
} }
return $this; return $this;
@@ -408,8 +379,8 @@ class PHPExcel_Reader_CSV extends PHPExcel_Reader_Abstract implements PHPExcel_R
* *
* @return boolean * @return boolean
*/ */
public function getContiguous() { public function getContiguous()
return $this->_contiguous; {
return $this->contiguous;
} }
} }

View File

@@ -1,8 +1,18 @@
<?php <?php
/** PHPExcel root directory */
if (!defined('PHPEXCEL_ROOT')) {
/**
* @ignore
*/
define('PHPEXCEL_ROOT', dirname(__FILE__) . '/../../');
require(PHPEXCEL_ROOT . 'PHPExcel/Autoloader.php');
}
/** /**
* PHPExcel * PHPExcel_Reader_DefaultReadFilter
* *
* Copyright (c) 2006 - 2014 PHPExcel * Copyright (c) 2006 - 2015 PHPExcel
* *
* This library is free software; you can redistribute it and/or * This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public * modify it under the terms of the GNU Lesser General Public
@@ -20,39 +30,22 @@
* *
* @category PHPExcel * @category PHPExcel
* @package PHPExcel_Reader * @package PHPExcel_Reader
* @copyright Copyright (c) 2006 - 2014 PHPExcel (http://www.codeplex.com/PHPExcel) * @copyright Copyright (c) 2006 - 2015 PHPExcel (http://www.codeplex.com/PHPExcel)
* @license http://www.gnu.org/licenses/old-licenses/lgpl-2.1.txt LGPL * @license http://www.gnu.org/licenses/old-licenses/lgpl-2.1.txt LGPL
* @version 1.8.0, 2014-03-02 * @version ##VERSION##, ##DATE##
*/
/** PHPExcel root directory */
if (!defined('PHPEXCEL_ROOT')) {
/**
* @ignore
*/
define('PHPEXCEL_ROOT', dirname(__FILE__) . '/../../');
require(PHPEXCEL_ROOT . 'PHPExcel/Autoloader.php');
}
/**
* PHPExcel_Reader_DefaultReadFilter
*
* @category PHPExcel
* @package PHPExcel_Reader
* @copyright Copyright (c) 2006 - 2014 PHPExcel (http://www.codeplex.com/PHPExcel)
*/ */
class PHPExcel_Reader_DefaultReadFilter implements PHPExcel_Reader_IReadFilter class PHPExcel_Reader_DefaultReadFilter implements PHPExcel_Reader_IReadFilter
{ {
/** /**
* Should this cell be read? * Should this cell be read?
* *
* @param $column String column index * @param $column Column address (as a string value like "A", or "IV")
* @param $row Row index * @param $row Row number
* @param $worksheetName Optional worksheet name * @param $worksheetName Optional worksheet name
* @return boolean * @return boolean
*/ */
public function readCell($column, $row, $worksheetName = '') { public function readCell($column, $row, $worksheetName = '')
{
return true; return true;
} }
} }

View File

@@ -1,8 +1,18 @@
<?php <?php
/** PHPExcel root directory */
if (!defined('PHPEXCEL_ROOT')) {
/**
* @ignore
*/
define('PHPEXCEL_ROOT', dirname(__FILE__) . '/../../');
require(PHPEXCEL_ROOT . 'PHPExcel/Autoloader.php');
}
/** /**
* PHPExcel * PHPExcel_Reader_Excel2003XML
* *
* Copyright (c) 2006 - 2014 PHPExcel * Copyright (c) 2006 - 2015 PHPExcel
* *
* This library is free software; you can redistribute it and/or * This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public * modify it under the terms of the GNU Lesser General Public
@@ -20,27 +30,9 @@
* *
* @category PHPExcel * @category PHPExcel
* @package PHPExcel_Reader * @package PHPExcel_Reader
* @copyright Copyright (c) 2006 - 2014 PHPExcel (http://www.codeplex.com/PHPExcel) * @copyright Copyright (c) 2006 - 2015 PHPExcel (http://www.codeplex.com/PHPExcel)
* @license http://www.gnu.org/licenses/old-licenses/lgpl-2.1.txt LGPL * @license http://www.gnu.org/licenses/old-licenses/lgpl-2.1.txt LGPL
* @version 1.8.0, 2014-03-02 * @version ##VERSION##, ##DATE##
*/
/** PHPExcel root directory */
if (!defined('PHPEXCEL_ROOT')) {
/**
* @ignore
*/
define('PHPEXCEL_ROOT', dirname(__FILE__) . '/../../');
require(PHPEXCEL_ROOT . 'PHPExcel/Autoloader.php');
}
/**
* PHPExcel_Reader_Excel2003XML
*
* @category PHPExcel
* @package PHPExcel_Reader
* @copyright Copyright (c) 2006 - 2014 PHPExcel (http://www.codeplex.com/PHPExcel)
*/ */
class PHPExcel_Reader_Excel2003XML extends PHPExcel_Reader_Abstract implements PHPExcel_Reader_IReader class PHPExcel_Reader_Excel2003XML extends PHPExcel_Reader_Abstract implements PHPExcel_Reader_IReader
{ {
@@ -49,21 +41,21 @@ class PHPExcel_Reader_Excel2003XML extends PHPExcel_Reader_Abstract implements P
* *
* @var array * @var array
*/ */
private $_styles = array(); protected $styles = array();
/** /**
* Character set used in the file * Character set used in the file
* *
* @var string * @var string
*/ */
private $_charSet = 'UTF-8'; protected $charSet = 'UTF-8';
/** /**
* Create a new PHPExcel_Reader_Excel2003XML * Create a new PHPExcel_Reader_Excel2003XML
*/ */
public function __construct() { public function __construct()
$this->_readFilter = new PHPExcel_Reader_DefaultReadFilter(); {
$this->readFilter = new PHPExcel_Reader_DefaultReadFilter();
} }
@@ -93,15 +85,15 @@ class PHPExcel_Reader_Excel2003XML extends PHPExcel_Reader_Abstract implements P
); );
// Open file // Open file
$this->_openFile($pFilename); $this->openFile($pFilename);
$fileHandle = $this->_fileHandle; $fileHandle = $this->fileHandle;
// Read sample data (first 2 KB will do) // Read sample data (first 2 KB will do)
$data = fread($fileHandle, 2048); $data = fread($fileHandle, 2048);
fclose($fileHandle); fclose($fileHandle);
$valid = true; $valid = true;
foreach($signature as $match) { foreach ($signature as $match) {
// every part of the signature must be present // every part of the signature must be present
if (strpos($data, $match) === false) { if (strpos($data, $match) === false) {
$valid = false; $valid = false;
@@ -110,10 +102,10 @@ class PHPExcel_Reader_Excel2003XML extends PHPExcel_Reader_Abstract implements P
} }
// Retrieve charset encoding // Retrieve charset encoding
if(preg_match('/<?xml.*encoding=[\'"](.*?)[\'"].*?>/um',$data,$matches)) { if (preg_match('/<?xml.*encoding=[\'"](.*?)[\'"].*?>/um', $data, $matches)) {
$this->_charSet = strtoupper($matches[1]); $this->charSet = strtoupper($matches[1]);
} }
// echo 'Character Set is ',$this->_charSet,'<br />'; // echo 'Character Set is ', $this->charSet,'<br />';
return $valid; return $valid;
} }
@@ -137,13 +129,13 @@ class PHPExcel_Reader_Excel2003XML extends PHPExcel_Reader_Abstract implements P
$worksheetNames = array(); $worksheetNames = array();
$xml = simplexml_load_file($pFilename, 'SimpleXMLElement', PHPExcel_Settings::getLibXmlLoaderOptions()); $xml = simplexml_load_string($this->securityScan(file_get_contents($pFilename)), 'SimpleXMLElement', PHPExcel_Settings::getLibXmlLoaderOptions());
$namespaces = $xml->getNamespaces(true); $namespaces = $xml->getNamespaces(true);
$xml_ss = $xml->children($namespaces['ss']); $xml_ss = $xml->children($namespaces['ss']);
foreach($xml_ss->Worksheet as $worksheet) { foreach ($xml_ss->Worksheet as $worksheet) {
$worksheet_ss = $worksheet->attributes($namespaces['ss']); $worksheet_ss = $worksheet->attributes($namespaces['ss']);
$worksheetNames[] = self::_convertStringEncoding((string) $worksheet_ss['Name'],$this->_charSet); $worksheetNames[] = self::convertStringEncoding((string) $worksheet_ss['Name'], $this->charSet);
} }
return $worksheetNames; return $worksheetNames;
@@ -165,12 +157,12 @@ class PHPExcel_Reader_Excel2003XML extends PHPExcel_Reader_Abstract implements P
$worksheetInfo = array(); $worksheetInfo = array();
$xml = simplexml_load_file($pFilename, 'SimpleXMLElement', PHPExcel_Settings::getLibXmlLoaderOptions()); $xml = simplexml_load_string($this->securityScan(file_get_contents($pFilename)), 'SimpleXMLElement', PHPExcel_Settings::getLibXmlLoaderOptions());
$namespaces = $xml->getNamespaces(true); $namespaces = $xml->getNamespaces(true);
$worksheetID = 1; $worksheetID = 1;
$xml_ss = $xml->children($namespaces['ss']); $xml_ss = $xml->children($namespaces['ss']);
foreach($xml_ss->Worksheet as $worksheet) { foreach ($xml_ss->Worksheet as $worksheet) {
$worksheet_ss = $worksheet->attributes($namespaces['ss']); $worksheet_ss = $worksheet->attributes($namespaces['ss']);
$tmpInfo = array(); $tmpInfo = array();
@@ -189,11 +181,11 @@ class PHPExcel_Reader_Excel2003XML extends PHPExcel_Reader_Abstract implements P
if (isset($worksheet->Table->Row)) { if (isset($worksheet->Table->Row)) {
$rowIndex = 0; $rowIndex = 0;
foreach($worksheet->Table->Row as $rowData) { foreach ($worksheet->Table->Row as $rowData) {
$columnIndex = 0; $columnIndex = 0;
$rowHasData = false; $rowHasData = false;
foreach($rowData->Cell as $cell) { foreach ($rowData->Cell as $cell) {
if (isset($cell->Data)) { if (isset($cell->Data)) {
$tmpInfo['lastColumnIndex'] = max($tmpInfo['lastColumnIndex'], $columnIndex); $tmpInfo['lastColumnIndex'] = max($tmpInfo['lastColumnIndex'], $columnIndex);
$rowHasData = true; $rowHasData = true;
@@ -232,15 +224,16 @@ class PHPExcel_Reader_Excel2003XML extends PHPExcel_Reader_Abstract implements P
{ {
// Create new PHPExcel // Create new PHPExcel
$objPHPExcel = new PHPExcel(); $objPHPExcel = new PHPExcel();
$objPHPExcel->removeSheetByIndex(0);
// Load into this instance // Load into this instance
return $this->loadIntoExisting($pFilename, $objPHPExcel); return $this->loadIntoExisting($pFilename, $objPHPExcel);
} }
protected static function identifyFixedStyleValue($styleList, &$styleAttributeValue)
private static function identifyFixedStyleValue($styleList,&$styleAttributeValue) { {
$styleAttributeValue = strtolower($styleAttributeValue); $styleAttributeValue = strtolower($styleAttributeValue);
foreach($styleList as $style) { foreach ($styleList as $style) {
if ($styleAttributeValue == strtolower($style)) { if ($styleAttributeValue == strtolower($style)) {
$styleAttributeValue = $style; $styleAttributeValue = $style;
return true; return true;
@@ -249,13 +242,13 @@ class PHPExcel_Reader_Excel2003XML extends PHPExcel_Reader_Abstract implements P
return false; return false;
} }
/** /**
* pixel units to excel width units(units of 1/256th of a character width) * pixel units to excel width units(units of 1/256th of a character width)
* @param pxs * @param pxs
* @return * @return
*/ */
private static function _pixel2WidthUnits($pxs) { protected static function pixel2WidthUnits($pxs)
{
$UNIT_OFFSET_MAP = array(0, 36, 73, 109, 146, 182, 219); $UNIT_OFFSET_MAP = array(0, 36, 73, 109, 146, 182, 219);
$widthUnits = 256 * ($pxs / 7); $widthUnits = 256 * ($pxs / 7);
@@ -263,25 +256,24 @@ class PHPExcel_Reader_Excel2003XML extends PHPExcel_Reader_Abstract implements P
return $widthUnits; return $widthUnits;
} }
/** /**
* excel width units(units of 1/256th of a character width) to pixel units * excel width units(units of 1/256th of a character width) to pixel units
* @param widthUnits * @param widthUnits
* @return * @return
*/ */
private static function _widthUnits2Pixel($widthUnits) { protected static function widthUnits2Pixel($widthUnits)
{
$pixels = ($widthUnits / 256) * 7; $pixels = ($widthUnits / 256) * 7;
$offsetWidthUnits = $widthUnits % 256; $offsetWidthUnits = $widthUnits % 256;
$pixels += round($offsetWidthUnits / (256 / 7)); $pixels += round($offsetWidthUnits / (256 / 7));
return $pixels; return $pixels;
} }
protected static function hex2str($hex)
private static function _hex2str($hex) { {
return chr(hexdec($hex[1])); return chr(hexdec($hex[1]));
} }
/** /**
* Loads PHPExcel from file into PHPExcel instance * Loads PHPExcel from file into PHPExcel instance
* *
@@ -320,7 +312,6 @@ class PHPExcel_Reader_Excel2003XML extends PHPExcel_Reader_Abstract implements P
$timezoneObj = new DateTimeZone('Europe/London'); $timezoneObj = new DateTimeZone('Europe/London');
$GMT = new DateTimeZone('UTC'); $GMT = new DateTimeZone('UTC');
// Check if file exists // Check if file exists
if (!file_exists($pFilename)) { if (!file_exists($pFilename)) {
throw new PHPExcel_Reader_Exception("Could not open " . $pFilename . " for reading! File does not exist."); throw new PHPExcel_Reader_Exception("Could not open " . $pFilename . " for reading! File does not exist.");
@@ -330,206 +321,202 @@ class PHPExcel_Reader_Excel2003XML extends PHPExcel_Reader_Abstract implements P
throw new PHPExcel_Reader_Exception($pFilename . " is an Invalid Spreadsheet file."); throw new PHPExcel_Reader_Exception($pFilename . " is an Invalid Spreadsheet file.");
} }
$xml = simplexml_load_file($pFilename, 'SimpleXMLElement', PHPExcel_Settings::getLibXmlLoaderOptions()); $xml = simplexml_load_string($this->securityScan(file_get_contents($pFilename)), 'SimpleXMLElement', PHPExcel_Settings::getLibXmlLoaderOptions());
$namespaces = $xml->getNamespaces(true); $namespaces = $xml->getNamespaces(true);
$docProps = $objPHPExcel->getProperties(); $docProps = $objPHPExcel->getProperties();
if (isset($xml->DocumentProperties[0])) { if (isset($xml->DocumentProperties[0])) {
foreach($xml->DocumentProperties[0] as $propertyName => $propertyValue) { foreach ($xml->DocumentProperties[0] as $propertyName => $propertyValue) {
switch ($propertyName) { switch ($propertyName) {
case 'Title' : case 'Title':
$docProps->setTitle(self::_convertStringEncoding($propertyValue,$this->_charSet)); $docProps->setTitle(self::convertStringEncoding($propertyValue, $this->charSet));
break; break;
case 'Subject' : case 'Subject':
$docProps->setSubject(self::_convertStringEncoding($propertyValue,$this->_charSet)); $docProps->setSubject(self::convertStringEncoding($propertyValue, $this->charSet));
break; break;
case 'Author' : case 'Author':
$docProps->setCreator(self::_convertStringEncoding($propertyValue,$this->_charSet)); $docProps->setCreator(self::convertStringEncoding($propertyValue, $this->charSet));
break; break;
case 'Created' : case 'Created':
$creationDate = strtotime($propertyValue); $creationDate = strtotime($propertyValue);
$docProps->setCreated($creationDate); $docProps->setCreated($creationDate);
break; break;
case 'LastAuthor' : case 'LastAuthor':
$docProps->setLastModifiedBy(self::_convertStringEncoding($propertyValue,$this->_charSet)); $docProps->setLastModifiedBy(self::convertStringEncoding($propertyValue, $this->charSet));
break; break;
case 'LastSaved' : case 'LastSaved':
$lastSaveDate = strtotime($propertyValue); $lastSaveDate = strtotime($propertyValue);
$docProps->setModified($lastSaveDate); $docProps->setModified($lastSaveDate);
break; break;
case 'Company' : case 'Company':
$docProps->setCompany(self::_convertStringEncoding($propertyValue,$this->_charSet)); $docProps->setCompany(self::convertStringEncoding($propertyValue, $this->charSet));
break; break;
case 'Category' : case 'Category':
$docProps->setCategory(self::_convertStringEncoding($propertyValue,$this->_charSet)); $docProps->setCategory(self::convertStringEncoding($propertyValue, $this->charSet));
break; break;
case 'Manager' : case 'Manager':
$docProps->setManager(self::_convertStringEncoding($propertyValue,$this->_charSet)); $docProps->setManager(self::convertStringEncoding($propertyValue, $this->charSet));
break; break;
case 'Keywords' : case 'Keywords':
$docProps->setKeywords(self::_convertStringEncoding($propertyValue,$this->_charSet)); $docProps->setKeywords(self::convertStringEncoding($propertyValue, $this->charSet));
break; break;
case 'Description' : case 'Description':
$docProps->setDescription(self::_convertStringEncoding($propertyValue,$this->_charSet)); $docProps->setDescription(self::convertStringEncoding($propertyValue, $this->charSet));
break; break;
} }
} }
} }
if (isset($xml->CustomDocumentProperties)) { if (isset($xml->CustomDocumentProperties)) {
foreach($xml->CustomDocumentProperties[0] as $propertyName => $propertyValue) { foreach ($xml->CustomDocumentProperties[0] as $propertyName => $propertyValue) {
$propertyAttributes = $propertyValue->attributes($namespaces['dt']); $propertyAttributes = $propertyValue->attributes($namespaces['dt']);
$propertyName = preg_replace_callback('/_x([0-9a-z]{4})_/','PHPExcel_Reader_Excel2003XML::_hex2str',$propertyName); $propertyName = preg_replace_callback('/_x([0-9a-z]{4})_/', 'PHPExcel_Reader_Excel2003XML::hex2str', $propertyName);
$propertyType = PHPExcel_DocumentProperties::PROPERTY_TYPE_UNKNOWN; $propertyType = PHPExcel_DocumentProperties::PROPERTY_TYPE_UNKNOWN;
switch((string) $propertyAttributes) { switch ((string) $propertyAttributes) {
case 'string' : case 'string':
$propertyType = PHPExcel_DocumentProperties::PROPERTY_TYPE_STRING; $propertyType = PHPExcel_DocumentProperties::PROPERTY_TYPE_STRING;
$propertyValue = trim($propertyValue); $propertyValue = trim($propertyValue);
break; break;
case 'boolean' : case 'boolean':
$propertyType = PHPExcel_DocumentProperties::PROPERTY_TYPE_BOOLEAN; $propertyType = PHPExcel_DocumentProperties::PROPERTY_TYPE_BOOLEAN;
$propertyValue = (bool) $propertyValue; $propertyValue = (bool) $propertyValue;
break; break;
case 'integer' : case 'integer':
$propertyType = PHPExcel_DocumentProperties::PROPERTY_TYPE_INTEGER; $propertyType = PHPExcel_DocumentProperties::PROPERTY_TYPE_INTEGER;
$propertyValue = intval($propertyValue); $propertyValue = intval($propertyValue);
break; break;
case 'float' : case 'float':
$propertyType = PHPExcel_DocumentProperties::PROPERTY_TYPE_FLOAT; $propertyType = PHPExcel_DocumentProperties::PROPERTY_TYPE_FLOAT;
$propertyValue = floatval($propertyValue); $propertyValue = floatval($propertyValue);
break; break;
case 'dateTime.tz' : case 'dateTime.tz':
$propertyType = PHPExcel_DocumentProperties::PROPERTY_TYPE_DATE; $propertyType = PHPExcel_DocumentProperties::PROPERTY_TYPE_DATE;
$propertyValue = strtotime(trim($propertyValue)); $propertyValue = strtotime(trim($propertyValue));
break; break;
} }
$docProps->setCustomProperty($propertyName,$propertyValue,$propertyType); $docProps->setCustomProperty($propertyName, $propertyValue, $propertyType);
} }
} }
foreach($xml->Styles[0] as $style) { foreach ($xml->Styles[0] as $style) {
$style_ss = $style->attributes($namespaces['ss']); $style_ss = $style->attributes($namespaces['ss']);
$styleID = (string) $style_ss['ID']; $styleID = (string) $style_ss['ID'];
// echo 'Style ID = '.$styleID.'<br />'; // echo 'Style ID = '.$styleID.'<br />';
if ($styleID == 'Default') { $this->styles[$styleID] = (isset($this->styles['Default'])) ? $this->styles['Default'] : array();
$this->_styles['Default'] = array();
} else {
$this->_styles[$styleID] = $this->_styles['Default'];
}
foreach ($style as $styleType => $styleData) { foreach ($style as $styleType => $styleData) {
$styleAttributes = $styleData->attributes($namespaces['ss']); $styleAttributes = $styleData->attributes($namespaces['ss']);
// echo $styleType.'<br />'; // echo $styleType.'<br />';
switch ($styleType) { switch ($styleType) {
case 'Alignment' : case 'Alignment':
foreach($styleAttributes as $styleAttributeKey => $styleAttributeValue) { foreach ($styleAttributes as $styleAttributeKey => $styleAttributeValue) {
// echo $styleAttributeKey.' = '.$styleAttributeValue.'<br />'; // echo $styleAttributeKey.' = '.$styleAttributeValue.'<br />';
$styleAttributeValue = (string) $styleAttributeValue; $styleAttributeValue = (string) $styleAttributeValue;
switch ($styleAttributeKey) { switch ($styleAttributeKey) {
case 'Vertical' : case 'Vertical':
if (self::identifyFixedStyleValue($verticalAlignmentStyles,$styleAttributeValue)) { if (self::identifyFixedStyleValue($verticalAlignmentStyles, $styleAttributeValue)) {
$this->_styles[$styleID]['alignment']['vertical'] = $styleAttributeValue; $this->styles[$styleID]['alignment']['vertical'] = $styleAttributeValue;
} }
break; break;
case 'Horizontal' : case 'Horizontal':
if (self::identifyFixedStyleValue($horizontalAlignmentStyles,$styleAttributeValue)) { if (self::identifyFixedStyleValue($horizontalAlignmentStyles, $styleAttributeValue)) {
$this->_styles[$styleID]['alignment']['horizontal'] = $styleAttributeValue; $this->styles[$styleID]['alignment']['horizontal'] = $styleAttributeValue;
} }
break; break;
case 'WrapText' : case 'WrapText':
$this->_styles[$styleID]['alignment']['wrap'] = true; $this->styles[$styleID]['alignment']['wrap'] = true;
break; break;
} }
} }
break; break;
case 'Borders' : case 'Borders':
foreach($styleData->Border as $borderStyle) { foreach ($styleData->Border as $borderStyle) {
$borderAttributes = $borderStyle->attributes($namespaces['ss']); $borderAttributes = $borderStyle->attributes($namespaces['ss']);
$thisBorder = array(); $thisBorder = array();
foreach($borderAttributes as $borderStyleKey => $borderStyleValue) { foreach ($borderAttributes as $borderStyleKey => $borderStyleValue) {
// echo $borderStyleKey.' = '.$borderStyleValue.'<br />'; // echo $borderStyleKey.' = '.$borderStyleValue.'<br />';
switch ($borderStyleKey) { switch ($borderStyleKey) {
case 'LineStyle' : case 'LineStyle':
$thisBorder['style'] = PHPExcel_Style_Border::BORDER_MEDIUM; $thisBorder['style'] = PHPExcel_Style_Border::BORDER_MEDIUM;
// $thisBorder['style'] = $borderStyleValue; // $thisBorder['style'] = $borderStyleValue;
break; break;
case 'Weight' : case 'Weight':
// $thisBorder['style'] = $borderStyleValue; // $thisBorder['style'] = $borderStyleValue;
break; break;
case 'Position' : case 'Position':
$borderPosition = strtolower($borderStyleValue); $borderPosition = strtolower($borderStyleValue);
break; break;
case 'Color' : case 'Color':
$borderColour = substr($borderStyleValue,1); $borderColour = substr($borderStyleValue, 1);
$thisBorder['color']['rgb'] = $borderColour; $thisBorder['color']['rgb'] = $borderColour;
break; break;
} }
} }
if (!empty($thisBorder)) { if (!empty($thisBorder)) {
if (($borderPosition == 'left') || ($borderPosition == 'right') || ($borderPosition == 'top') || ($borderPosition == 'bottom')) { if (($borderPosition == 'left') || ($borderPosition == 'right') || ($borderPosition == 'top') || ($borderPosition == 'bottom')) {
$this->_styles[$styleID]['borders'][$borderPosition] = $thisBorder; $this->styles[$styleID]['borders'][$borderPosition] = $thisBorder;
} }
} }
} }
break; break;
case 'Font' : case 'Font':
foreach($styleAttributes as $styleAttributeKey => $styleAttributeValue) { foreach ($styleAttributes as $styleAttributeKey => $styleAttributeValue) {
// echo $styleAttributeKey.' = '.$styleAttributeValue.'<br />'; // echo $styleAttributeKey.' = '.$styleAttributeValue.'<br />';
$styleAttributeValue = (string) $styleAttributeValue; $styleAttributeValue = (string) $styleAttributeValue;
switch ($styleAttributeKey) { switch ($styleAttributeKey) {
case 'FontName' : case 'FontName':
$this->_styles[$styleID]['font']['name'] = $styleAttributeValue; $this->styles[$styleID]['font']['name'] = $styleAttributeValue;
break; break;
case 'Size' : case 'Size':
$this->_styles[$styleID]['font']['size'] = $styleAttributeValue; $this->styles[$styleID]['font']['size'] = $styleAttributeValue;
break; break;
case 'Color' : case 'Color':
$this->_styles[$styleID]['font']['color']['rgb'] = substr($styleAttributeValue,1); $this->styles[$styleID]['font']['color']['rgb'] = substr($styleAttributeValue, 1);
break; break;
case 'Bold' : case 'Bold':
$this->_styles[$styleID]['font']['bold'] = true; $this->styles[$styleID]['font']['bold'] = true;
break; break;
case 'Italic' : case 'Italic':
$this->_styles[$styleID]['font']['italic'] = true; $this->styles[$styleID]['font']['italic'] = true;
break; break;
case 'Underline' : case 'Underline':
if (self::identifyFixedStyleValue($underlineStyles,$styleAttributeValue)) { if (self::identifyFixedStyleValue($underlineStyles, $styleAttributeValue)) {
$this->_styles[$styleID]['font']['underline'] = $styleAttributeValue; $this->styles[$styleID]['font']['underline'] = $styleAttributeValue;
} }
break; break;
} }
} }
break; break;
case 'Interior' : case 'Interior':
foreach($styleAttributes as $styleAttributeKey => $styleAttributeValue) { foreach ($styleAttributes as $styleAttributeKey => $styleAttributeValue) {
// echo $styleAttributeKey.' = '.$styleAttributeValue.'<br />'; // echo $styleAttributeKey.' = '.$styleAttributeValue.'<br />';
switch ($styleAttributeKey) { switch ($styleAttributeKey) {
case 'Color' : case 'Color':
$this->_styles[$styleID]['fill']['color']['rgb'] = substr($styleAttributeValue,1); $this->styles[$styleID]['fill']['color']['rgb'] = substr($styleAttributeValue, 1);
break; break;
} }
} }
break; break;
case 'NumberFormat' : case 'NumberFormat':
foreach($styleAttributes as $styleAttributeKey => $styleAttributeValue) { foreach ($styleAttributes as $styleAttributeKey => $styleAttributeValue) {
// echo $styleAttributeKey.' = '.$styleAttributeValue.'<br />'; // echo $styleAttributeKey.' = '.$styleAttributeValue.'<br />';
$styleAttributeValue = str_replace($fromFormats,$toFormats,$styleAttributeValue); $styleAttributeValue = str_replace($fromFormats, $toFormats, $styleAttributeValue);
switch ($styleAttributeValue) { switch ($styleAttributeValue) {
case 'Short Date' : case 'Short Date':
$styleAttributeValue = 'dd/mm/yyyy'; $styleAttributeValue = 'dd/mm/yyyy';
break; break;
} }
if ($styleAttributeValue > '') { if ($styleAttributeValue > '') {
$this->_styles[$styleID]['numberformat']['code'] = $styleAttributeValue; $this->styles[$styleID]['numberformat']['code'] = $styleAttributeValue;
} }
} }
break; break;
case 'Protection' : case 'Protection':
foreach($styleAttributes as $styleAttributeKey => $styleAttributeValue) { foreach ($styleAttributes as $styleAttributeKey => $styleAttributeValue) {
// echo $styleAttributeKey.' = '.$styleAttributeValue.'<br />'; // echo $styleAttributeKey.' = '.$styleAttributeValue.'<br />';
} }
break; break;
} }
} }
// print_r($this->_styles[$styleID]); // print_r($this->styles[$styleID]);
// echo '<hr />'; // echo '<hr />';
} }
// echo '<hr />'; // echo '<hr />';
@@ -537,30 +524,30 @@ class PHPExcel_Reader_Excel2003XML extends PHPExcel_Reader_Abstract implements P
$worksheetID = 0; $worksheetID = 0;
$xml_ss = $xml->children($namespaces['ss']); $xml_ss = $xml->children($namespaces['ss']);
foreach($xml_ss->Worksheet as $worksheet) { foreach ($xml_ss->Worksheet as $worksheet) {
$worksheet_ss = $worksheet->attributes($namespaces['ss']); $worksheet_ss = $worksheet->attributes($namespaces['ss']);
if ((isset($this->_loadSheetsOnly)) && (isset($worksheet_ss['Name'])) && if ((isset($this->loadSheetsOnly)) && (isset($worksheet_ss['Name'])) &&
(!in_array($worksheet_ss['Name'], $this->_loadSheetsOnly))) { (!in_array($worksheet_ss['Name'], $this->loadSheetsOnly))) {
continue; continue;
} }
// echo '<h3>Worksheet: ',$worksheet_ss['Name'],'<h3>'; // echo '<h3>Worksheet: ', $worksheet_ss['Name'],'<h3>';
// //
// Create new Worksheet // Create new Worksheet
$objPHPExcel->createSheet(); $objPHPExcel->createSheet();
$objPHPExcel->setActiveSheetIndex($worksheetID); $objPHPExcel->setActiveSheetIndex($worksheetID);
if (isset($worksheet_ss['Name'])) { if (isset($worksheet_ss['Name'])) {
$worksheetName = self::_convertStringEncoding((string) $worksheet_ss['Name'],$this->_charSet); $worksheetName = self::convertStringEncoding((string) $worksheet_ss['Name'], $this->charSet);
// Use false for $updateFormulaCellReferences to prevent adjustment of worksheet references in // Use false for $updateFormulaCellReferences to prevent adjustment of worksheet references in
// formula cells... during the load, all formulae should be correct, and we're simply bringing // formula cells... during the load, all formulae should be correct, and we're simply bringing
// the worksheet name in line with the formula, not the reverse // the worksheet name in line with the formula, not the reverse
$objPHPExcel->getActiveSheet()->setTitle($worksheetName,false); $objPHPExcel->getActiveSheet()->setTitle($worksheetName, false);
} }
$columnID = 'A'; $columnID = 'A';
if (isset($worksheet->Table->Column)) { if (isset($worksheet->Table->Column)) {
foreach($worksheet->Table->Column as $columnData) { foreach ($worksheet->Table->Column as $columnData) {
$columnData_ss = $columnData->attributes($namespaces['ss']); $columnData_ss = $columnData->attributes($namespaces['ss']);
if (isset($columnData_ss['Index'])) { if (isset($columnData_ss['Index'])) {
$columnID = PHPExcel_Cell::stringFromColumnIndex($columnData_ss['Index']-1); $columnID = PHPExcel_Cell::stringFromColumnIndex($columnData_ss['Index']-1);
@@ -576,7 +563,8 @@ class PHPExcel_Reader_Excel2003XML extends PHPExcel_Reader_Abstract implements P
$rowID = 1; $rowID = 1;
if (isset($worksheet->Table->Row)) { if (isset($worksheet->Table->Row)) {
foreach($worksheet->Table->Row as $rowData) { $additionalMergedCells = 0;
foreach ($worksheet->Table->Row as $rowData) {
$rowHasData = false; $rowHasData = false;
$row_ss = $rowData->attributes($namespaces['ss']); $row_ss = $rowData->attributes($namespaces['ss']);
if (isset($row_ss['Index'])) { if (isset($row_ss['Index'])) {
@@ -585,15 +573,14 @@ class PHPExcel_Reader_Excel2003XML extends PHPExcel_Reader_Abstract implements P
// echo '<b>Row '.$rowID.'</b><br />'; // echo '<b>Row '.$rowID.'</b><br />';
$columnID = 'A'; $columnID = 'A';
foreach($rowData->Cell as $cell) { foreach ($rowData->Cell as $cell) {
$cell_ss = $cell->attributes($namespaces['ss']); $cell_ss = $cell->attributes($namespaces['ss']);
if (isset($cell_ss['Index'])) { if (isset($cell_ss['Index'])) {
$columnID = PHPExcel_Cell::stringFromColumnIndex($cell_ss['Index']-1); $columnID = PHPExcel_Cell::stringFromColumnIndex($cell_ss['Index']-1);
} }
$cellRange = $columnID.$rowID; $cellRange = $columnID.$rowID;
if ($this->getReadFilter() !== NULL) { if ($this->getReadFilter() !== null) {
if (!$this->getReadFilter()->readCell($columnID, $rowID, $worksheetName)) { if (!$this->getReadFilter()->readCell($columnID, $rowID, $worksheetName)) {
continue; continue;
} }
@@ -602,6 +589,7 @@ class PHPExcel_Reader_Excel2003XML extends PHPExcel_Reader_Abstract implements P
if ((isset($cell_ss['MergeAcross'])) || (isset($cell_ss['MergeDown']))) { if ((isset($cell_ss['MergeAcross'])) || (isset($cell_ss['MergeDown']))) {
$columnTo = $columnID; $columnTo = $columnID;
if (isset($cell_ss['MergeAcross'])) { if (isset($cell_ss['MergeAcross'])) {
$additionalMergedCells += (int)$cell_ss['MergeAcross'];
$columnTo = PHPExcel_Cell::stringFromColumnIndex(PHPExcel_Cell::columnIndexFromString($columnID) + $cell_ss['MergeAcross'] -1); $columnTo = PHPExcel_Cell::stringFromColumnIndex(PHPExcel_Cell::columnIndexFromString($columnID) + $cell_ss['MergeAcross'] -1);
} }
$rowTo = $rowID; $rowTo = $rowID;
@@ -639,26 +627,26 @@ class PHPExcel_Reader_Excel2003XML extends PHPExcel_Reader_Abstract implements P
const TYPE_INLINE = 'inlineStr'; const TYPE_INLINE = 'inlineStr';
const TYPE_ERROR = 'e'; const TYPE_ERROR = 'e';
*/ */
case 'String' : case 'String':
$cellValue = self::_convertStringEncoding($cellValue,$this->_charSet); $cellValue = self::convertStringEncoding($cellValue, $this->charSet);
$type = PHPExcel_Cell_DataType::TYPE_STRING; $type = PHPExcel_Cell_DataType::TYPE_STRING;
break; break;
case 'Number' : case 'Number':
$type = PHPExcel_Cell_DataType::TYPE_NUMERIC; $type = PHPExcel_Cell_DataType::TYPE_NUMERIC;
$cellValue = (float) $cellValue; $cellValue = (float) $cellValue;
if (floor($cellValue) == $cellValue) { if (floor($cellValue) == $cellValue) {
$cellValue = (integer) $cellValue; $cellValue = (integer) $cellValue;
} }
break; break;
case 'Boolean' : case 'Boolean':
$type = PHPExcel_Cell_DataType::TYPE_BOOL; $type = PHPExcel_Cell_DataType::TYPE_BOOL;
$cellValue = ($cellValue != 0); $cellValue = ($cellValue != 0);
break; break;
case 'DateTime' : case 'DateTime':
$type = PHPExcel_Cell_DataType::TYPE_NUMERIC; $type = PHPExcel_Cell_DataType::TYPE_NUMERIC;
$cellValue = PHPExcel_Shared_Date::PHPToExcel(strtotime($cellValue)); $cellValue = PHPExcel_Shared_Date::PHPToExcel(strtotime($cellValue));
break; break;
case 'Error' : case 'Error':
$type = PHPExcel_Cell_DataType::TYPE_ERROR; $type = PHPExcel_Cell_DataType::TYPE_ERROR;
break; break;
} }
@@ -668,58 +656,66 @@ class PHPExcel_Reader_Excel2003XML extends PHPExcel_Reader_Abstract implements P
// echo 'FORMULA<br />'; // echo 'FORMULA<br />';
$type = PHPExcel_Cell_DataType::TYPE_FORMULA; $type = PHPExcel_Cell_DataType::TYPE_FORMULA;
$columnNumber = PHPExcel_Cell::columnIndexFromString($columnID); $columnNumber = PHPExcel_Cell::columnIndexFromString($columnID);
if (substr($cellDataFormula,0,3) == 'of:') { if (substr($cellDataFormula, 0, 3) == 'of:') {
$cellDataFormula = substr($cellDataFormula,3); $cellDataFormula = substr($cellDataFormula, 3);
// echo 'Before: ',$cellDataFormula,'<br />'; // echo 'Before: ', $cellDataFormula,'<br />';
$temp = explode('"',$cellDataFormula); $temp = explode('"', $cellDataFormula);
$key = false; $key = false;
foreach($temp as &$value) { foreach ($temp as &$value) {
// Only replace in alternate array entries (i.e. non-quoted blocks) // Only replace in alternate array entries (i.e. non-quoted blocks)
if ($key = !$key) { if ($key = !$key) {
$value = str_replace(array('[.','.',']'),'',$value); $value = str_replace(array('[.', '.', ']'), '', $value);
} }
} }
} else { } else {
// Convert R1C1 style references to A1 style references (but only when not quoted) // Convert R1C1 style references to A1 style references (but only when not quoted)
// echo 'Before: ',$cellDataFormula,'<br />'; // echo 'Before: ', $cellDataFormula,'<br />';
$temp = explode('"',$cellDataFormula); $temp = explode('"', $cellDataFormula);
$key = false; $key = false;
foreach($temp as &$value) { foreach ($temp as &$value) {
// Only replace in alternate array entries (i.e. non-quoted blocks) // Only replace in alternate array entries (i.e. non-quoted blocks)
if ($key = !$key) { if ($key = !$key) {
preg_match_all('/(R(\[?-?\d*\]?))(C(\[?-?\d*\]?))/',$value, $cellReferences,PREG_SET_ORDER+PREG_OFFSET_CAPTURE); preg_match_all('/(R(\[?-?\d*\]?))(C(\[?-?\d*\]?))/', $value, $cellReferences, PREG_SET_ORDER + PREG_OFFSET_CAPTURE);
// Reverse the matches array, otherwise all our offsets will become incorrect if we modify our way // Reverse the matches array, otherwise all our offsets will become incorrect if we modify our way
// through the formula from left to right. Reversing means that we work right to left.through // through the formula from left to right. Reversing means that we work right to left.through
// the formula // the formula
$cellReferences = array_reverse($cellReferences); $cellReferences = array_reverse($cellReferences);
// Loop through each R1C1 style reference in turn, converting it to its A1 style equivalent, // Loop through each R1C1 style reference in turn, converting it to its A1 style equivalent,
// then modify the formula to use that new reference // then modify the formula to use that new reference
foreach($cellReferences as $cellReference) { foreach ($cellReferences as $cellReference) {
$rowReference = $cellReference[2][0]; $rowReference = $cellReference[2][0];
// Empty R reference is the current row // Empty R reference is the current row
if ($rowReference == '') $rowReference = $rowID; if ($rowReference == '') {
$rowReference = $rowID;
}
// Bracketed R references are relative to the current row // Bracketed R references are relative to the current row
if ($rowReference{0} == '[') $rowReference = $rowID + trim($rowReference,'[]'); if ($rowReference{0} == '[') {
$rowReference = $rowID + trim($rowReference, '[]');
}
$columnReference = $cellReference[4][0]; $columnReference = $cellReference[4][0];
// Empty C reference is the current column // Empty C reference is the current column
if ($columnReference == '') $columnReference = $columnNumber; if ($columnReference == '') {
$columnReference = $columnNumber;
}
// Bracketed C references are relative to the current column // Bracketed C references are relative to the current column
if ($columnReference{0} == '[') $columnReference = $columnNumber + trim($columnReference,'[]'); if ($columnReference{0} == '[') {
$columnReference = $columnNumber + trim($columnReference, '[]');
}
$A1CellReference = PHPExcel_Cell::stringFromColumnIndex($columnReference-1).$rowReference; $A1CellReference = PHPExcel_Cell::stringFromColumnIndex($columnReference-1).$rowReference;
$value = substr_replace($value,$A1CellReference,$cellReference[0][1],strlen($cellReference[0][0])); $value = substr_replace($value, $A1CellReference, $cellReference[0][1], strlen($cellReference[0][0]));
} }
} }
} }
} }
unset($value); unset($value);
// Then rebuild the formula string // Then rebuild the formula string
$cellDataFormula = implode('"',$temp); $cellDataFormula = implode('"', $temp);
// echo 'After: ',$cellDataFormula,'<br />'; // echo 'After: ', $cellDataFormula,'<br />';
} }
// echo 'Cell '.$columnID.$rowID.' is a '.$type.' with a value of '.(($hasCalculatedValue) ? $cellDataFormula : $cellValue).'<br />'; // echo 'Cell '.$columnID.$rowID.' is a '.$type.' with a value of '.(($hasCalculatedValue) ? $cellDataFormula : $cellValue).'<br />';
// //
$objPHPExcel->getActiveSheet()->getCell($columnID.$rowID)->setValueExplicit((($hasCalculatedValue) ? $cellDataFormula : $cellValue),$type); $objPHPExcel->getActiveSheet()->getCell($columnID.$rowID)->setValueExplicit((($hasCalculatedValue) ? $cellDataFormula : $cellValue), $type);
if ($hasCalculatedValue) { if ($hasCalculatedValue) {
// echo 'Formula result is '.$cellValue.'<br />'; // echo 'Formula result is '.$cellValue.'<br />';
$objPHPExcel->getActiveSheet()->getCell($columnID.$rowID)->setCalculatedValue($cellValue); $objPHPExcel->getActiveSheet()->getCell($columnID.$rowID)->setCalculatedValue($cellValue);
@@ -733,32 +729,34 @@ class PHPExcel_Reader_Excel2003XML extends PHPExcel_Reader_Abstract implements P
$author = 'unknown'; $author = 'unknown';
if (isset($commentAttributes->Author)) { if (isset($commentAttributes->Author)) {
$author = (string)$commentAttributes->Author; $author = (string)$commentAttributes->Author;
// echo 'Author: ',$author,'<br />'; // echo 'Author: ', $author,'<br />';
} }
$node = $cell->Comment->Data->asXML(); $node = $cell->Comment->Data->asXML();
// $annotation = str_replace('html:','',substr($node,49,-10)); // $annotation = str_replace('html:','',substr($node,49,-10));
// echo $annotation,'<br />'; // echo $annotation,'<br />';
$annotation = strip_tags($node); $annotation = strip_tags($node);
// echo 'Annotation: ',$annotation,'<br />'; // echo 'Annotation: ', $annotation,'<br />';
$objPHPExcel->getActiveSheet()->getComment( $columnID.$rowID ) $objPHPExcel->getActiveSheet()->getComment($columnID.$rowID)->setAuthor(self::convertStringEncoding($author, $this->charSet))->setText($this->parseRichText($annotation));
->setAuthor(self::_convertStringEncoding($author ,$this->_charSet))
->setText($this->_parseRichText($annotation) );
} }
if (($cellIsSet) && (isset($cell_ss['StyleID']))) { if (($cellIsSet) && (isset($cell_ss['StyleID']))) {
$style = (string) $cell_ss['StyleID']; $style = (string) $cell_ss['StyleID'];
// echo 'Cell style for '.$columnID.$rowID.' is '.$style.'<br />'; // echo 'Cell style for '.$columnID.$rowID.' is '.$style.'<br />';
if ((isset($this->_styles[$style])) && (!empty($this->_styles[$style]))) { if ((isset($this->styles[$style])) && (!empty($this->styles[$style]))) {
// echo 'Cell '.$columnID.$rowID.'<br />'; // echo 'Cell '.$columnID.$rowID.'<br />';
// print_r($this->_styles[$style]); // print_r($this->styles[$style]);
// echo '<br />'; // echo '<br />';
if (!$objPHPExcel->getActiveSheet()->cellExists($columnID.$rowID)) { if (!$objPHPExcel->getActiveSheet()->cellExists($columnID.$rowID)) {
$objPHPExcel->getActiveSheet()->getCell($columnID.$rowID)->setValue(NULL); $objPHPExcel->getActiveSheet()->getCell($columnID.$rowID)->setValue(null);
} }
$objPHPExcel->getActiveSheet()->getStyle($cellRange)->applyFromArray($this->_styles[$style]); $objPHPExcel->getActiveSheet()->getStyle($cellRange)->applyFromArray($this->styles[$style]);
} }
} }
++$columnID; ++$columnID;
while ($additionalMergedCells > 0) {
++$columnID;
$additionalMergedCells--;
}
} }
if ($rowHasData) { if ($rowHasData) {
@@ -783,20 +781,21 @@ class PHPExcel_Reader_Excel2003XML extends PHPExcel_Reader_Abstract implements P
} }
private static function _convertStringEncoding($string,$charset) { protected static function convertStringEncoding($string, $charset)
{
if ($charset != 'UTF-8') { if ($charset != 'UTF-8') {
return PHPExcel_Shared_String::ConvertEncoding($string,'UTF-8',$charset); return PHPExcel_Shared_String::ConvertEncoding($string, 'UTF-8', $charset);
} }
return $string; return $string;
} }
private function _parseRichText($is = '') { protected function parseRichText($is = '')
{
$value = new PHPExcel_RichText(); $value = new PHPExcel_RichText();
$value->createText(self::_convertStringEncoding($is,$this->_charSet)); $value->createText(self::convertStringEncoding($is, $this->charSet));
return $value; return $value;
} }
} }

File diff suppressed because it is too large Load Diff

View File

@@ -2,7 +2,7 @@
/** /**
* PHPExcel * PHPExcel
* *
* Copyright (c) 2006 - 2014 PHPExcel * Copyright (c) 2006 - 2015 PHPExcel
* *
* This library is free software; you can redistribute it and/or * This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public * modify it under the terms of the GNU Lesser General Public
@@ -20,9 +20,9 @@
* *
* @category PHPExcel * @category PHPExcel
* @package PHPExcel_Reader_Excel2007 * @package PHPExcel_Reader_Excel2007
* @copyright Copyright (c) 2006 - 2014 PHPExcel (http://www.codeplex.com/PHPExcel) * @copyright Copyright (c) 2006 - 2015 PHPExcel (http://www.codeplex.com/PHPExcel)
* @license http://www.gnu.org/licenses/old-licenses/lgpl-2.1.txt LGPL * @license http://www.gnu.org/licenses/old-licenses/lgpl-2.1.txt LGPL
* @version 1.8.0, 2014-03-02 * @version ##VERSION##, ##DATE##
*/ */
/** /**
@@ -30,11 +30,12 @@
* *
* @category PHPExcel * @category PHPExcel
* @package PHPExcel_Reader_Excel2007 * @package PHPExcel_Reader_Excel2007
* @copyright Copyright (c) 2006 - 2014 PHPExcel (http://www.codeplex.com/PHPExcel) * @copyright Copyright (c) 2006 - 2015 PHPExcel (http://www.codeplex.com/PHPExcel)
*/ */
class PHPExcel_Reader_Excel2007_Chart class PHPExcel_Reader_Excel2007_Chart
{ {
private static function _getAttribute($component, $name, $format) { private static function getAttribute($component, $name, $format)
{
$attributes = $component->attributes(); $attributes = $component->attributes();
if (isset($attributes[$name])) { if (isset($attributes[$name])) {
if ($format == 'string') { if ($format == 'string') {
@@ -48,145 +49,146 @@ class PHPExcel_Reader_Excel2007_Chart
} }
} }
return null; return null;
} // function _getAttribute() }
private static function _readColor($color,$background=false) { private static function readColor($color, $background = false)
{
if (isset($color["rgb"])) { if (isset($color["rgb"])) {
return (string)$color["rgb"]; return (string)$color["rgb"];
} else if (isset($color["indexed"])) { } elseif (isset($color["indexed"])) {
return PHPExcel_Style_Color::indexedColor($color["indexed"]-7,$background)->getARGB(); return PHPExcel_Style_Color::indexedColor($color["indexed"]-7, $background)->getARGB();
} }
} }
public static function readChart($chartElements, $chartName)
public static function readChart($chartElements,$chartName) { {
$namespacesChartMeta = $chartElements->getNamespaces(true); $namespacesChartMeta = $chartElements->getNamespaces(true);
$chartElementsC = $chartElements->children($namespacesChartMeta['c']); $chartElementsC = $chartElements->children($namespacesChartMeta['c']);
$XaxisLabel = $YaxisLabel = $legend = $title = NULL; $XaxisLabel = $YaxisLabel = $legend = $title = null;
$dispBlanksAs = $plotVisOnly = NULL; $dispBlanksAs = $plotVisOnly = null;
foreach($chartElementsC as $chartElementKey => $chartElement) { foreach ($chartElementsC as $chartElementKey => $chartElement) {
switch ($chartElementKey) { switch ($chartElementKey) {
case "chart": case "chart":
foreach($chartElement as $chartDetailsKey => $chartDetails) { foreach ($chartElement as $chartDetailsKey => $chartDetails) {
$chartDetailsC = $chartDetails->children($namespacesChartMeta['c']); $chartDetailsC = $chartDetails->children($namespacesChartMeta['c']);
switch ($chartDetailsKey) { switch ($chartDetailsKey) {
case "plotArea": case "plotArea":
$plotAreaLayout = $XaxisLable = $YaxisLable = null; $plotAreaLayout = $XaxisLable = $YaxisLable = null;
$plotSeries = $plotAttributes = array(); $plotSeries = $plotAttributes = array();
foreach($chartDetails as $chartDetailKey => $chartDetail) { foreach ($chartDetails as $chartDetailKey => $chartDetail) {
switch ($chartDetailKey) { switch ($chartDetailKey) {
case "layout": case "layout":
$plotAreaLayout = self::_chartLayoutDetails($chartDetail,$namespacesChartMeta,'plotArea'); $plotAreaLayout = self::chartLayoutDetails($chartDetail, $namespacesChartMeta, 'plotArea');
break; break;
case "catAx": case "catAx":
if (isset($chartDetail->title)) { if (isset($chartDetail->title)) {
$XaxisLabel = self::_chartTitle($chartDetail->title->children($namespacesChartMeta['c']),$namespacesChartMeta,'cat'); $XaxisLabel = self::chartTitle($chartDetail->title->children($namespacesChartMeta['c']), $namespacesChartMeta, 'cat');
} }
break; break;
case "dateAx": case "dateAx":
if (isset($chartDetail->title)) { if (isset($chartDetail->title)) {
$XaxisLabel = self::_chartTitle($chartDetail->title->children($namespacesChartMeta['c']),$namespacesChartMeta,'cat'); $XaxisLabel = self::chartTitle($chartDetail->title->children($namespacesChartMeta['c']), $namespacesChartMeta, 'cat');
} }
break; break;
case "valAx": case "valAx":
if (isset($chartDetail->title)) { if (isset($chartDetail->title)) {
$YaxisLabel = self::_chartTitle($chartDetail->title->children($namespacesChartMeta['c']),$namespacesChartMeta,'cat'); $YaxisLabel = self::chartTitle($chartDetail->title->children($namespacesChartMeta['c']), $namespacesChartMeta, 'cat');
} }
break; break;
case "barChart": case "barChart":
case "bar3DChart": case "bar3DChart":
$barDirection = self::_getAttribute($chartDetail->barDir, 'val', 'string'); $barDirection = self::getAttribute($chartDetail->barDir, 'val', 'string');
$plotSer = self::_chartDataSeries($chartDetail,$namespacesChartMeta,$chartDetailKey); $plotSer = self::chartDataSeries($chartDetail, $namespacesChartMeta, $chartDetailKey);
$plotSer->setPlotDirection($barDirection); $plotSer->setPlotDirection($barDirection);
$plotSeries[] = $plotSer; $plotSeries[] = $plotSer;
$plotAttributes = self::_readChartAttributes($chartDetail); $plotAttributes = self::readChartAttributes($chartDetail);
break; break;
case "lineChart": case "lineChart":
case "line3DChart": case "line3DChart":
$plotSeries[] = self::_chartDataSeries($chartDetail,$namespacesChartMeta,$chartDetailKey); $plotSeries[] = self::chartDataSeries($chartDetail, $namespacesChartMeta, $chartDetailKey);
$plotAttributes = self::_readChartAttributes($chartDetail); $plotAttributes = self::readChartAttributes($chartDetail);
break; break;
case "areaChart": case "areaChart":
case "area3DChart": case "area3DChart":
$plotSeries[] = self::_chartDataSeries($chartDetail,$namespacesChartMeta,$chartDetailKey); $plotSeries[] = self::chartDataSeries($chartDetail, $namespacesChartMeta, $chartDetailKey);
$plotAttributes = self::_readChartAttributes($chartDetail); $plotAttributes = self::readChartAttributes($chartDetail);
break; break;
case "doughnutChart": case "doughnutChart":
case "pieChart": case "pieChart":
case "pie3DChart": case "pie3DChart":
$explosion = isset($chartDetail->ser->explosion); $explosion = isset($chartDetail->ser->explosion);
$plotSer = self::_chartDataSeries($chartDetail,$namespacesChartMeta,$chartDetailKey); $plotSer = self::chartDataSeries($chartDetail, $namespacesChartMeta, $chartDetailKey);
$plotSer->setPlotStyle($explosion); $plotSer->setPlotStyle($explosion);
$plotSeries[] = $plotSer; $plotSeries[] = $plotSer;
$plotAttributes = self::_readChartAttributes($chartDetail); $plotAttributes = self::readChartAttributes($chartDetail);
break; break;
case "scatterChart": case "scatterChart":
$scatterStyle = self::_getAttribute($chartDetail->scatterStyle, 'val', 'string'); $scatterStyle = self::getAttribute($chartDetail->scatterStyle, 'val', 'string');
$plotSer = self::_chartDataSeries($chartDetail,$namespacesChartMeta,$chartDetailKey); $plotSer = self::chartDataSeries($chartDetail, $namespacesChartMeta, $chartDetailKey);
$plotSer->setPlotStyle($scatterStyle); $plotSer->setPlotStyle($scatterStyle);
$plotSeries[] = $plotSer; $plotSeries[] = $plotSer;
$plotAttributes = self::_readChartAttributes($chartDetail); $plotAttributes = self::readChartAttributes($chartDetail);
break; break;
case "bubbleChart": case "bubbleChart":
$bubbleScale = self::_getAttribute($chartDetail->bubbleScale, 'val', 'integer'); $bubbleScale = self::getAttribute($chartDetail->bubbleScale, 'val', 'integer');
$plotSer = self::_chartDataSeries($chartDetail,$namespacesChartMeta,$chartDetailKey); $plotSer = self::chartDataSeries($chartDetail, $namespacesChartMeta, $chartDetailKey);
$plotSer->setPlotStyle($bubbleScale); $plotSer->setPlotStyle($bubbleScale);
$plotSeries[] = $plotSer; $plotSeries[] = $plotSer;
$plotAttributes = self::_readChartAttributes($chartDetail); $plotAttributes = self::readChartAttributes($chartDetail);
break; break;
case "radarChart": case "radarChart":
$radarStyle = self::_getAttribute($chartDetail->radarStyle, 'val', 'string'); $radarStyle = self::getAttribute($chartDetail->radarStyle, 'val', 'string');
$plotSer = self::_chartDataSeries($chartDetail,$namespacesChartMeta,$chartDetailKey); $plotSer = self::chartDataSeries($chartDetail, $namespacesChartMeta, $chartDetailKey);
$plotSer->setPlotStyle($radarStyle); $plotSer->setPlotStyle($radarStyle);
$plotSeries[] = $plotSer; $plotSeries[] = $plotSer;
$plotAttributes = self::_readChartAttributes($chartDetail); $plotAttributes = self::readChartAttributes($chartDetail);
break; break;
case "surfaceChart": case "surfaceChart":
case "surface3DChart": case "surface3DChart":
$wireFrame = self::_getAttribute($chartDetail->wireframe, 'val', 'boolean'); $wireFrame = self::getAttribute($chartDetail->wireframe, 'val', 'boolean');
$plotSer = self::_chartDataSeries($chartDetail,$namespacesChartMeta,$chartDetailKey); $plotSer = self::chartDataSeries($chartDetail, $namespacesChartMeta, $chartDetailKey);
$plotSer->setPlotStyle($wireFrame); $plotSer->setPlotStyle($wireFrame);
$plotSeries[] = $plotSer; $plotSeries[] = $plotSer;
$plotAttributes = self::_readChartAttributes($chartDetail); $plotAttributes = self::readChartAttributes($chartDetail);
break; break;
case "stockChart": case "stockChart":
$plotSeries[] = self::_chartDataSeries($chartDetail,$namespacesChartMeta,$chartDetailKey); $plotSeries[] = self::chartDataSeries($chartDetail, $namespacesChartMeta, $chartDetailKey);
$plotAttributes = self::_readChartAttributes($plotAreaLayout); $plotAttributes = self::readChartAttributes($plotAreaLayout);
break; break;
} }
} }
if ($plotAreaLayout == NULL) { if ($plotAreaLayout == null) {
$plotAreaLayout = new PHPExcel_Chart_Layout(); $plotAreaLayout = new PHPExcel_Chart_Layout();
} }
$plotArea = new PHPExcel_Chart_PlotArea($plotAreaLayout,$plotSeries); $plotArea = new PHPExcel_Chart_PlotArea($plotAreaLayout, $plotSeries);
self::_setChartAttributes($plotAreaLayout,$plotAttributes); self::setChartAttributes($plotAreaLayout, $plotAttributes);
break; break;
case "plotVisOnly": case "plotVisOnly":
$plotVisOnly = self::_getAttribute($chartDetails, 'val', 'string'); $plotVisOnly = self::getAttribute($chartDetails, 'val', 'string');
break; break;
case "dispBlanksAs": case "dispBlanksAs":
$dispBlanksAs = self::_getAttribute($chartDetails, 'val', 'string'); $dispBlanksAs = self::getAttribute($chartDetails, 'val', 'string');
break; break;
case "title": case "title":
$title = self::_chartTitle($chartDetails,$namespacesChartMeta,'title'); $title = self::chartTitle($chartDetails, $namespacesChartMeta, 'title');
break; break;
case "legend": case "legend":
$legendPos = 'r'; $legendPos = 'r';
$legendLayout = null; $legendLayout = null;
$legendOverlay = false; $legendOverlay = false;
foreach($chartDetails as $chartDetailKey => $chartDetail) { foreach ($chartDetails as $chartDetailKey => $chartDetail) {
switch ($chartDetailKey) { switch ($chartDetailKey) {
case "legendPos": case "legendPos":
$legendPos = self::_getAttribute($chartDetail, 'val', 'string'); $legendPos = self::getAttribute($chartDetail, 'val', 'string');
break; break;
case "overlay": case "overlay":
$legendOverlay = self::_getAttribute($chartDetail, 'val', 'boolean'); $legendOverlay = self::getAttribute($chartDetail, 'val', 'boolean');
break; break;
case "layout": case "layout":
$legendLayout = self::_chartLayoutDetails($chartDetail,$namespacesChartMeta,'legend'); $legendLayout = self::chartLayoutDetails($chartDetail, $namespacesChartMeta, 'legend');
break; break;
} }
} }
@@ -196,38 +198,38 @@ class PHPExcel_Reader_Excel2007_Chart
} }
} }
} }
$chart = new PHPExcel_Chart($chartName,$title,$legend,$plotArea,$plotVisOnly,$dispBlanksAs,$XaxisLabel,$YaxisLabel); $chart = new PHPExcel_Chart($chartName, $title, $legend, $plotArea, $plotVisOnly, $dispBlanksAs, $XaxisLabel, $YaxisLabel);
return $chart; return $chart;
} // function readChart() }
private static function chartTitle($titleDetails, $namespacesChartMeta, $type)
private static function _chartTitle($titleDetails,$namespacesChartMeta,$type) { {
$caption = array(); $caption = array();
$titleLayout = null; $titleLayout = null;
foreach($titleDetails as $titleDetailKey => $chartDetail) { foreach ($titleDetails as $titleDetailKey => $chartDetail) {
switch ($titleDetailKey) { switch ($titleDetailKey) {
case "tx": case "tx":
$titleDetails = $chartDetail->rich->children($namespacesChartMeta['a']); $titleDetails = $chartDetail->rich->children($namespacesChartMeta['a']);
foreach($titleDetails as $titleKey => $titleDetail) { foreach ($titleDetails as $titleKey => $titleDetail) {
switch ($titleKey) { switch ($titleKey) {
case "p": case "p":
$titleDetailPart = $titleDetail->children($namespacesChartMeta['a']); $titleDetailPart = $titleDetail->children($namespacesChartMeta['a']);
$caption[] = self::_parseRichText($titleDetailPart); $caption[] = self::parseRichText($titleDetailPart);
} }
} }
break; break;
case "layout": case "layout":
$titleLayout = self::_chartLayoutDetails($chartDetail,$namespacesChartMeta); $titleLayout = self::chartLayoutDetails($chartDetail, $namespacesChartMeta);
break; break;
} }
} }
return new PHPExcel_Chart_Title($caption, $titleLayout); return new PHPExcel_Chart_Title($caption, $titleLayout);
} // function _chartTitle() }
private static function chartLayoutDetails($chartDetail, $namespacesChartMeta)
private static function _chartLayoutDetails($chartDetail,$namespacesChartMeta) { {
if (!isset($chartDetail->manualLayout)) { if (!isset($chartDetail->manualLayout)) {
return null; return null;
} }
@@ -236,108 +238,110 @@ class PHPExcel_Reader_Excel2007_Chart
return null; return null;
} }
$layout = array(); $layout = array();
foreach($details as $detailKey => $detail) { foreach ($details as $detailKey => $detail) {
// echo $detailKey,' => ',self::_getAttribute($detail, 'val', 'string'),PHP_EOL; // echo $detailKey, ' => ',self::getAttribute($detail, 'val', 'string'),PHP_EOL;
$layout[$detailKey] = self::_getAttribute($detail, 'val', 'string'); $layout[$detailKey] = self::getAttribute($detail, 'val', 'string');
} }
return new PHPExcel_Chart_Layout($layout); return new PHPExcel_Chart_Layout($layout);
} // function _chartLayoutDetails() }
private static function chartDataSeries($chartDetail, $namespacesChartMeta, $plotType)
private static function _chartDataSeries($chartDetail,$namespacesChartMeta,$plotType) { {
$multiSeriesType = NULL; $multiSeriesType = null;
$smoothLine = false; $smoothLine = false;
$seriesLabel = $seriesCategory = $seriesValues = $plotOrder = array(); $seriesLabel = $seriesCategory = $seriesValues = $plotOrder = array();
$seriesDetailSet = $chartDetail->children($namespacesChartMeta['c']); $seriesDetailSet = $chartDetail->children($namespacesChartMeta['c']);
foreach($seriesDetailSet as $seriesDetailKey => $seriesDetails) { foreach ($seriesDetailSet as $seriesDetailKey => $seriesDetails) {
switch ($seriesDetailKey) { switch ($seriesDetailKey) {
case "grouping": case "grouping":
$multiSeriesType = self::_getAttribute($chartDetail->grouping, 'val', 'string'); $multiSeriesType = self::getAttribute($chartDetail->grouping, 'val', 'string');
break; break;
case "ser": case "ser":
$marker = NULL; $marker = null;
foreach($seriesDetails as $seriesKey => $seriesDetail) { foreach ($seriesDetails as $seriesKey => $seriesDetail) {
switch ($seriesKey) { switch ($seriesKey) {
case "idx": case "idx":
$seriesIndex = self::_getAttribute($seriesDetail, 'val', 'integer'); $seriesIndex = self::getAttribute($seriesDetail, 'val', 'integer');
break; break;
case "order": case "order":
$seriesOrder = self::_getAttribute($seriesDetail, 'val', 'integer'); $seriesOrder = self::getAttribute($seriesDetail, 'val', 'integer');
$plotOrder[$seriesIndex] = $seriesOrder; $plotOrder[$seriesIndex] = $seriesOrder;
break; break;
case "tx": case "tx":
$seriesLabel[$seriesIndex] = self::_chartDataSeriesValueSet($seriesDetail,$namespacesChartMeta); $seriesLabel[$seriesIndex] = self::chartDataSeriesValueSet($seriesDetail, $namespacesChartMeta);
break; break;
case "marker": case "marker":
$marker = self::_getAttribute($seriesDetail->symbol, 'val', 'string'); $marker = self::getAttribute($seriesDetail->symbol, 'val', 'string');
break; break;
case "smooth": case "smooth":
$smoothLine = self::_getAttribute($seriesDetail, 'val', 'boolean'); $smoothLine = self::getAttribute($seriesDetail, 'val', 'boolean');
break; break;
case "cat": case "cat":
$seriesCategory[$seriesIndex] = self::_chartDataSeriesValueSet($seriesDetail,$namespacesChartMeta); $seriesCategory[$seriesIndex] = self::chartDataSeriesValueSet($seriesDetail, $namespacesChartMeta);
break; break;
case "val": case "val":
$seriesValues[$seriesIndex] = self::_chartDataSeriesValueSet($seriesDetail,$namespacesChartMeta,$marker); $seriesValues[$seriesIndex] = self::chartDataSeriesValueSet($seriesDetail, $namespacesChartMeta, $marker);
break; break;
case "xVal": case "xVal":
$seriesCategory[$seriesIndex] = self::_chartDataSeriesValueSet($seriesDetail,$namespacesChartMeta,$marker); $seriesCategory[$seriesIndex] = self::chartDataSeriesValueSet($seriesDetail, $namespacesChartMeta, $marker);
break; break;
case "yVal": case "yVal":
$seriesValues[$seriesIndex] = self::_chartDataSeriesValueSet($seriesDetail,$namespacesChartMeta,$marker); $seriesValues[$seriesIndex] = self::chartDataSeriesValueSet($seriesDetail, $namespacesChartMeta, $marker);
break; break;
} }
} }
} }
} }
return new PHPExcel_Chart_DataSeries($plotType,$multiSeriesType,$plotOrder,$seriesLabel,$seriesCategory,$seriesValues,$smoothLine); return new PHPExcel_Chart_DataSeries($plotType, $multiSeriesType, $plotOrder, $seriesLabel, $seriesCategory, $seriesValues, $smoothLine);
} // function _chartDataSeries() }
private static function _chartDataSeriesValueSet($seriesDetail, $namespacesChartMeta, $marker = null, $smoothLine = false) { private static function chartDataSeriesValueSet($seriesDetail, $namespacesChartMeta, $marker = null, $smoothLine = false)
{
if (isset($seriesDetail->strRef)) { if (isset($seriesDetail->strRef)) {
$seriesSource = (string) $seriesDetail->strRef->f; $seriesSource = (string) $seriesDetail->strRef->f;
$seriesData = self::_chartDataSeriesValues($seriesDetail->strRef->strCache->children($namespacesChartMeta['c']),'s'); $seriesData = self::chartDataSeriesValues($seriesDetail->strRef->strCache->children($namespacesChartMeta['c']), 's');
return new PHPExcel_Chart_DataSeriesValues('String',$seriesSource,$seriesData['formatCode'],$seriesData['pointCount'],$seriesData['dataValues'],$marker,$smoothLine); return new PHPExcel_Chart_DataSeriesValues('String', $seriesSource, $seriesData['formatCode'], $seriesData['pointCount'], $seriesData['dataValues'], $marker, $smoothLine);
} elseif (isset($seriesDetail->numRef)) { } elseif (isset($seriesDetail->numRef)) {
$seriesSource = (string) $seriesDetail->numRef->f; $seriesSource = (string) $seriesDetail->numRef->f;
$seriesData = self::_chartDataSeriesValues($seriesDetail->numRef->numCache->children($namespacesChartMeta['c'])); $seriesData = self::chartDataSeriesValues($seriesDetail->numRef->numCache->children($namespacesChartMeta['c']));
return new PHPExcel_Chart_DataSeriesValues('Number',$seriesSource,$seriesData['formatCode'],$seriesData['pointCount'],$seriesData['dataValues'],$marker,$smoothLine); return new PHPExcel_Chart_DataSeriesValues('Number', $seriesSource, $seriesData['formatCode'], $seriesData['pointCount'], $seriesData['dataValues'], $marker, $smoothLine);
} elseif (isset($seriesDetail->multiLvlStrRef)) { } elseif (isset($seriesDetail->multiLvlStrRef)) {
$seriesSource = (string) $seriesDetail->multiLvlStrRef->f; $seriesSource = (string) $seriesDetail->multiLvlStrRef->f;
$seriesData = self::_chartDataSeriesValuesMultiLevel($seriesDetail->multiLvlStrRef->multiLvlStrCache->children($namespacesChartMeta['c']),'s'); $seriesData = self::chartDataSeriesValuesMultiLevel($seriesDetail->multiLvlStrRef->multiLvlStrCache->children($namespacesChartMeta['c']), 's');
$seriesData['pointCount'] = count($seriesData['dataValues']); $seriesData['pointCount'] = count($seriesData['dataValues']);
return new PHPExcel_Chart_DataSeriesValues('String',$seriesSource,$seriesData['formatCode'],$seriesData['pointCount'],$seriesData['dataValues'],$marker,$smoothLine); return new PHPExcel_Chart_DataSeriesValues('String', $seriesSource, $seriesData['formatCode'], $seriesData['pointCount'], $seriesData['dataValues'], $marker, $smoothLine);
} elseif (isset($seriesDetail->multiLvlNumRef)) { } elseif (isset($seriesDetail->multiLvlNumRef)) {
$seriesSource = (string) $seriesDetail->multiLvlNumRef->f; $seriesSource = (string) $seriesDetail->multiLvlNumRef->f;
$seriesData = self::_chartDataSeriesValuesMultiLevel($seriesDetail->multiLvlNumRef->multiLvlNumCache->children($namespacesChartMeta['c']),'s'); $seriesData = self::chartDataSeriesValuesMultiLevel($seriesDetail->multiLvlNumRef->multiLvlNumCache->children($namespacesChartMeta['c']), 's');
$seriesData['pointCount'] = count($seriesData['dataValues']); $seriesData['pointCount'] = count($seriesData['dataValues']);
return new PHPExcel_Chart_DataSeriesValues('String',$seriesSource,$seriesData['formatCode'],$seriesData['pointCount'],$seriesData['dataValues'],$marker,$smoothLine); return new PHPExcel_Chart_DataSeriesValues('String', $seriesSource, $seriesData['formatCode'], $seriesData['pointCount'], $seriesData['dataValues'], $marker, $smoothLine);
} }
return null; return null;
} // function _chartDataSeriesValueSet() }
private static function _chartDataSeriesValues($seriesValueSet,$dataType='n') { private static function chartDataSeriesValues($seriesValueSet, $dataType = 'n')
{
$seriesVal = array(); $seriesVal = array();
$formatCode = ''; $formatCode = '';
$pointCount = 0; $pointCount = 0;
foreach($seriesValueSet as $seriesValueIdx => $seriesValue) { foreach ($seriesValueSet as $seriesValueIdx => $seriesValue) {
switch ($seriesValueIdx) { switch ($seriesValueIdx) {
case 'ptCount': case 'ptCount':
$pointCount = self::_getAttribute($seriesValue, 'val', 'integer'); $pointCount = self::getAttribute($seriesValue, 'val', 'integer');
break; break;
case 'formatCode': case 'formatCode':
$formatCode = (string) $seriesValue; $formatCode = (string) $seriesValue;
break; break;
case 'pt': case 'pt':
$pointVal = self::_getAttribute($seriesValue, 'idx', 'integer'); $pointVal = self::getAttribute($seriesValue, 'idx', 'integer');
if ($dataType == 's') { if ($dataType == 's') {
$seriesVal[$pointVal] = (string) $seriesValue->v; $seriesVal[$pointVal] = (string) $seriesValue->v;
} else { } else {
@@ -347,33 +351,30 @@ class PHPExcel_Reader_Excel2007_Chart
} }
} }
if (empty($seriesVal)) { return array(
$seriesVal = NULL; 'formatCode' => $formatCode,
}
return array( 'formatCode' => $formatCode,
'pointCount' => $pointCount, 'pointCount' => $pointCount,
'dataValues' => $seriesVal 'dataValues' => $seriesVal
); );
} // function _chartDataSeriesValues() }
private static function chartDataSeriesValuesMultiLevel($seriesValueSet, $dataType = 'n')
private static function _chartDataSeriesValuesMultiLevel($seriesValueSet,$dataType='n') { {
$seriesVal = array(); $seriesVal = array();
$formatCode = ''; $formatCode = '';
$pointCount = 0; $pointCount = 0;
foreach($seriesValueSet->lvl as $seriesLevelIdx => $seriesLevel) { foreach ($seriesValueSet->lvl as $seriesLevelIdx => $seriesLevel) {
foreach($seriesLevel as $seriesValueIdx => $seriesValue) { foreach ($seriesLevel as $seriesValueIdx => $seriesValue) {
switch ($seriesValueIdx) { switch ($seriesValueIdx) {
case 'ptCount': case 'ptCount':
$pointCount = self::_getAttribute($seriesValue, 'val', 'integer'); $pointCount = self::getAttribute($seriesValue, 'val', 'integer');
break; break;
case 'formatCode': case 'formatCode':
$formatCode = (string) $seriesValue; $formatCode = (string) $seriesValue;
break; break;
case 'pt': case 'pt':
$pointVal = self::_getAttribute($seriesValue, 'idx', 'integer'); $pointVal = self::getAttribute($seriesValue, 'idx', 'integer');
if ($dataType == 's') { if ($dataType == 's') {
$seriesVal[$pointVal][] = (string) $seriesValue->v; $seriesVal[$pointVal][] = (string) $seriesValue->v;
} else { } else {
@@ -384,65 +385,67 @@ class PHPExcel_Reader_Excel2007_Chart
} }
} }
return array( 'formatCode' => $formatCode, return array(
'formatCode' => $formatCode,
'pointCount' => $pointCount, 'pointCount' => $pointCount,
'dataValues' => $seriesVal 'dataValues' => $seriesVal
); );
} // function _chartDataSeriesValuesMultiLevel() }
private static function _parseRichText($titleDetailPart = null) { private static function parseRichText($titleDetailPart = null)
{
$value = new PHPExcel_RichText(); $value = new PHPExcel_RichText();
foreach($titleDetailPart as $titleDetailElementKey => $titleDetailElement) { foreach ($titleDetailPart as $titleDetailElementKey => $titleDetailElement) {
if (isset($titleDetailElement->t)) { if (isset($titleDetailElement->t)) {
$objText = $value->createTextRun( (string) $titleDetailElement->t ); $objText = $value->createTextRun((string) $titleDetailElement->t);
} }
if (isset($titleDetailElement->rPr)) { if (isset($titleDetailElement->rPr)) {
if (isset($titleDetailElement->rPr->rFont["val"])) { if (isset($titleDetailElement->rPr->rFont["val"])) {
$objText->getFont()->setName((string) $titleDetailElement->rPr->rFont["val"]); $objText->getFont()->setName((string) $titleDetailElement->rPr->rFont["val"]);
} }
$fontSize = (self::_getAttribute($titleDetailElement->rPr, 'sz', 'integer')); $fontSize = (self::getAttribute($titleDetailElement->rPr, 'sz', 'integer'));
if (!is_null($fontSize)) { if (!is_null($fontSize)) {
$objText->getFont()->setSize(floor($fontSize / 100)); $objText->getFont()->setSize(floor($fontSize / 100));
} }
$fontColor = (self::_getAttribute($titleDetailElement->rPr, 'color', 'string')); $fontColor = (self::getAttribute($titleDetailElement->rPr, 'color', 'string'));
if (!is_null($fontColor)) { if (!is_null($fontColor)) {
$objText->getFont()->setColor( new PHPExcel_Style_Color( self::_readColor($fontColor) ) ); $objText->getFont()->setColor(new PHPExcel_Style_Color(self::readColor($fontColor)));
} }
$bold = self::_getAttribute($titleDetailElement->rPr, 'b', 'boolean'); $bold = self::getAttribute($titleDetailElement->rPr, 'b', 'boolean');
if (!is_null($bold)) { if (!is_null($bold)) {
$objText->getFont()->setBold($bold); $objText->getFont()->setBold($bold);
} }
$italic = self::_getAttribute($titleDetailElement->rPr, 'i', 'boolean'); $italic = self::getAttribute($titleDetailElement->rPr, 'i', 'boolean');
if (!is_null($italic)) { if (!is_null($italic)) {
$objText->getFont()->setItalic($italic); $objText->getFont()->setItalic($italic);
} }
$baseline = self::_getAttribute($titleDetailElement->rPr, 'baseline', 'integer'); $baseline = self::getAttribute($titleDetailElement->rPr, 'baseline', 'integer');
if (!is_null($baseline)) { if (!is_null($baseline)) {
if ($baseline > 0) { if ($baseline > 0) {
$objText->getFont()->setSuperScript(true); $objText->getFont()->setSuperScript(true);
} elseif($baseline < 0) { } elseif ($baseline < 0) {
$objText->getFont()->setSubScript(true); $objText->getFont()->setSubScript(true);
} }
} }
$underscore = (self::_getAttribute($titleDetailElement->rPr, 'u', 'string')); $underscore = (self::getAttribute($titleDetailElement->rPr, 'u', 'string'));
if (!is_null($underscore)) { if (!is_null($underscore)) {
if ($underscore == 'sng') { if ($underscore == 'sng') {
$objText->getFont()->setUnderline(PHPExcel_Style_Font::UNDERLINE_SINGLE); $objText->getFont()->setUnderline(PHPExcel_Style_Font::UNDERLINE_SINGLE);
} elseif($underscore == 'dbl') { } elseif ($underscore == 'dbl') {
$objText->getFont()->setUnderline(PHPExcel_Style_Font::UNDERLINE_DOUBLE); $objText->getFont()->setUnderline(PHPExcel_Style_Font::UNDERLINE_DOUBLE);
} else { } else {
$objText->getFont()->setUnderline(PHPExcel_Style_Font::UNDERLINE_NONE); $objText->getFont()->setUnderline(PHPExcel_Style_Font::UNDERLINE_NONE);
} }
} }
$strikethrough = (self::_getAttribute($titleDetailElement->rPr, 's', 'string')); $strikethrough = (self::getAttribute($titleDetailElement->rPr, 's', 'string'));
if (!is_null($strikethrough)) { if (!is_null($strikethrough)) {
if ($strikethrough == 'noStrike') { if ($strikethrough == 'noStrike') {
$objText->getFont()->setStrikethrough(false); $objText->getFont()->setStrikethrough(false);
@@ -456,62 +459,62 @@ class PHPExcel_Reader_Excel2007_Chart
return $value; return $value;
} }
private static function _readChartAttributes($chartDetail) { private static function readChartAttributes($chartDetail)
{
$plotAttributes = array(); $plotAttributes = array();
if (isset($chartDetail->dLbls)) { if (isset($chartDetail->dLbls)) {
if (isset($chartDetail->dLbls->howLegendKey)) { if (isset($chartDetail->dLbls->howLegendKey)) {
$plotAttributes['showLegendKey'] = self::_getAttribute($chartDetail->dLbls->showLegendKey, 'val', 'string'); $plotAttributes['showLegendKey'] = self::getAttribute($chartDetail->dLbls->showLegendKey, 'val', 'string');
} }
if (isset($chartDetail->dLbls->showVal)) { if (isset($chartDetail->dLbls->showVal)) {
$plotAttributes['showVal'] = self::_getAttribute($chartDetail->dLbls->showVal, 'val', 'string'); $plotAttributes['showVal'] = self::getAttribute($chartDetail->dLbls->showVal, 'val', 'string');
} }
if (isset($chartDetail->dLbls->showCatName)) { if (isset($chartDetail->dLbls->showCatName)) {
$plotAttributes['showCatName'] = self::_getAttribute($chartDetail->dLbls->showCatName, 'val', 'string'); $plotAttributes['showCatName'] = self::getAttribute($chartDetail->dLbls->showCatName, 'val', 'string');
} }
if (isset($chartDetail->dLbls->showSerName)) { if (isset($chartDetail->dLbls->showSerName)) {
$plotAttributes['showSerName'] = self::_getAttribute($chartDetail->dLbls->showSerName, 'val', 'string'); $plotAttributes['showSerName'] = self::getAttribute($chartDetail->dLbls->showSerName, 'val', 'string');
} }
if (isset($chartDetail->dLbls->showPercent)) { if (isset($chartDetail->dLbls->showPercent)) {
$plotAttributes['showPercent'] = self::_getAttribute($chartDetail->dLbls->showPercent, 'val', 'string'); $plotAttributes['showPercent'] = self::getAttribute($chartDetail->dLbls->showPercent, 'val', 'string');
} }
if (isset($chartDetail->dLbls->showBubbleSize)) { if (isset($chartDetail->dLbls->showBubbleSize)) {
$plotAttributes['showBubbleSize'] = self::_getAttribute($chartDetail->dLbls->showBubbleSize, 'val', 'string'); $plotAttributes['showBubbleSize'] = self::getAttribute($chartDetail->dLbls->showBubbleSize, 'val', 'string');
} }
if (isset($chartDetail->dLbls->showLeaderLines)) { if (isset($chartDetail->dLbls->showLeaderLines)) {
$plotAttributes['showLeaderLines'] = self::_getAttribute($chartDetail->dLbls->showLeaderLines, 'val', 'string'); $plotAttributes['showLeaderLines'] = self::getAttribute($chartDetail->dLbls->showLeaderLines, 'val', 'string');
} }
} }
return $plotAttributes; return $plotAttributes;
} }
private static function _setChartAttributes($plotArea,$plotAttributes) private static function setChartAttributes($plotArea, $plotAttributes)
{ {
foreach($plotAttributes as $plotAttributeKey => $plotAttributeValue) { foreach ($plotAttributes as $plotAttributeKey => $plotAttributeValue) {
switch($plotAttributeKey) { switch ($plotAttributeKey) {
case 'showLegendKey' : case 'showLegendKey':
$plotArea->setShowLegendKey($plotAttributeValue); $plotArea->setShowLegendKey($plotAttributeValue);
break; break;
case 'showVal' : case 'showVal':
$plotArea->setShowVal($plotAttributeValue); $plotArea->setShowVal($plotAttributeValue);
break; break;
case 'showCatName' : case 'showCatName':
$plotArea->setShowCatName($plotAttributeValue); $plotArea->setShowCatName($plotAttributeValue);
break; break;
case 'showSerName' : case 'showSerName':
$plotArea->setShowSerName($plotAttributeValue); $plotArea->setShowSerName($plotAttributeValue);
break; break;
case 'showPercent' : case 'showPercent':
$plotArea->setShowPercent($plotAttributeValue); $plotArea->setShowPercent($plotAttributeValue);
break; break;
case 'showBubbleSize' : case 'showBubbleSize':
$plotArea->setShowBubbleSize($plotAttributeValue); $plotArea->setShowBubbleSize($plotAttributeValue);
break; break;
case 'showLeaderLines' : case 'showLeaderLines':
$plotArea->setShowLeaderLines($plotAttributeValue); $plotArea->setShowLeaderLines($plotAttributeValue);
break; break;
} }
} }
} }
} }

View File

@@ -2,7 +2,7 @@
/** /**
* PHPExcel * PHPExcel
* *
* Copyright (c) 2006 - 2014 PHPExcel * Copyright (c) 2006 - 2015 PHPExcel
* *
* This library is free software; you can redistribute it and/or * This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public * modify it under the terms of the GNU Lesser General Public
@@ -20,9 +20,9 @@
* *
* @category PHPExcel * @category PHPExcel
* @package PHPExcel_Reader_Excel2007 * @package PHPExcel_Reader_Excel2007
* @copyright Copyright (c) 2006 - 2014 PHPExcel (http://www.codeplex.com/PHPExcel) * @copyright Copyright (c) 2006 - 2015 PHPExcel (http://www.codeplex.com/PHPExcel)
* @license http://www.gnu.org/licenses/old-licenses/lgpl-2.1.txt LGPL * @license http://www.gnu.org/licenses/old-licenses/lgpl-2.1.txt LGPL
* @version 1.8.0, 2014-03-02 * @version ##VERSION##, ##DATE##
*/ */
@@ -31,7 +31,7 @@
* *
* @category PHPExcel * @category PHPExcel
* @package PHPExcel_Reader_Excel2007 * @package PHPExcel_Reader_Excel2007
* @copyright Copyright (c) 2006 - 2014 PHPExcel (http://www.codeplex.com/PHPExcel) * @copyright Copyright (c) 2006 - 2015 PHPExcel (http://www.codeplex.com/PHPExcel)
*/ */
class PHPExcel_Reader_Excel2007_Theme class PHPExcel_Reader_Excel2007_Theme
{ {
@@ -40,21 +40,21 @@ class PHPExcel_Reader_Excel2007_Theme
* *
* @var string * @var string
*/ */
private $_themeName; private $themeName;
/** /**
* Colour Scheme Name * Colour Scheme Name
* *
* @var string * @var string
*/ */
private $_colourSchemeName; private $colourSchemeName;
/** /**
* Colour Map indexed by position * Colour Map indexed by position
* *
* @var array of string * @var array of string
*/ */
private $_colourMapValues; private $colourMapValues;
/** /**
@@ -62,19 +62,19 @@ class PHPExcel_Reader_Excel2007_Theme
* *
* @var array of string * @var array of string
*/ */
private $_colourMap; private $colourMap;
/** /**
* Create a new PHPExcel_Theme * Create a new PHPExcel_Theme
* *
*/ */
public function __construct($themeName,$colourSchemeName,$colourMap) public function __construct($themeName, $colourSchemeName, $colourMap)
{ {
// Initialise values // Initialise values
$this->_themeName = $themeName; $this->themeName = $themeName;
$this->_colourSchemeName = $colourSchemeName; $this->colourSchemeName = $colourSchemeName;
$this->_colourMap = $colourMap; $this->colourMap = $colourMap;
} }
/** /**
@@ -84,7 +84,7 @@ class PHPExcel_Reader_Excel2007_Theme
*/ */
public function getThemeName() public function getThemeName()
{ {
return $this->_themeName; return $this->themeName;
} }
/** /**
@@ -92,8 +92,9 @@ class PHPExcel_Reader_Excel2007_Theme
* *
* @return string * @return string
*/ */
public function getColourSchemeName() { public function getColourSchemeName()
return $this->_colourSchemeName; {
return $this->colourSchemeName;
} }
/** /**
@@ -101,9 +102,10 @@ class PHPExcel_Reader_Excel2007_Theme
* *
* @return string * @return string
*/ */
public function getColourByIndex($index=0) { public function getColourByIndex($index = 0)
if (isset($this->_colourMap[$index])) { {
return $this->_colourMap[$index]; if (isset($this->colourMap[$index])) {
return $this->colourMap[$index];
} }
return null; return null;
} }
@@ -111,7 +113,8 @@ class PHPExcel_Reader_Excel2007_Theme
/** /**
* Implement PHP __clone to create a deep clone, not just a shallow copy. * Implement PHP __clone to create a deep clone, not just a shallow copy.
*/ */
public function __clone() { public function __clone()
{
$vars = get_object_vars($this); $vars = get_object_vars($this);
foreach ($vars as $key => $value) { foreach ($vars as $key => $value) {
if ((is_object($value)) && ($key != '_parent')) { if ((is_object($value)) && ($key != '_parent')) {

File diff suppressed because it is too large Load Diff

View File

@@ -1,8 +1,9 @@
<?php <?php
/** /**
* PHPExcel * PHPExcel_Reader_Excel5_Escher
* *
* Copyright (c) 2006 - 2014 PHPExcel * Copyright (c) 2006 - 2015 PHPExcel
* *
* This library is free software; you can redistribute it and/or * This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public * modify it under the terms of the GNU Lesser General Public
@@ -20,17 +21,9 @@
* *
* @category PHPExcel * @category PHPExcel
* @package PHPExcel_Reader_Excel5 * @package PHPExcel_Reader_Excel5
* @copyright Copyright (c) 2006 - 2014 PHPExcel (http://www.codeplex.com/PHPExcel) * @copyright Copyright (c) 2006 - 2015 PHPExcel (http://www.codeplex.com/PHPExcel)
* @license http://www.gnu.org/licenses/old-licenses/lgpl-2.1.txt LGPL * @license http://www.gnu.org/licenses/old-licenses/lgpl-2.1.txt LGPL
* @version 1.8.0, 2014-03-02 * @version ##VERSION##, ##DATE##
*/
/**
* PHPExcel_Reader_Excel5_Escher
*
* @category PHPExcel
* @package PHPExcel_Reader_Excel5
* @copyright Copyright (c) 2006 - 2014 PHPExcel (http://www.codeplex.com/PHPExcel)
*/ */
class PHPExcel_Reader_Excel5_Escher class PHPExcel_Reader_Excel5_Escher
{ {
@@ -58,28 +51,28 @@ class PHPExcel_Reader_Excel5_Escher
* *
* @var string * @var string
*/ */
private $_data; private $data;
/** /**
* Size in bytes of the Escher stream data * Size in bytes of the Escher stream data
* *
* @var int * @var int
*/ */
private $_dataSize; private $dataSize;
/** /**
* Current position of stream pointer in Escher stream data * Current position of stream pointer in Escher stream data
* *
* @var int * @var int
*/ */
private $_pos; private $pos;
/** /**
* The object to be returned by the reader. Modified during load. * The object to be returned by the reader. Modified during load.
* *
* @var mixed * @var mixed
*/ */
private $_object; private $object;
/** /**
* Create a new PHPExcel_Reader_Excel5_Escher instance * Create a new PHPExcel_Reader_Excel5_Escher instance
@@ -88,7 +81,7 @@ class PHPExcel_Reader_Excel5_Escher
*/ */
public function __construct($object) public function __construct($object)
{ {
$this->_object = $object; $this->object = $object;
} }
/** /**
@@ -98,80 +91,117 @@ class PHPExcel_Reader_Excel5_Escher
*/ */
public function load($data) public function load($data)
{ {
$this->_data = $data; $this->data = $data;
// total byte size of Excel data (workbook global substream + sheet substreams) // total byte size of Excel data (workbook global substream + sheet substreams)
$this->_dataSize = strlen($this->_data); $this->dataSize = strlen($this->data);
$this->_pos = 0; $this->pos = 0;
// Parse Escher stream // Parse Escher stream
while ($this->_pos < $this->_dataSize) { while ($this->pos < $this->dataSize) {
// offset: 2; size: 2: Record Type // offset: 2; size: 2: Record Type
$fbt = PHPExcel_Reader_Excel5::_GetInt2d($this->_data, $this->_pos + 2); $fbt = PHPExcel_Reader_Excel5::getInt2d($this->data, $this->pos + 2);
switch ($fbt) { switch ($fbt) {
case self::DGGCONTAINER: $this->_readDggContainer(); break; case self::DGGCONTAINER:
case self::DGG: $this->_readDgg(); break; $this->readDggContainer();
case self::BSTORECONTAINER: $this->_readBstoreContainer(); break; break;
case self::BSE: $this->_readBSE(); break; case self::DGG:
case self::BLIPJPEG: $this->_readBlipJPEG(); break; $this->readDgg();
case self::BLIPPNG: $this->_readBlipPNG(); break; break;
case self::OPT: $this->_readOPT(); break; case self::BSTORECONTAINER:
case self::TERTIARYOPT: $this->_readTertiaryOPT(); break; $this->readBstoreContainer();
case self::SPLITMENUCOLORS: $this->_readSplitMenuColors(); break; break;
case self::DGCONTAINER: $this->_readDgContainer(); break; case self::BSE:
case self::DG: $this->_readDg(); break; $this->readBSE();
case self::SPGRCONTAINER: $this->_readSpgrContainer(); break; break;
case self::SPCONTAINER: $this->_readSpContainer(); break; case self::BLIPJPEG:
case self::SPGR: $this->_readSpgr(); break; $this->readBlipJPEG();
case self::SP: $this->_readSp(); break; break;
case self::CLIENTTEXTBOX: $this->_readClientTextbox(); break; case self::BLIPPNG:
case self::CLIENTANCHOR: $this->_readClientAnchor(); break; $this->readBlipPNG();
case self::CLIENTDATA: $this->_readClientData(); break; break;
default: $this->_readDefault(); break; case self::OPT:
$this->readOPT();
break;
case self::TERTIARYOPT:
$this->readTertiaryOPT();
break;
case self::SPLITMENUCOLORS:
$this->readSplitMenuColors();
break;
case self::DGCONTAINER:
$this->readDgContainer();
break;
case self::DG:
$this->readDg();
break;
case self::SPGRCONTAINER:
$this->readSpgrContainer();
break;
case self::SPCONTAINER:
$this->readSpContainer();
break;
case self::SPGR:
$this->readSpgr();
break;
case self::SP:
$this->readSp();
break;
case self::CLIENTTEXTBOX:
$this->readClientTextbox();
break;
case self::CLIENTANCHOR:
$this->readClientAnchor();
break;
case self::CLIENTDATA:
$this->readClientData();
break;
default:
$this->readDefault();
break;
} }
} }
return $this->_object; return $this->object;
} }
/** /**
* Read a generic record * Read a generic record
*/ */
private function _readDefault() private function readDefault()
{ {
// offset 0; size: 2; recVer and recInstance // offset 0; size: 2; recVer and recInstance
$verInstance = PHPExcel_Reader_Excel5::_GetInt2d($this->_data, $this->_pos); $verInstance = PHPExcel_Reader_Excel5::getInt2d($this->data, $this->pos);
// offset: 2; size: 2: Record Type // offset: 2; size: 2: Record Type
$fbt = PHPExcel_Reader_Excel5::_GetInt2d($this->_data, $this->_pos + 2); $fbt = PHPExcel_Reader_Excel5::getInt2d($this->data, $this->pos + 2);
// bit: 0-3; mask: 0x000F; recVer // bit: 0-3; mask: 0x000F; recVer
$recVer = (0x000F & $verInstance) >> 0; $recVer = (0x000F & $verInstance) >> 0;
$length = PHPExcel_Reader_Excel5::_GetInt4d($this->_data, $this->_pos + 4); $length = PHPExcel_Reader_Excel5::getInt4d($this->data, $this->pos + 4);
$recordData = substr($this->_data, $this->_pos + 8, $length); $recordData = substr($this->data, $this->pos + 8, $length);
// move stream pointer to next record // move stream pointer to next record
$this->_pos += 8 + $length; $this->pos += 8 + $length;
} }
/** /**
* Read DggContainer record (Drawing Group Container) * Read DggContainer record (Drawing Group Container)
*/ */
private function _readDggContainer() private function readDggContainer()
{ {
$length = PHPExcel_Reader_Excel5::_GetInt4d($this->_data, $this->_pos + 4); $length = PHPExcel_Reader_Excel5::getInt4d($this->data, $this->pos + 4);
$recordData = substr($this->_data, $this->_pos + 8, $length); $recordData = substr($this->data, $this->pos + 8, $length);
// move stream pointer to next record // move stream pointer to next record
$this->_pos += 8 + $length; $this->pos += 8 + $length;
// record is a container, read contents // record is a container, read contents
$dggContainer = new PHPExcel_Shared_Escher_DggContainer(); $dggContainer = new PHPExcel_Shared_Escher_DggContainer();
$this->_object->setDggContainer($dggContainer); $this->object->setDggContainer($dggContainer);
$reader = new PHPExcel_Reader_Excel5_Escher($dggContainer); $reader = new PHPExcel_Reader_Excel5_Escher($dggContainer);
$reader->load($recordData); $reader->load($recordData);
} }
@@ -179,29 +209,29 @@ class PHPExcel_Reader_Excel5_Escher
/** /**
* Read Dgg record (Drawing Group) * Read Dgg record (Drawing Group)
*/ */
private function _readDgg() private function readDgg()
{ {
$length = PHPExcel_Reader_Excel5::_GetInt4d($this->_data, $this->_pos + 4); $length = PHPExcel_Reader_Excel5::getInt4d($this->data, $this->pos + 4);
$recordData = substr($this->_data, $this->_pos + 8, $length); $recordData = substr($this->data, $this->pos + 8, $length);
// move stream pointer to next record // move stream pointer to next record
$this->_pos += 8 + $length; $this->pos += 8 + $length;
} }
/** /**
* Read BstoreContainer record (Blip Store Container) * Read BstoreContainer record (Blip Store Container)
*/ */
private function _readBstoreContainer() private function readBstoreContainer()
{ {
$length = PHPExcel_Reader_Excel5::_GetInt4d($this->_data, $this->_pos + 4); $length = PHPExcel_Reader_Excel5::getInt4d($this->data, $this->pos + 4);
$recordData = substr($this->_data, $this->_pos + 8, $length); $recordData = substr($this->data, $this->pos + 8, $length);
// move stream pointer to next record // move stream pointer to next record
$this->_pos += 8 + $length; $this->pos += 8 + $length;
// record is a container, read contents // record is a container, read contents
$bstoreContainer = new PHPExcel_Shared_Escher_DggContainer_BstoreContainer(); $bstoreContainer = new PHPExcel_Shared_Escher_DggContainer_BstoreContainer();
$this->_object->setBstoreContainer($bstoreContainer); $this->object->setBstoreContainer($bstoreContainer);
$reader = new PHPExcel_Reader_Excel5_Escher($bstoreContainer); $reader = new PHPExcel_Reader_Excel5_Escher($bstoreContainer);
$reader->load($recordData); $reader->load($recordData);
} }
@@ -209,22 +239,22 @@ class PHPExcel_Reader_Excel5_Escher
/** /**
* Read BSE record * Read BSE record
*/ */
private function _readBSE() private function readBSE()
{ {
// offset: 0; size: 2; recVer and recInstance // offset: 0; size: 2; recVer and recInstance
// bit: 4-15; mask: 0xFFF0; recInstance // bit: 4-15; mask: 0xFFF0; recInstance
$recInstance = (0xFFF0 & PHPExcel_Reader_Excel5::_GetInt2d($this->_data, $this->_pos)) >> 4; $recInstance = (0xFFF0 & PHPExcel_Reader_Excel5::getInt2d($this->data, $this->pos)) >> 4;
$length = PHPExcel_Reader_Excel5::_GetInt4d($this->_data, $this->_pos + 4); $length = PHPExcel_Reader_Excel5::getInt4d($this->data, $this->pos + 4);
$recordData = substr($this->_data, $this->_pos + 8, $length); $recordData = substr($this->data, $this->pos + 8, $length);
// move stream pointer to next record // move stream pointer to next record
$this->_pos += 8 + $length; $this->pos += 8 + $length;
// add BSE to BstoreContainer // add BSE to BstoreContainer
$BSE = new PHPExcel_Shared_Escher_DggContainer_BstoreContainer_BSE(); $BSE = new PHPExcel_Shared_Escher_DggContainer_BstoreContainer_BSE();
$this->_object->addBSE($BSE); $this->object->addBSE($BSE);
$BSE->setBLIPType($recInstance); $BSE->setBLIPType($recInstance);
@@ -238,16 +268,16 @@ class PHPExcel_Reader_Excel5_Escher
$rgbUid = substr($recordData, 2, 16); $rgbUid = substr($recordData, 2, 16);
// offset: 18; size: 2; tag // offset: 18; size: 2; tag
$tag = PHPExcel_Reader_Excel5::_GetInt2d($recordData, 18); $tag = PHPExcel_Reader_Excel5::getInt2d($recordData, 18);
// offset: 20; size: 4; size of BLIP in bytes // offset: 20; size: 4; size of BLIP in bytes
$size = PHPExcel_Reader_Excel5::_GetInt4d($recordData, 20); $size = PHPExcel_Reader_Excel5::getInt4d($recordData, 20);
// offset: 24; size: 4; number of references to this BLIP // offset: 24; size: 4; number of references to this BLIP
$cRef = PHPExcel_Reader_Excel5::_GetInt4d($recordData, 24); $cRef = PHPExcel_Reader_Excel5::getInt4d($recordData, 24);
// offset: 28; size: 4; MSOFO file offset // offset: 28; size: 4; MSOFO file offset
$foDelay = PHPExcel_Reader_Excel5::_GetInt4d($recordData, 28); $foDelay = PHPExcel_Reader_Excel5::getInt4d($recordData, 28);
// offset: 32; size: 1; unused1 // offset: 32; size: 1; unused1
$unused1 = ord($recordData{32}); $unused1 = ord($recordData{32});
@@ -275,18 +305,18 @@ class PHPExcel_Reader_Excel5_Escher
/** /**
* Read BlipJPEG record. Holds raw JPEG image data * Read BlipJPEG record. Holds raw JPEG image data
*/ */
private function _readBlipJPEG() private function readBlipJPEG()
{ {
// offset: 0; size: 2; recVer and recInstance // offset: 0; size: 2; recVer and recInstance
// bit: 4-15; mask: 0xFFF0; recInstance // bit: 4-15; mask: 0xFFF0; recInstance
$recInstance = (0xFFF0 & PHPExcel_Reader_Excel5::_GetInt2d($this->_data, $this->_pos)) >> 4; $recInstance = (0xFFF0 & PHPExcel_Reader_Excel5::getInt2d($this->data, $this->pos)) >> 4;
$length = PHPExcel_Reader_Excel5::_GetInt4d($this->_data, $this->_pos + 4); $length = PHPExcel_Reader_Excel5::getInt4d($this->data, $this->pos + 4);
$recordData = substr($this->_data, $this->_pos + 8, $length); $recordData = substr($this->data, $this->pos + 8, $length);
// move stream pointer to next record // move stream pointer to next record
$this->_pos += 8 + $length; $this->pos += 8 + $length;
$pos = 0; $pos = 0;
@@ -310,24 +340,24 @@ class PHPExcel_Reader_Excel5_Escher
$blip = new PHPExcel_Shared_Escher_DggContainer_BstoreContainer_BSE_Blip(); $blip = new PHPExcel_Shared_Escher_DggContainer_BstoreContainer_BSE_Blip();
$blip->setData($data); $blip->setData($data);
$this->_object->setBlip($blip); $this->object->setBlip($blip);
} }
/** /**
* Read BlipPNG record. Holds raw PNG image data * Read BlipPNG record. Holds raw PNG image data
*/ */
private function _readBlipPNG() private function readBlipPNG()
{ {
// offset: 0; size: 2; recVer and recInstance // offset: 0; size: 2; recVer and recInstance
// bit: 4-15; mask: 0xFFF0; recInstance // bit: 4-15; mask: 0xFFF0; recInstance
$recInstance = (0xFFF0 & PHPExcel_Reader_Excel5::_GetInt2d($this->_data, $this->_pos)) >> 4; $recInstance = (0xFFF0 & PHPExcel_Reader_Excel5::getInt2d($this->data, $this->pos)) >> 4;
$length = PHPExcel_Reader_Excel5::_GetInt4d($this->_data, $this->_pos + 4); $length = PHPExcel_Reader_Excel5::getInt4d($this->data, $this->pos + 4);
$recordData = substr($this->_data, $this->_pos + 8, $length); $recordData = substr($this->data, $this->pos + 8, $length);
// move stream pointer to next record // move stream pointer to next record
$this->_pos += 8 + $length; $this->pos += 8 + $length;
$pos = 0; $pos = 0;
@@ -351,71 +381,71 @@ class PHPExcel_Reader_Excel5_Escher
$blip = new PHPExcel_Shared_Escher_DggContainer_BstoreContainer_BSE_Blip(); $blip = new PHPExcel_Shared_Escher_DggContainer_BstoreContainer_BSE_Blip();
$blip->setData($data); $blip->setData($data);
$this->_object->setBlip($blip); $this->object->setBlip($blip);
} }
/** /**
* Read OPT record. This record may occur within DggContainer record or SpContainer * Read OPT record. This record may occur within DggContainer record or SpContainer
*/ */
private function _readOPT() private function readOPT()
{ {
// offset: 0; size: 2; recVer and recInstance // offset: 0; size: 2; recVer and recInstance
// bit: 4-15; mask: 0xFFF0; recInstance // bit: 4-15; mask: 0xFFF0; recInstance
$recInstance = (0xFFF0 & PHPExcel_Reader_Excel5::_GetInt2d($this->_data, $this->_pos)) >> 4; $recInstance = (0xFFF0 & PHPExcel_Reader_Excel5::getInt2d($this->data, $this->pos)) >> 4;
$length = PHPExcel_Reader_Excel5::_GetInt4d($this->_data, $this->_pos + 4); $length = PHPExcel_Reader_Excel5::getInt4d($this->data, $this->pos + 4);
$recordData = substr($this->_data, $this->_pos + 8, $length); $recordData = substr($this->data, $this->pos + 8, $length);
// move stream pointer to next record // move stream pointer to next record
$this->_pos += 8 + $length; $this->pos += 8 + $length;
$this->_readOfficeArtRGFOPTE($recordData, $recInstance); $this->readOfficeArtRGFOPTE($recordData, $recInstance);
} }
/** /**
* Read TertiaryOPT record * Read TertiaryOPT record
*/ */
private function _readTertiaryOPT() private function readTertiaryOPT()
{ {
// offset: 0; size: 2; recVer and recInstance // offset: 0; size: 2; recVer and recInstance
// bit: 4-15; mask: 0xFFF0; recInstance // bit: 4-15; mask: 0xFFF0; recInstance
$recInstance = (0xFFF0 & PHPExcel_Reader_Excel5::_GetInt2d($this->_data, $this->_pos)) >> 4; $recInstance = (0xFFF0 & PHPExcel_Reader_Excel5::getInt2d($this->data, $this->pos)) >> 4;
$length = PHPExcel_Reader_Excel5::_GetInt4d($this->_data, $this->_pos + 4); $length = PHPExcel_Reader_Excel5::getInt4d($this->data, $this->pos + 4);
$recordData = substr($this->_data, $this->_pos + 8, $length); $recordData = substr($this->data, $this->pos + 8, $length);
// move stream pointer to next record // move stream pointer to next record
$this->_pos += 8 + $length; $this->pos += 8 + $length;
} }
/** /**
* Read SplitMenuColors record * Read SplitMenuColors record
*/ */
private function _readSplitMenuColors() private function readSplitMenuColors()
{ {
$length = PHPExcel_Reader_Excel5::_GetInt4d($this->_data, $this->_pos + 4); $length = PHPExcel_Reader_Excel5::getInt4d($this->data, $this->pos + 4);
$recordData = substr($this->_data, $this->_pos + 8, $length); $recordData = substr($this->data, $this->pos + 8, $length);
// move stream pointer to next record // move stream pointer to next record
$this->_pos += 8 + $length; $this->pos += 8 + $length;
} }
/** /**
* Read DgContainer record (Drawing Container) * Read DgContainer record (Drawing Container)
*/ */
private function _readDgContainer() private function readDgContainer()
{ {
$length = PHPExcel_Reader_Excel5::_GetInt4d($this->_data, $this->_pos + 4); $length = PHPExcel_Reader_Excel5::getInt4d($this->data, $this->pos + 4);
$recordData = substr($this->_data, $this->_pos + 8, $length); $recordData = substr($this->data, $this->pos + 8, $length);
// move stream pointer to next record // move stream pointer to next record
$this->_pos += 8 + $length; $this->pos += 8 + $length;
// record is a container, read contents // record is a container, read contents
$dgContainer = new PHPExcel_Shared_Escher_DgContainer(); $dgContainer = new PHPExcel_Shared_Escher_DgContainer();
$this->_object->setDgContainer($dgContainer); $this->object->setDgContainer($dgContainer);
$reader = new PHPExcel_Reader_Excel5_Escher($dgContainer); $reader = new PHPExcel_Reader_Excel5_Escher($dgContainer);
$escher = $reader->load($recordData); $escher = $reader->load($recordData);
} }
@@ -423,37 +453,37 @@ class PHPExcel_Reader_Excel5_Escher
/** /**
* Read Dg record (Drawing) * Read Dg record (Drawing)
*/ */
private function _readDg() private function readDg()
{ {
$length = PHPExcel_Reader_Excel5::_GetInt4d($this->_data, $this->_pos + 4); $length = PHPExcel_Reader_Excel5::getInt4d($this->data, $this->pos + 4);
$recordData = substr($this->_data, $this->_pos + 8, $length); $recordData = substr($this->data, $this->pos + 8, $length);
// move stream pointer to next record // move stream pointer to next record
$this->_pos += 8 + $length; $this->pos += 8 + $length;
} }
/** /**
* Read SpgrContainer record (Shape Group Container) * Read SpgrContainer record (Shape Group Container)
*/ */
private function _readSpgrContainer() private function readSpgrContainer()
{ {
// context is either context DgContainer or SpgrContainer // context is either context DgContainer or SpgrContainer
$length = PHPExcel_Reader_Excel5::_GetInt4d($this->_data, $this->_pos + 4); $length = PHPExcel_Reader_Excel5::getInt4d($this->data, $this->pos + 4);
$recordData = substr($this->_data, $this->_pos + 8, $length); $recordData = substr($this->data, $this->pos + 8, $length);
// move stream pointer to next record // move stream pointer to next record
$this->_pos += 8 + $length; $this->pos += 8 + $length;
// record is a container, read contents // record is a container, read contents
$spgrContainer = new PHPExcel_Shared_Escher_DgContainer_SpgrContainer(); $spgrContainer = new PHPExcel_Shared_Escher_DgContainer_SpgrContainer();
if ($this->_object instanceof PHPExcel_Shared_Escher_DgContainer) { if ($this->object instanceof PHPExcel_Shared_Escher_DgContainer) {
// DgContainer // DgContainer
$this->_object->setSpgrContainer($spgrContainer); $this->object->setSpgrContainer($spgrContainer);
} else { } else {
// SpgrContainer // SpgrContainer
$this->_object->addChild($spgrContainer); $this->object->addChild($spgrContainer);
} }
$reader = new PHPExcel_Reader_Excel5_Escher($spgrContainer); $reader = new PHPExcel_Reader_Excel5_Escher($spgrContainer);
@@ -463,17 +493,17 @@ class PHPExcel_Reader_Excel5_Escher
/** /**
* Read SpContainer record (Shape Container) * Read SpContainer record (Shape Container)
*/ */
private function _readSpContainer() private function readSpContainer()
{ {
$length = PHPExcel_Reader_Excel5::_GetInt4d($this->_data, $this->_pos + 4); $length = PHPExcel_Reader_Excel5::getInt4d($this->data, $this->pos + 4);
$recordData = substr($this->_data, $this->_pos + 8, $length); $recordData = substr($this->data, $this->pos + 8, $length);
// add spContainer to spgrContainer // add spContainer to spgrContainer
$spContainer = new PHPExcel_Shared_Escher_DgContainer_SpgrContainer_SpContainer(); $spContainer = new PHPExcel_Shared_Escher_DgContainer_SpgrContainer_SpContainer();
$this->_object->addChild($spContainer); $this->object->addChild($spContainer);
// move stream pointer to next record // move stream pointer to next record
$this->_pos += 8 + $length; $this->pos += 8 + $length;
// record is a container, read contents // record is a container, read contents
$reader = new PHPExcel_Reader_Excel5_Escher($spContainer); $reader = new PHPExcel_Reader_Excel5_Escher($spContainer);
@@ -483,113 +513,113 @@ class PHPExcel_Reader_Excel5_Escher
/** /**
* Read Spgr record (Shape Group) * Read Spgr record (Shape Group)
*/ */
private function _readSpgr() private function readSpgr()
{ {
$length = PHPExcel_Reader_Excel5::_GetInt4d($this->_data, $this->_pos + 4); $length = PHPExcel_Reader_Excel5::getInt4d($this->data, $this->pos + 4);
$recordData = substr($this->_data, $this->_pos + 8, $length); $recordData = substr($this->data, $this->pos + 8, $length);
// move stream pointer to next record // move stream pointer to next record
$this->_pos += 8 + $length; $this->pos += 8 + $length;
} }
/** /**
* Read Sp record (Shape) * Read Sp record (Shape)
*/ */
private function _readSp() private function readSp()
{ {
// offset: 0; size: 2; recVer and recInstance // offset: 0; size: 2; recVer and recInstance
// bit: 4-15; mask: 0xFFF0; recInstance // bit: 4-15; mask: 0xFFF0; recInstance
$recInstance = (0xFFF0 & PHPExcel_Reader_Excel5::_GetInt2d($this->_data, $this->_pos)) >> 4; $recInstance = (0xFFF0 & PHPExcel_Reader_Excel5::getInt2d($this->data, $this->pos)) >> 4;
$length = PHPExcel_Reader_Excel5::_GetInt4d($this->_data, $this->_pos + 4); $length = PHPExcel_Reader_Excel5::getInt4d($this->data, $this->pos + 4);
$recordData = substr($this->_data, $this->_pos + 8, $length); $recordData = substr($this->data, $this->pos + 8, $length);
// move stream pointer to next record // move stream pointer to next record
$this->_pos += 8 + $length; $this->pos += 8 + $length;
} }
/** /**
* Read ClientTextbox record * Read ClientTextbox record
*/ */
private function _readClientTextbox() private function readClientTextbox()
{ {
// offset: 0; size: 2; recVer and recInstance // offset: 0; size: 2; recVer and recInstance
// bit: 4-15; mask: 0xFFF0; recInstance // bit: 4-15; mask: 0xFFF0; recInstance
$recInstance = (0xFFF0 & PHPExcel_Reader_Excel5::_GetInt2d($this->_data, $this->_pos)) >> 4; $recInstance = (0xFFF0 & PHPExcel_Reader_Excel5::getInt2d($this->data, $this->pos)) >> 4;
$length = PHPExcel_Reader_Excel5::_GetInt4d($this->_data, $this->_pos + 4); $length = PHPExcel_Reader_Excel5::getInt4d($this->data, $this->pos + 4);
$recordData = substr($this->_data, $this->_pos + 8, $length); $recordData = substr($this->data, $this->pos + 8, $length);
// move stream pointer to next record // move stream pointer to next record
$this->_pos += 8 + $length; $this->pos += 8 + $length;
} }
/** /**
* Read ClientAnchor record. This record holds information about where the shape is anchored in worksheet * Read ClientAnchor record. This record holds information about where the shape is anchored in worksheet
*/ */
private function _readClientAnchor() private function readClientAnchor()
{ {
$length = PHPExcel_Reader_Excel5::_GetInt4d($this->_data, $this->_pos + 4); $length = PHPExcel_Reader_Excel5::getInt4d($this->data, $this->pos + 4);
$recordData = substr($this->_data, $this->_pos + 8, $length); $recordData = substr($this->data, $this->pos + 8, $length);
// move stream pointer to next record // move stream pointer to next record
$this->_pos += 8 + $length; $this->pos += 8 + $length;
// offset: 2; size: 2; upper-left corner column index (0-based) // offset: 2; size: 2; upper-left corner column index (0-based)
$c1 = PHPExcel_Reader_Excel5::_GetInt2d($recordData, 2); $c1 = PHPExcel_Reader_Excel5::getInt2d($recordData, 2);
// offset: 4; size: 2; upper-left corner horizontal offset in 1/1024 of column width // offset: 4; size: 2; upper-left corner horizontal offset in 1/1024 of column width
$startOffsetX = PHPExcel_Reader_Excel5::_GetInt2d($recordData, 4); $startOffsetX = PHPExcel_Reader_Excel5::getInt2d($recordData, 4);
// offset: 6; size: 2; upper-left corner row index (0-based) // offset: 6; size: 2; upper-left corner row index (0-based)
$r1 = PHPExcel_Reader_Excel5::_GetInt2d($recordData, 6); $r1 = PHPExcel_Reader_Excel5::getInt2d($recordData, 6);
// offset: 8; size: 2; upper-left corner vertical offset in 1/256 of row height // offset: 8; size: 2; upper-left corner vertical offset in 1/256 of row height
$startOffsetY = PHPExcel_Reader_Excel5::_GetInt2d($recordData, 8); $startOffsetY = PHPExcel_Reader_Excel5::getInt2d($recordData, 8);
// offset: 10; size: 2; bottom-right corner column index (0-based) // offset: 10; size: 2; bottom-right corner column index (0-based)
$c2 = PHPExcel_Reader_Excel5::_GetInt2d($recordData, 10); $c2 = PHPExcel_Reader_Excel5::getInt2d($recordData, 10);
// offset: 12; size: 2; bottom-right corner horizontal offset in 1/1024 of column width // offset: 12; size: 2; bottom-right corner horizontal offset in 1/1024 of column width
$endOffsetX = PHPExcel_Reader_Excel5::_GetInt2d($recordData, 12); $endOffsetX = PHPExcel_Reader_Excel5::getInt2d($recordData, 12);
// offset: 14; size: 2; bottom-right corner row index (0-based) // offset: 14; size: 2; bottom-right corner row index (0-based)
$r2 = PHPExcel_Reader_Excel5::_GetInt2d($recordData, 14); $r2 = PHPExcel_Reader_Excel5::getInt2d($recordData, 14);
// offset: 16; size: 2; bottom-right corner vertical offset in 1/256 of row height // offset: 16; size: 2; bottom-right corner vertical offset in 1/256 of row height
$endOffsetY = PHPExcel_Reader_Excel5::_GetInt2d($recordData, 16); $endOffsetY = PHPExcel_Reader_Excel5::getInt2d($recordData, 16);
// set the start coordinates // set the start coordinates
$this->_object->setStartCoordinates(PHPExcel_Cell::stringFromColumnIndex($c1) . ($r1 + 1)); $this->object->setStartCoordinates(PHPExcel_Cell::stringFromColumnIndex($c1) . ($r1 + 1));
// set the start offsetX // set the start offsetX
$this->_object->setStartOffsetX($startOffsetX); $this->object->setStartOffsetX($startOffsetX);
// set the start offsetY // set the start offsetY
$this->_object->setStartOffsetY($startOffsetY); $this->object->setStartOffsetY($startOffsetY);
// set the end coordinates // set the end coordinates
$this->_object->setEndCoordinates(PHPExcel_Cell::stringFromColumnIndex($c2) . ($r2 + 1)); $this->object->setEndCoordinates(PHPExcel_Cell::stringFromColumnIndex($c2) . ($r2 + 1));
// set the end offsetX // set the end offsetX
$this->_object->setEndOffsetX($endOffsetX); $this->object->setEndOffsetX($endOffsetX);
// set the end offsetY // set the end offsetY
$this->_object->setEndOffsetY($endOffsetY); $this->object->setEndOffsetY($endOffsetY);
} }
/** /**
* Read ClientData record * Read ClientData record
*/ */
private function _readClientData() private function readClientData()
{ {
$length = PHPExcel_Reader_Excel5::_GetInt4d($this->_data, $this->_pos + 4); $length = PHPExcel_Reader_Excel5::getInt4d($this->data, $this->pos + 4);
$recordData = substr($this->_data, $this->_pos + 8, $length); $recordData = substr($this->data, $this->pos + 8, $length);
// move stream pointer to next record // move stream pointer to next record
$this->_pos += 8 + $length; $this->pos += 8 + $length;
} }
/** /**
@@ -598,8 +628,8 @@ class PHPExcel_Reader_Excel5_Escher
* @param string $data Binary data * @param string $data Binary data
* @param int $n Number of properties * @param int $n Number of properties
*/ */
private function _readOfficeArtRGFOPTE($data, $n) { private function readOfficeArtRGFOPTE($data, $n)
{
$splicedComplexData = substr($data, 6 * $n); $splicedComplexData = substr($data, 6 * $n);
// loop through property-value pairs // loop through property-value pairs
@@ -608,7 +638,7 @@ class PHPExcel_Reader_Excel5_Escher
$fopte = substr($data, 6 * $i, 6); $fopte = substr($data, 6 * $i, 6);
// offset: 0; size: 2; opid // offset: 0; size: 2; opid
$opid = PHPExcel_Reader_Excel5::_GetInt2d($fopte, 0); $opid = PHPExcel_Reader_Excel5::getInt2d($fopte, 0);
// bit: 0-13; mask: 0x3FFF; opid.opid // bit: 0-13; mask: 0x3FFF; opid.opid
$opidOpid = (0x3FFF & $opid) >> 0; $opidOpid = (0x3FFF & $opid) >> 0;
@@ -620,7 +650,7 @@ class PHPExcel_Reader_Excel5_Escher
$opidFComplex = (0x8000 & $opid) >> 15; $opidFComplex = (0x8000 & $opid) >> 15;
// offset: 2; size: 4; the value for this property // offset: 2; size: 4; the value for this property
$op = PHPExcel_Reader_Excel5::_GetInt4d($fopte, 2); $op = PHPExcel_Reader_Excel5::getInt4d($fopte, 2);
if ($opidFComplex) { if ($opidFComplex) {
$complexData = substr($splicedComplexData, 0, $op); $complexData = substr($splicedComplexData, 0, $op);
@@ -633,8 +663,7 @@ class PHPExcel_Reader_Excel5_Escher
$value = $op; $value = $op;
} }
$this->_object->setOPT($opidOpid, $value); $this->object->setOPT($opidOpid, $value);
} }
} }
} }

View File

@@ -1,8 +1,9 @@
<?php <?php
/** /**
* PHPExcel * PHPExcel_Reader_Excel5_MD5
* *
* Copyright (c) 2006 - 2014 PHPExcel * Copyright (c) 2006 - 2015 PHPExcel
* *
* This library is free software; you can redistribute it and/or * This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public * modify it under the terms of the GNU Lesser General Public
@@ -20,18 +21,9 @@
* *
* @category PHPExcel * @category PHPExcel
* @package PHPExcel_Reader_Excel5 * @package PHPExcel_Reader_Excel5
* @copyright Copyright (c) 2006 - 2014 PHPExcel (http://www.codeplex.com/PHPExcel) * @copyright Copyright (c) 2006 - 2015 PHPExcel (http://www.codeplex.com/PHPExcel)
* @license http://www.gnu.org/licenses/old-licenses/lgpl-2.1.txt LGPL * @license http://www.gnu.org/licenses/old-licenses/lgpl-2.1.txt LGPL
* @version 1.8.0, 2014-03-02 * @version ##VERSION##, ##DATE##
*/
/**
* PHPExcel_Reader_Excel5_MD5
*
* @category PHPExcel
* @package PHPExcel_Reader_Excel5
* @copyright Copyright (c) 2006 - 2014 PHPExcel (http://www.codeplex.com/PHPExcel)
*/ */
class PHPExcel_Reader_Excel5_MD5 class PHPExcel_Reader_Excel5_MD5
{ {
@@ -41,7 +33,6 @@ class PHPExcel_Reader_Excel5_MD5
private $c; private $c;
private $d; private $d;
/** /**
* MD5 stream constructor * MD5 stream constructor
*/ */
@@ -50,7 +41,6 @@ class PHPExcel_Reader_Excel5_MD5
$this->reset(); $this->reset();
} }
/** /**
* Reset the MD5 stream context * Reset the MD5 stream context
*/ */
@@ -62,7 +52,6 @@ class PHPExcel_Reader_Excel5_MD5
$this->d = 0x10325476; $this->d = 0x10325476;
} }
/** /**
* Get MD5 stream context * Get MD5 stream context
* *
@@ -82,7 +71,6 @@ class PHPExcel_Reader_Excel5_MD5
return $s; return $s;
} }
/** /**
* Add data to context * Add data to context
* *
@@ -97,10 +85,10 @@ class PHPExcel_Reader_Excel5_MD5
$C = $this->c; $C = $this->c;
$D = $this->d; $D = $this->d;
$F = array('PHPExcel_Reader_Excel5_MD5','F'); $F = array('PHPExcel_Reader_Excel5_MD5','f');
$G = array('PHPExcel_Reader_Excel5_MD5','G'); $G = array('PHPExcel_Reader_Excel5_MD5','g');
$H = array('PHPExcel_Reader_Excel5_MD5','H'); $H = array('PHPExcel_Reader_Excel5_MD5','h');
$I = array('PHPExcel_Reader_Excel5_MD5','I'); $I = array('PHPExcel_Reader_Excel5_MD5','i');
/* ROUND 1 */ /* ROUND 1 */
self::step($F, $A, $B, $C, $D, $words[0], 7, 0xd76aa478); self::step($F, $A, $B, $C, $D, $words[0], 7, 0xd76aa478);
@@ -180,31 +168,26 @@ class PHPExcel_Reader_Excel5_MD5
$this->d = ($this->d + $D) & 0xffffffff; $this->d = ($this->d + $D) & 0xffffffff;
} }
private static function f($X, $Y, $Z)
private static function F($X, $Y, $Z)
{ {
return (($X & $Y) | ((~ $X) & $Z)); // X AND Y OR NOT X AND Z return (($X & $Y) | ((~ $X) & $Z)); // X AND Y OR NOT X AND Z
} }
private static function g($X, $Y, $Z)
private static function G($X, $Y, $Z)
{ {
return (($X & $Z) | ($Y & (~ $Z))); // X AND Z OR Y AND NOT Z return (($X & $Z) | ($Y & (~ $Z))); // X AND Z OR Y AND NOT Z
} }
private static function h($X, $Y, $Z)
private static function H($X, $Y, $Z)
{ {
return ($X ^ $Y ^ $Z); // X XOR Y XOR Z return ($X ^ $Y ^ $Z); // X XOR Y XOR Z
} }
private static function i($X, $Y, $Z)
private static function I($X, $Y, $Z)
{ {
return ($Y ^ ($X | (~ $Z))) ; // Y XOR (X OR NOT Z) return ($Y ^ ($X | (~ $Z))) ; // Y XOR (X OR NOT Z)
} }
private static function step($func, &$A, $B, $C, $D, $M, $s, $t) private static function step($func, &$A, $B, $C, $D, $M, $s, $t)
{ {
$A = ($A + call_user_func($func, $B, $C, $D) + $M + $t) & 0xffffffff; $A = ($A + call_user_func($func, $B, $C, $D) + $M + $t) & 0xffffffff;
@@ -212,7 +195,6 @@ class PHPExcel_Reader_Excel5_MD5
$A = ($B + $A) & 0xffffffff; $A = ($B + $A) & 0xffffffff;
} }
private static function rotate($decimal, $bits) private static function rotate($decimal, $bits)
{ {
$binary = str_pad(decbin($decimal), 32, "0", STR_PAD_LEFT); $binary = str_pad(decbin($decimal), 32, "0", STR_PAD_LEFT);

View File

@@ -1,8 +1,9 @@
<?php <?php
/** /**
* PHPExcel * PHPExcel_Reader_Excel5_RC4
* *
* Copyright (c) 2006 - 2014 PHPExcel * Copyright (c) 2006 - 2015 PHPExcel
* *
* This library is free software; you can redistribute it and/or * This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public * modify it under the terms of the GNU Lesser General Public
@@ -20,24 +21,16 @@
* *
* @category PHPExcel * @category PHPExcel
* @package PHPExcel_Reader_Excel5 * @package PHPExcel_Reader_Excel5
* @copyright Copyright (c) 2006 - 2014 PHPExcel (http://www.codeplex.com/PHPExcel) * @copyright Copyright (c) 2006 - 2015 PHPExcel (http://www.codeplex.com/PHPExcel)
* @license http://www.gnu.org/licenses/old-licenses/lgpl-2.1.txt LGPL * @license http://www.gnu.org/licenses/old-licenses/lgpl-2.1.txt LGPL
* @version 1.8.0, 2014-03-02 * @version ##VERSION##, ##DATE##
*/
/**
* PHPExcel_Reader_Excel5_RC4
*
* @category PHPExcel
* @package PHPExcel_Reader_Excel5
* @copyright Copyright (c) 2006 - 2014 PHPExcel (http://www.codeplex.com/PHPExcel)
*/ */
class PHPExcel_Reader_Excel5_RC4 class PHPExcel_Reader_Excel5_RC4
{ {
// Context // Context
var $s = array(); protected $s = array();
var $i = 0; protected $i = 0;
var $j = 0; protected $j = 0;
/** /**
* RC4 stream decryption/encryption constrcutor * RC4 stream decryption/encryption constrcutor

View File

@@ -1,8 +1,9 @@
<?php <?php
/** /**
* PHPExcel * PHPExcel_Reader_Exception
* *
* Copyright (c) 2006 - 2014 PHPExcel * Copyright (c) 2006 - 2015 PHPExcel
* *
* This library is free software; you can redistribute it and/or * This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public * modify it under the terms of the GNU Lesser General Public
@@ -20,20 +21,12 @@
* *
* @category PHPExcel * @category PHPExcel
* @package PHPExcel_Reader * @package PHPExcel_Reader
* @copyright Copyright (c) 2006 - 2014 PHPExcel (http://www.codeplex.com/PHPExcel) * @copyright Copyright (c) 2006 - 2015 PHPExcel (http://www.codeplex.com/PHPExcel)
* @license http://www.gnu.org/licenses/old-licenses/lgpl-2.1.txt LGPL * @license http://www.gnu.org/licenses/old-licenses/lgpl-2.1.txt LGPL
* @version 1.8.0, 2014-03-02 * @version ##VERSION##, ##DATE##
*/ */
class PHPExcel_Reader_Exception extends PHPExcel_Exception
{
/**
* PHPExcel_Reader_Exception
*
* @category PHPExcel
* @package PHPExcel_Reader
* @copyright Copyright (c) 2006 - 2014 PHPExcel (http://www.codeplex.com/PHPExcel)
*/
class PHPExcel_Reader_Exception extends PHPExcel_Exception {
/** /**
* Error handler callback * Error handler callback
* *
@@ -43,7 +36,8 @@ class PHPExcel_Reader_Exception extends PHPExcel_Exception {
* @param mixed $line * @param mixed $line
* @param mixed $context * @param mixed $context
*/ */
public static function errorHandlerCallback($code, $string, $file, $line, $context) { public static function errorHandlerCallback($code, $string, $file, $line, $context)
{
$e = new self($string, $code); $e = new self($string, $code);
$e->line = $line; $e->line = $line;
$e->file = $file; $e->file = $file;

View File

@@ -1,8 +1,18 @@
<?php <?php
/** PHPExcel root directory */
if (!defined('PHPEXCEL_ROOT')) {
/**
* @ignore
*/
define('PHPEXCEL_ROOT', dirname(__FILE__) . '/../../');
require(PHPEXCEL_ROOT . 'PHPExcel/Autoloader.php');
}
/** /**
* PHPExcel * PHPExcel_Reader_Gnumeric
* *
* Copyright (c) 2006 - 2014 PHPExcel * Copyright (c) 2006 - 2015 PHPExcel
* *
* This library is free software; you can redistribute it and/or * This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public * modify it under the terms of the GNU Lesser General Public
@@ -20,27 +30,9 @@
* *
* @category PHPExcel * @category PHPExcel
* @package PHPExcel_Reader * @package PHPExcel_Reader
* @copyright Copyright (c) 2006 - 2014 PHPExcel (http://www.codeplex.com/PHPExcel) * @copyright Copyright (c) 2006 - 2015 PHPExcel (http://www.codeplex.com/PHPExcel)
* @license http://www.gnu.org/licenses/old-licenses/lgpl-2.1.txt LGPL * @license http://www.gnu.org/licenses/old-licenses/lgpl-2.1.txt LGPL
* @version 1.8.0, 2014-03-02 * @version ##VERSION##, ##DATE##
*/
/** PHPExcel root directory */
if (!defined('PHPEXCEL_ROOT')) {
/**
* @ignore
*/
define('PHPEXCEL_ROOT', dirname(__FILE__) . '/../../');
require(PHPEXCEL_ROOT . 'PHPExcel/Autoloader.php');
}
/**
* PHPExcel_Reader_Gnumeric
*
* @category PHPExcel
* @package PHPExcel_Reader
* @copyright Copyright (c) 2006 - 2014 PHPExcel (http://www.codeplex.com/PHPExcel)
*/ */
class PHPExcel_Reader_Gnumeric extends PHPExcel_Reader_Abstract implements PHPExcel_Reader_IReader class PHPExcel_Reader_Gnumeric extends PHPExcel_Reader_Abstract implements PHPExcel_Reader_IReader
{ {
@@ -49,27 +41,26 @@ class PHPExcel_Reader_Gnumeric extends PHPExcel_Reader_Abstract implements PHPEx
* *
* @var array * @var array
*/ */
private $_styles = array(); private $styles = array();
/** /**
* Shared Expressions * Shared Expressions
* *
* @var array * @var array
*/ */
private $_expressions = array(); private $expressions = array();
private $_referenceHelper = null;
private $referenceHelper = null;
/** /**
* Create a new PHPExcel_Reader_Gnumeric * Create a new PHPExcel_Reader_Gnumeric
*/ */
public function __construct() { public function __construct()
$this->_readFilter = new PHPExcel_Reader_DefaultReadFilter(); {
$this->_referenceHelper = PHPExcel_ReferenceHelper::getInstance(); $this->readFilter = new PHPExcel_Reader_DefaultReadFilter();
$this->referenceHelper = PHPExcel_ReferenceHelper::getInstance();
} }
/** /**
* Can the current PHPExcel_Reader_IReader read the file? * Can the current PHPExcel_Reader_IReader read the file?
* *
@@ -101,7 +92,6 @@ class PHPExcel_Reader_Gnumeric extends PHPExcel_Reader_Abstract implements PHPEx
return true; return true;
} }
/** /**
* Reads names of the worksheets from a file, without parsing the whole file to a PHPExcel object * Reads names of the worksheets from a file, without parsing the whole file to a PHPExcel object
* *
@@ -116,10 +106,8 @@ class PHPExcel_Reader_Gnumeric extends PHPExcel_Reader_Abstract implements PHPEx
} }
$xml = new XMLReader(); $xml = new XMLReader();
$xml->open( $xml->xml($this->securityScanFile('compress.zlib://'.realpath($pFilename)), null, PHPExcel_Settings::getLibXmlLoaderOptions());
'compress.zlib://'.realpath($pFilename), null, PHPExcel_Settings::getLibXmlLoaderOptions() $xml->setParserProperty(2, true);
);
$xml->setParserProperty(2,true);
$worksheetNames = array(); $worksheetNames = array();
while ($xml->read()) { while ($xml->read()) {
@@ -135,7 +123,6 @@ class PHPExcel_Reader_Gnumeric extends PHPExcel_Reader_Abstract implements PHPEx
return $worksheetNames; return $worksheetNames;
} }
/** /**
* Return worksheet info (Name, Last Column Letter, Last Column Index, Total Rows, Total Columns) * Return worksheet info (Name, Last Column Letter, Last Column Index, Total Rows, Total Columns)
* *
@@ -150,10 +137,8 @@ class PHPExcel_Reader_Gnumeric extends PHPExcel_Reader_Abstract implements PHPEx
} }
$xml = new XMLReader(); $xml = new XMLReader();
$xml->open( $xml->xml($this->securityScanFile('compress.zlib://'.realpath($pFilename)), null, PHPExcel_Settings::getLibXmlLoaderOptions());
'compress.zlib://'.realpath($pFilename), null, PHPExcel_Settings::getLibXmlLoaderOptions() $xml->setParserProperty(2, true);
);
$xml->setParserProperty(2,true);
$worksheetInfo = array(); $worksheetInfo = array();
while ($xml->read()) { while ($xml->read()) {
@@ -188,8 +173,8 @@ class PHPExcel_Reader_Gnumeric extends PHPExcel_Reader_Abstract implements PHPEx
return $worksheetInfo; return $worksheetInfo;
} }
private function gzfileGetContents($filename)
private function _gzfileGetContents($filename) { {
$file = @gzopen($filename, 'rb'); $file = @gzopen($filename, 'rb');
if ($file !== false) { if ($file !== false) {
$data = ''; $data = '';
@@ -201,7 +186,6 @@ class PHPExcel_Reader_Gnumeric extends PHPExcel_Reader_Abstract implements PHPEx
return $data; return $data;
} }
/** /**
* Loads PHPExcel from file * Loads PHPExcel from file
* *
@@ -218,7 +202,6 @@ class PHPExcel_Reader_Gnumeric extends PHPExcel_Reader_Abstract implements PHPEx
return $this->loadIntoExisting($pFilename, $objPHPExcel); return $this->loadIntoExisting($pFilename, $objPHPExcel);
} }
/** /**
* Loads PHPExcel from file into PHPExcel instance * Loads PHPExcel from file into PHPExcel instance
* *
@@ -237,13 +220,13 @@ class PHPExcel_Reader_Gnumeric extends PHPExcel_Reader_Abstract implements PHPEx
$timezoneObj = new DateTimeZone('Europe/London'); $timezoneObj = new DateTimeZone('Europe/London');
$GMT = new DateTimeZone('UTC'); $GMT = new DateTimeZone('UTC');
$gFileData = $this->_gzfileGetContents($pFilename); $gFileData = $this->gzfileGetContents($pFilename);
// echo '<pre>'; // echo '<pre>';
// echo htmlentities($gFileData,ENT_QUOTES,'UTF-8'); // echo htmlentities($gFileData,ENT_QUOTES,'UTF-8');
// echo '</pre><hr />'; // echo '</pre><hr />';
// //
$xml = simplexml_load_string($gFileData, 'SimpleXMLElement', PHPExcel_Settings::getLibXmlLoaderOptions()); $xml = simplexml_load_string($this->securityScan($gFileData), 'SimpleXMLElement', PHPExcel_Settings::getLibXmlLoaderOptions());
$namespacesMeta = $xml->getNamespaces(true); $namespacesMeta = $xml->getNamespaces(true);
// var_dump($namespacesMeta); // var_dump($namespacesMeta);
@@ -257,31 +240,30 @@ class PHPExcel_Reader_Gnumeric extends PHPExcel_Reader_Abstract implements PHPEx
$officeDocXML = $officeXML->{'document-meta'}; $officeDocXML = $officeXML->{'document-meta'};
$officeDocMetaXML = $officeDocXML->meta; $officeDocMetaXML = $officeDocXML->meta;
foreach($officeDocMetaXML as $officePropertyData) { foreach ($officeDocMetaXML as $officePropertyData) {
$officePropertyDC = array(); $officePropertyDC = array();
if (isset($namespacesMeta['dc'])) { if (isset($namespacesMeta['dc'])) {
$officePropertyDC = $officePropertyData->children($namespacesMeta['dc']); $officePropertyDC = $officePropertyData->children($namespacesMeta['dc']);
} }
foreach($officePropertyDC as $propertyName => $propertyValue) { foreach ($officePropertyDC as $propertyName => $propertyValue) {
$propertyValue = (string) $propertyValue; $propertyValue = (string) $propertyValue;
switch ($propertyName) { switch ($propertyName) {
case 'title' : case 'title':
$docProps->setTitle(trim($propertyValue)); $docProps->setTitle(trim($propertyValue));
break; break;
case 'subject' : case 'subject':
$docProps->setSubject(trim($propertyValue)); $docProps->setSubject(trim($propertyValue));
break; break;
case 'creator' : case 'creator':
$docProps->setCreator(trim($propertyValue)); $docProps->setCreator(trim($propertyValue));
$docProps->setLastModifiedBy(trim($propertyValue)); $docProps->setLastModifiedBy(trim($propertyValue));
break; break;
case 'date' : case 'date':
$creationDate = strtotime(trim($propertyValue)); $creationDate = strtotime(trim($propertyValue));
$docProps->setCreated($creationDate); $docProps->setCreated($creationDate);
$docProps->setModified($creationDate); $docProps->setModified($creationDate);
break; break;
case 'description' : case 'description':
$docProps->setDescription(trim($propertyValue)); $docProps->setDescription(trim($propertyValue));
break; break;
} }
@@ -290,32 +272,32 @@ class PHPExcel_Reader_Gnumeric extends PHPExcel_Reader_Abstract implements PHPEx
if (isset($namespacesMeta['meta'])) { if (isset($namespacesMeta['meta'])) {
$officePropertyMeta = $officePropertyData->children($namespacesMeta['meta']); $officePropertyMeta = $officePropertyData->children($namespacesMeta['meta']);
} }
foreach($officePropertyMeta as $propertyName => $propertyValue) { foreach ($officePropertyMeta as $propertyName => $propertyValue) {
$attributes = $propertyValue->attributes($namespacesMeta['meta']); $attributes = $propertyValue->attributes($namespacesMeta['meta']);
$propertyValue = (string) $propertyValue; $propertyValue = (string) $propertyValue;
switch ($propertyName) { switch ($propertyName) {
case 'keyword' : case 'keyword':
$docProps->setKeywords(trim($propertyValue)); $docProps->setKeywords(trim($propertyValue));
break; break;
case 'initial-creator' : case 'initial-creator':
$docProps->setCreator(trim($propertyValue)); $docProps->setCreator(trim($propertyValue));
$docProps->setLastModifiedBy(trim($propertyValue)); $docProps->setLastModifiedBy(trim($propertyValue));
break; break;
case 'creation-date' : case 'creation-date':
$creationDate = strtotime(trim($propertyValue)); $creationDate = strtotime(trim($propertyValue));
$docProps->setCreated($creationDate); $docProps->setCreated($creationDate);
$docProps->setModified($creationDate); $docProps->setModified($creationDate);
break; break;
case 'user-defined' : case 'user-defined':
list(,$attrName) = explode(':',$attributes['name']); list(, $attrName) = explode(':', $attributes['name']);
switch ($attrName) { switch ($attrName) {
case 'publisher' : case 'publisher':
$docProps->setCompany(trim($propertyValue)); $docProps->setCompany(trim($propertyValue));
break; break;
case 'category' : case 'category':
$docProps->setCategory(trim($propertyValue)); $docProps->setCategory(trim($propertyValue));
break; break;
case 'manager' : case 'manager':
$docProps->setManager(trim($propertyValue)); $docProps->setManager(trim($propertyValue));
break; break;
} }
@@ -324,30 +306,30 @@ class PHPExcel_Reader_Gnumeric extends PHPExcel_Reader_Abstract implements PHPEx
} }
} }
} elseif (isset($gnmXML->Summary)) { } elseif (isset($gnmXML->Summary)) {
foreach($gnmXML->Summary->Item as $summaryItem) { foreach ($gnmXML->Summary->Item as $summaryItem) {
$propertyName = $summaryItem->name; $propertyName = $summaryItem->name;
$propertyValue = $summaryItem->{'val-string'}; $propertyValue = $summaryItem->{'val-string'};
switch ($propertyName) { switch ($propertyName) {
case 'title' : case 'title':
$docProps->setTitle(trim($propertyValue)); $docProps->setTitle(trim($propertyValue));
break; break;
case 'comments' : case 'comments':
$docProps->setDescription(trim($propertyValue)); $docProps->setDescription(trim($propertyValue));
break; break;
case 'keywords' : case 'keywords':
$docProps->setKeywords(trim($propertyValue)); $docProps->setKeywords(trim($propertyValue));
break; break;
case 'category' : case 'category':
$docProps->setCategory(trim($propertyValue)); $docProps->setCategory(trim($propertyValue));
break; break;
case 'manager' : case 'manager':
$docProps->setManager(trim($propertyValue)); $docProps->setManager(trim($propertyValue));
break; break;
case 'author' : case 'author':
$docProps->setCreator(trim($propertyValue)); $docProps->setCreator(trim($propertyValue));
$docProps->setLastModifiedBy(trim($propertyValue)); $docProps->setLastModifiedBy(trim($propertyValue));
break; break;
case 'company' : case 'company':
$docProps->setCompany(trim($propertyValue)); $docProps->setCompany(trim($propertyValue));
break; break;
} }
@@ -355,10 +337,10 @@ class PHPExcel_Reader_Gnumeric extends PHPExcel_Reader_Abstract implements PHPEx
} }
$worksheetID = 0; $worksheetID = 0;
foreach($gnmXML->Sheets->Sheet as $sheet) { foreach ($gnmXML->Sheets->Sheet as $sheet) {
$worksheetName = (string) $sheet->Name; $worksheetName = (string) $sheet->Name;
// echo '<b>Worksheet: ',$worksheetName,'</b><br />'; // echo '<b>Worksheet: ', $worksheetName,'</b><br />';
if ((isset($this->_loadSheetsOnly)) && (!in_array($worksheetName, $this->_loadSheetsOnly))) { if ((isset($this->loadSheetsOnly)) && (!in_array($worksheetName, $this->loadSheetsOnly))) {
continue; continue;
} }
@@ -370,35 +352,35 @@ class PHPExcel_Reader_Gnumeric extends PHPExcel_Reader_Abstract implements PHPEx
// Use false for $updateFormulaCellReferences to prevent adjustment of worksheet references in formula // Use false for $updateFormulaCellReferences to prevent adjustment of worksheet references in formula
// cells... during the load, all formulae should be correct, and we're simply bringing the worksheet // cells... during the load, all formulae should be correct, and we're simply bringing the worksheet
// name in line with the formula, not the reverse // name in line with the formula, not the reverse
$objPHPExcel->getActiveSheet()->setTitle($worksheetName,false); $objPHPExcel->getActiveSheet()->setTitle($worksheetName, false);
if ((!$this->_readDataOnly) && (isset($sheet->PrintInformation))) { if ((!$this->readDataOnly) && (isset($sheet->PrintInformation))) {
if (isset($sheet->PrintInformation->Margins)) { if (isset($sheet->PrintInformation->Margins)) {
foreach($sheet->PrintInformation->Margins->children('gnm',TRUE) as $key => $margin) { foreach ($sheet->PrintInformation->Margins->children('gnm', true) as $key => $margin) {
$marginAttributes = $margin->attributes(); $marginAttributes = $margin->attributes();
$marginSize = 72 / 100; // Default $marginSize = 72 / 100; // Default
switch($marginAttributes['PrefUnit']) { switch ($marginAttributes['PrefUnit']) {
case 'mm' : case 'mm':
$marginSize = intval($marginAttributes['Points']) / 100; $marginSize = intval($marginAttributes['Points']) / 100;
break; break;
} }
switch($key) { switch ($key) {
case 'top' : case 'top':
$objPHPExcel->getActiveSheet()->getPageMargins()->setTop($marginSize); $objPHPExcel->getActiveSheet()->getPageMargins()->setTop($marginSize);
break; break;
case 'bottom' : case 'bottom':
$objPHPExcel->getActiveSheet()->getPageMargins()->setBottom($marginSize); $objPHPExcel->getActiveSheet()->getPageMargins()->setBottom($marginSize);
break; break;
case 'left' : case 'left':
$objPHPExcel->getActiveSheet()->getPageMargins()->setLeft($marginSize); $objPHPExcel->getActiveSheet()->getPageMargins()->setLeft($marginSize);
break; break;
case 'right' : case 'right':
$objPHPExcel->getActiveSheet()->getPageMargins()->setRight($marginSize); $objPHPExcel->getActiveSheet()->getPageMargins()->setRight($marginSize);
break; break;
case 'header' : case 'header':
$objPHPExcel->getActiveSheet()->getPageMargins()->setHeader($marginSize); $objPHPExcel->getActiveSheet()->getPageMargins()->setHeader($marginSize);
break; break;
case 'footer' : case 'footer':
$objPHPExcel->getActiveSheet()->getPageMargins()->setFooter($marginSize); $objPHPExcel->getActiveSheet()->getPageMargins()->setFooter($marginSize);
break; break;
} }
@@ -406,18 +388,22 @@ class PHPExcel_Reader_Gnumeric extends PHPExcel_Reader_Abstract implements PHPEx
} }
} }
foreach($sheet->Cells->Cell as $cell) { foreach ($sheet->Cells->Cell as $cell) {
$cellAttributes = $cell->attributes(); $cellAttributes = $cell->attributes();
$row = (int) $cellAttributes->Row + 1; $row = (int) $cellAttributes->Row + 1;
$column = (int) $cellAttributes->Col; $column = (int) $cellAttributes->Col;
if ($row > $maxRow) $maxRow = $row; if ($row > $maxRow) {
if ($column > $maxCol) $maxCol = $column; $maxRow = $row;
}
if ($column > $maxCol) {
$maxCol = $column;
}
$column = PHPExcel_Cell::stringFromColumnIndex($column); $column = PHPExcel_Cell::stringFromColumnIndex($column);
// Read cell? // Read cell?
if ($this->getReadFilter() !== NULL) { if ($this->getReadFilter() !== null) {
if (!$this->getReadFilter()->readCell($column, $row, $worksheetName)) { if (!$this->getReadFilter()->readCell($column, $row, $worksheetName)) {
continue; continue;
} }
@@ -425,76 +411,75 @@ class PHPExcel_Reader_Gnumeric extends PHPExcel_Reader_Abstract implements PHPEx
$ValueType = $cellAttributes->ValueType; $ValueType = $cellAttributes->ValueType;
$ExprID = (string) $cellAttributes->ExprID; $ExprID = (string) $cellAttributes->ExprID;
// echo 'Cell ',$column,$row,'<br />'; // echo 'Cell ', $column, $row,'<br />';
// echo 'Type is ',$ValueType,'<br />'; // echo 'Type is ', $ValueType,'<br />';
// echo 'Value is ',$cell,'<br />'; // echo 'Value is ', $cell,'<br />';
$type = PHPExcel_Cell_DataType::TYPE_FORMULA; $type = PHPExcel_Cell_DataType::TYPE_FORMULA;
if ($ExprID > '') { if ($ExprID > '') {
if (((string) $cell) > '') { if (((string) $cell) > '') {
$this->expressions[$ExprID] = array(
$this->_expressions[$ExprID] = array( 'column' => $cellAttributes->Col, 'column' => $cellAttributes->Col,
'row' => $cellAttributes->Row, 'row' => $cellAttributes->Row,
'formula' => (string) $cell 'formula' => (string) $cell
); );
// echo 'NEW EXPRESSION ',$ExprID,'<br />'; // echo 'NEW EXPRESSION ', $ExprID,'<br />';
} else { } else {
$expression = $this->_expressions[$ExprID]; $expression = $this->expressions[$ExprID];
$cell = $this->_referenceHelper->updateFormulaReferences( $expression['formula'], $cell = $this->referenceHelper->updateFormulaReferences(
$expression['formula'],
'A1', 'A1',
$cellAttributes->Col - $expression['column'], $cellAttributes->Col - $expression['column'],
$cellAttributes->Row - $expression['row'], $cellAttributes->Row - $expression['row'],
$worksheetName $worksheetName
); );
// echo 'SHARED EXPRESSION ',$ExprID,'<br />'; // echo 'SHARED EXPRESSION ', $ExprID,'<br />';
// echo 'New Value is ',$cell,'<br />'; // echo 'New Value is ', $cell,'<br />';
} }
$type = PHPExcel_Cell_DataType::TYPE_FORMULA; $type = PHPExcel_Cell_DataType::TYPE_FORMULA;
} else { } else {
switch($ValueType) { switch ($ValueType) {
case '10' : // NULL case '10': // NULL
$type = PHPExcel_Cell_DataType::TYPE_NULL; $type = PHPExcel_Cell_DataType::TYPE_NULL;
break; break;
case '20' : // Boolean case '20': // Boolean
$type = PHPExcel_Cell_DataType::TYPE_BOOL; $type = PHPExcel_Cell_DataType::TYPE_BOOL;
$cell = ($cell == 'TRUE') ? True : False; $cell = ($cell == 'TRUE') ? true: false;
break; break;
case '30' : // Integer case '30': // Integer
$cell = intval($cell); $cell = intval($cell);
case '40' : // Float // Excel 2007+ doesn't differentiate between integer and float, so set the value and dropthru to the next (numeric) case
case '40': // Float
$type = PHPExcel_Cell_DataType::TYPE_NUMERIC; $type = PHPExcel_Cell_DataType::TYPE_NUMERIC;
break; break;
case '50' : // Error case '50': // Error
$type = PHPExcel_Cell_DataType::TYPE_ERROR; $type = PHPExcel_Cell_DataType::TYPE_ERROR;
break; break;
case '60' : // String case '60': // String
$type = PHPExcel_Cell_DataType::TYPE_STRING; $type = PHPExcel_Cell_DataType::TYPE_STRING;
break; break;
case '70' : // Cell Range case '70': // Cell Range
case '80' : // Array case '80': // Array
} }
} }
$objPHPExcel->getActiveSheet()->getCell($column.$row)->setValueExplicit($cell,$type); $objPHPExcel->getActiveSheet()->getCell($column.$row)->setValueExplicit($cell, $type);
} }
if ((!$this->_readDataOnly) && (isset($sheet->Objects))) { if ((!$this->readDataOnly) && (isset($sheet->Objects))) {
foreach($sheet->Objects->children('gnm',TRUE) as $key => $comment) { foreach ($sheet->Objects->children('gnm', true) as $key => $comment) {
$commentAttributes = $comment->attributes(); $commentAttributes = $comment->attributes();
// Only comment objects are handled at the moment // Only comment objects are handled at the moment
if ($commentAttributes->Text) { if ($commentAttributes->Text) {
$objPHPExcel->getActiveSheet()->getComment( (string)$commentAttributes->ObjectBound ) $objPHPExcel->getActiveSheet()->getComment((string)$commentAttributes->ObjectBound)->setAuthor((string)$commentAttributes->Author)->setText($this->parseRichText((string)$commentAttributes->Text));
->setAuthor( (string)$commentAttributes->Author )
->setText($this->_parseRichText((string)$commentAttributes->Text) );
} }
} }
} }
// echo '$maxCol=',$maxCol,'; $maxRow=',$maxRow,'<br />'; // echo '$maxCol=', $maxCol,'; $maxRow=', $maxRow,'<br />';
// //
foreach($sheet->Styles->StyleRegion as $styleRegion) { foreach ($sheet->Styles->StyleRegion as $styleRegion) {
$styleAttributes = $styleRegion->attributes(); $styleAttributes = $styleRegion->attributes();
if (($styleAttributes['startRow'] <= $maxRow) && if (($styleAttributes['startRow'] <= $maxRow) &&
($styleAttributes['startCol'] <= $maxCol)) { ($styleAttributes['startCol'] <= $maxCol)) {
$startColumn = PHPExcel_Cell::stringFromColumnIndex((int) $styleAttributes['startCol']); $startColumn = PHPExcel_Cell::stringFromColumnIndex((int) $styleAttributes['startCol']);
$startRow = $styleAttributes['startRow'] + 1; $startRow = $styleAttributes['startRow'] + 1;
@@ -509,121 +494,121 @@ class PHPExcel_Reader_Gnumeric extends PHPExcel_Reader_Abstract implements PHPEx
// var_dump($styleAttributes); // var_dump($styleAttributes);
// echo '<br />'; // echo '<br />';
// We still set the number format mask for date/time values, even if _readDataOnly is true // We still set the number format mask for date/time values, even if readDataOnly is true
if ((!$this->_readDataOnly) || if ((!$this->readDataOnly) ||
(PHPExcel_Shared_Date::isDateTimeFormatCode((string) $styleAttributes['Format']))) { (PHPExcel_Shared_Date::isDateTimeFormatCode((string) $styleAttributes['Format']))) {
$styleArray = array(); $styleArray = array();
$styleArray['numberformat']['code'] = (string) $styleAttributes['Format']; $styleArray['numberformat']['code'] = (string) $styleAttributes['Format'];
// If _readDataOnly is false, we set all formatting information // If readDataOnly is false, we set all formatting information
if (!$this->_readDataOnly) { if (!$this->readDataOnly) {
switch($styleAttributes['HAlign']) { switch ($styleAttributes['HAlign']) {
case '1' : case '1':
$styleArray['alignment']['horizontal'] = PHPExcel_Style_Alignment::HORIZONTAL_GENERAL; $styleArray['alignment']['horizontal'] = PHPExcel_Style_Alignment::HORIZONTAL_GENERAL;
break; break;
case '2' : case '2':
$styleArray['alignment']['horizontal'] = PHPExcel_Style_Alignment::HORIZONTAL_LEFT; $styleArray['alignment']['horizontal'] = PHPExcel_Style_Alignment::HORIZONTAL_LEFT;
break; break;
case '4' : case '4':
$styleArray['alignment']['horizontal'] = PHPExcel_Style_Alignment::HORIZONTAL_RIGHT; $styleArray['alignment']['horizontal'] = PHPExcel_Style_Alignment::HORIZONTAL_RIGHT;
break; break;
case '8' : case '8':
$styleArray['alignment']['horizontal'] = PHPExcel_Style_Alignment::HORIZONTAL_CENTER; $styleArray['alignment']['horizontal'] = PHPExcel_Style_Alignment::HORIZONTAL_CENTER;
break; break;
case '16' : case '16':
case '64' : case '64':
$styleArray['alignment']['horizontal'] = PHPExcel_Style_Alignment::HORIZONTAL_CENTER_CONTINUOUS; $styleArray['alignment']['horizontal'] = PHPExcel_Style_Alignment::HORIZONTAL_CENTER_CONTINUOUS;
break; break;
case '32' : case '32':
$styleArray['alignment']['horizontal'] = PHPExcel_Style_Alignment::HORIZONTAL_JUSTIFY; $styleArray['alignment']['horizontal'] = PHPExcel_Style_Alignment::HORIZONTAL_JUSTIFY;
break; break;
} }
switch($styleAttributes['VAlign']) { switch ($styleAttributes['VAlign']) {
case '1' : case '1':
$styleArray['alignment']['vertical'] = PHPExcel_Style_Alignment::VERTICAL_TOP; $styleArray['alignment']['vertical'] = PHPExcel_Style_Alignment::VERTICAL_TOP;
break; break;
case '2' : case '2':
$styleArray['alignment']['vertical'] = PHPExcel_Style_Alignment::VERTICAL_BOTTOM; $styleArray['alignment']['vertical'] = PHPExcel_Style_Alignment::VERTICAL_BOTTOM;
break; break;
case '4' : case '4':
$styleArray['alignment']['vertical'] = PHPExcel_Style_Alignment::VERTICAL_CENTER; $styleArray['alignment']['vertical'] = PHPExcel_Style_Alignment::VERTICAL_CENTER;
break; break;
case '8' : case '8':
$styleArray['alignment']['vertical'] = PHPExcel_Style_Alignment::VERTICAL_JUSTIFY; $styleArray['alignment']['vertical'] = PHPExcel_Style_Alignment::VERTICAL_JUSTIFY;
break; break;
} }
$styleArray['alignment']['wrap'] = ($styleAttributes['WrapText'] == '1') ? True : False; $styleArray['alignment']['wrap'] = ($styleAttributes['WrapText'] == '1') ? true : false;
$styleArray['alignment']['shrinkToFit'] = ($styleAttributes['ShrinkToFit'] == '1') ? True : False; $styleArray['alignment']['shrinkToFit'] = ($styleAttributes['ShrinkToFit'] == '1') ? true : false;
$styleArray['alignment']['indent'] = (intval($styleAttributes["Indent"]) > 0) ? $styleAttributes["indent"] : 0; $styleArray['alignment']['indent'] = (intval($styleAttributes["Indent"]) > 0) ? $styleAttributes["indent"] : 0;
$RGB = self::_parseGnumericColour($styleAttributes["Fore"]); $RGB = self::parseGnumericColour($styleAttributes["Fore"]);
$styleArray['font']['color']['rgb'] = $RGB; $styleArray['font']['color']['rgb'] = $RGB;
$RGB = self::_parseGnumericColour($styleAttributes["Back"]); $RGB = self::parseGnumericColour($styleAttributes["Back"]);
$shade = $styleAttributes["Shade"]; $shade = $styleAttributes["Shade"];
if (($RGB != '000000') || ($shade != '0')) { if (($RGB != '000000') || ($shade != '0')) {
$styleArray['fill']['color']['rgb'] = $styleArray['fill']['startcolor']['rgb'] = $RGB; $styleArray['fill']['color']['rgb'] = $styleArray['fill']['startcolor']['rgb'] = $RGB;
$RGB2 = self::_parseGnumericColour($styleAttributes["PatternColor"]); $RGB2 = self::parseGnumericColour($styleAttributes["PatternColor"]);
$styleArray['fill']['endcolor']['rgb'] = $RGB2; $styleArray['fill']['endcolor']['rgb'] = $RGB2;
switch($shade) { switch ($shade) {
case '1' : case '1':
$styleArray['fill']['type'] = PHPExcel_Style_Fill::FILL_SOLID; $styleArray['fill']['type'] = PHPExcel_Style_Fill::FILL_SOLID;
break; break;
case '2' : case '2':
$styleArray['fill']['type'] = PHPExcel_Style_Fill::FILL_GRADIENT_LINEAR; $styleArray['fill']['type'] = PHPExcel_Style_Fill::FILL_GRADIENT_LINEAR;
break; break;
case '3' : case '3':
$styleArray['fill']['type'] = PHPExcel_Style_Fill::FILL_GRADIENT_PATH; $styleArray['fill']['type'] = PHPExcel_Style_Fill::FILL_GRADIENT_PATH;
break; break;
case '4' : case '4':
$styleArray['fill']['type'] = PHPExcel_Style_Fill::FILL_PATTERN_DARKDOWN; $styleArray['fill']['type'] = PHPExcel_Style_Fill::FILL_PATTERN_DARKDOWN;
break; break;
case '5' : case '5':
$styleArray['fill']['type'] = PHPExcel_Style_Fill::FILL_PATTERN_DARKGRAY; $styleArray['fill']['type'] = PHPExcel_Style_Fill::FILL_PATTERN_DARKGRAY;
break; break;
case '6' : case '6':
$styleArray['fill']['type'] = PHPExcel_Style_Fill::FILL_PATTERN_DARKGRID; $styleArray['fill']['type'] = PHPExcel_Style_Fill::FILL_PATTERN_DARKGRID;
break; break;
case '7' : case '7':
$styleArray['fill']['type'] = PHPExcel_Style_Fill::FILL_PATTERN_DARKHORIZONTAL; $styleArray['fill']['type'] = PHPExcel_Style_Fill::FILL_PATTERN_DARKHORIZONTAL;
break; break;
case '8' : case '8':
$styleArray['fill']['type'] = PHPExcel_Style_Fill::FILL_PATTERN_DARKTRELLIS; $styleArray['fill']['type'] = PHPExcel_Style_Fill::FILL_PATTERN_DARKTRELLIS;
break; break;
case '9' : case '9':
$styleArray['fill']['type'] = PHPExcel_Style_Fill::FILL_PATTERN_DARKUP; $styleArray['fill']['type'] = PHPExcel_Style_Fill::FILL_PATTERN_DARKUP;
break; break;
case '10' : case '10':
$styleArray['fill']['type'] = PHPExcel_Style_Fill::FILL_PATTERN_DARKVERTICAL; $styleArray['fill']['type'] = PHPExcel_Style_Fill::FILL_PATTERN_DARKVERTICAL;
break; break;
case '11' : case '11':
$styleArray['fill']['type'] = PHPExcel_Style_Fill::FILL_PATTERN_GRAY0625; $styleArray['fill']['type'] = PHPExcel_Style_Fill::FILL_PATTERN_GRAY0625;
break; break;
case '12' : case '12':
$styleArray['fill']['type'] = PHPExcel_Style_Fill::FILL_PATTERN_GRAY125; $styleArray['fill']['type'] = PHPExcel_Style_Fill::FILL_PATTERN_GRAY125;
break; break;
case '13' : case '13':
$styleArray['fill']['type'] = PHPExcel_Style_Fill::FILL_PATTERN_LIGHTDOWN; $styleArray['fill']['type'] = PHPExcel_Style_Fill::FILL_PATTERN_LIGHTDOWN;
break; break;
case '14' : case '14':
$styleArray['fill']['type'] = PHPExcel_Style_Fill::FILL_PATTERN_LIGHTGRAY; $styleArray['fill']['type'] = PHPExcel_Style_Fill::FILL_PATTERN_LIGHTGRAY;
break; break;
case '15' : case '15':
$styleArray['fill']['type'] = PHPExcel_Style_Fill::FILL_PATTERN_LIGHTGRID; $styleArray['fill']['type'] = PHPExcel_Style_Fill::FILL_PATTERN_LIGHTGRID;
break; break;
case '16' : case '16':
$styleArray['fill']['type'] = PHPExcel_Style_Fill::FILL_PATTERN_LIGHTHORIZONTAL; $styleArray['fill']['type'] = PHPExcel_Style_Fill::FILL_PATTERN_LIGHTHORIZONTAL;
break; break;
case '17' : case '17':
$styleArray['fill']['type'] = PHPExcel_Style_Fill::FILL_PATTERN_LIGHTTRELLIS; $styleArray['fill']['type'] = PHPExcel_Style_Fill::FILL_PATTERN_LIGHTTRELLIS;
break; break;
case '18' : case '18':
$styleArray['fill']['type'] = PHPExcel_Style_Fill::FILL_PATTERN_LIGHTUP; $styleArray['fill']['type'] = PHPExcel_Style_Fill::FILL_PATTERN_LIGHTUP;
break; break;
case '19' : case '19':
$styleArray['fill']['type'] = PHPExcel_Style_Fill::FILL_PATTERN_LIGHTVERTICAL; $styleArray['fill']['type'] = PHPExcel_Style_Fill::FILL_PATTERN_LIGHTVERTICAL;
break; break;
case '20' : case '20':
$styleArray['fill']['type'] = PHPExcel_Style_Fill::FILL_PATTERN_MEDIUMGRAY; $styleArray['fill']['type'] = PHPExcel_Style_Fill::FILL_PATTERN_MEDIUMGRAY;
break; break;
} }
@@ -634,56 +619,56 @@ class PHPExcel_Reader_Gnumeric extends PHPExcel_Reader_Abstract implements PHPEx
// echo '<br />'; // echo '<br />';
$styleArray['font']['name'] = (string) $styleRegion->Style->Font; $styleArray['font']['name'] = (string) $styleRegion->Style->Font;
$styleArray['font']['size'] = intval($fontAttributes['Unit']); $styleArray['font']['size'] = intval($fontAttributes['Unit']);
$styleArray['font']['bold'] = ($fontAttributes['Bold'] == '1') ? True : False; $styleArray['font']['bold'] = ($fontAttributes['Bold'] == '1') ? true : false;
$styleArray['font']['italic'] = ($fontAttributes['Italic'] == '1') ? True : False; $styleArray['font']['italic'] = ($fontAttributes['Italic'] == '1') ? true : false;
$styleArray['font']['strike'] = ($fontAttributes['StrikeThrough'] == '1') ? True : False; $styleArray['font']['strike'] = ($fontAttributes['StrikeThrough'] == '1') ? true : false;
switch($fontAttributes['Underline']) { switch ($fontAttributes['Underline']) {
case '1' : case '1':
$styleArray['font']['underline'] = PHPExcel_Style_Font::UNDERLINE_SINGLE; $styleArray['font']['underline'] = PHPExcel_Style_Font::UNDERLINE_SINGLE;
break; break;
case '2' : case '2':
$styleArray['font']['underline'] = PHPExcel_Style_Font::UNDERLINE_DOUBLE; $styleArray['font']['underline'] = PHPExcel_Style_Font::UNDERLINE_DOUBLE;
break; break;
case '3' : case '3':
$styleArray['font']['underline'] = PHPExcel_Style_Font::UNDERLINE_SINGLEACCOUNTING; $styleArray['font']['underline'] = PHPExcel_Style_Font::UNDERLINE_SINGLEACCOUNTING;
break; break;
case '4' : case '4':
$styleArray['font']['underline'] = PHPExcel_Style_Font::UNDERLINE_DOUBLEACCOUNTING; $styleArray['font']['underline'] = PHPExcel_Style_Font::UNDERLINE_DOUBLEACCOUNTING;
break; break;
default : default:
$styleArray['font']['underline'] = PHPExcel_Style_Font::UNDERLINE_NONE; $styleArray['font']['underline'] = PHPExcel_Style_Font::UNDERLINE_NONE;
break; break;
} }
switch($fontAttributes['Script']) { switch ($fontAttributes['Script']) {
case '1' : case '1':
$styleArray['font']['superScript'] = True; $styleArray['font']['superScript'] = true;
break; break;
case '-1' : case '-1':
$styleArray['font']['subScript'] = True; $styleArray['font']['subScript'] = true;
break; break;
} }
if (isset($styleRegion->Style->StyleBorder)) { if (isset($styleRegion->Style->StyleBorder)) {
if (isset($styleRegion->Style->StyleBorder->Top)) { if (isset($styleRegion->Style->StyleBorder->Top)) {
$styleArray['borders']['top'] = self::_parseBorderAttributes($styleRegion->Style->StyleBorder->Top->attributes()); $styleArray['borders']['top'] = self::parseBorderAttributes($styleRegion->Style->StyleBorder->Top->attributes());
} }
if (isset($styleRegion->Style->StyleBorder->Bottom)) { if (isset($styleRegion->Style->StyleBorder->Bottom)) {
$styleArray['borders']['bottom'] = self::_parseBorderAttributes($styleRegion->Style->StyleBorder->Bottom->attributes()); $styleArray['borders']['bottom'] = self::parseBorderAttributes($styleRegion->Style->StyleBorder->Bottom->attributes());
} }
if (isset($styleRegion->Style->StyleBorder->Left)) { if (isset($styleRegion->Style->StyleBorder->Left)) {
$styleArray['borders']['left'] = self::_parseBorderAttributes($styleRegion->Style->StyleBorder->Left->attributes()); $styleArray['borders']['left'] = self::parseBorderAttributes($styleRegion->Style->StyleBorder->Left->attributes());
} }
if (isset($styleRegion->Style->StyleBorder->Right)) { if (isset($styleRegion->Style->StyleBorder->Right)) {
$styleArray['borders']['right'] = self::_parseBorderAttributes($styleRegion->Style->StyleBorder->Right->attributes()); $styleArray['borders']['right'] = self::parseBorderAttributes($styleRegion->Style->StyleBorder->Right->attributes());
} }
if ((isset($styleRegion->Style->StyleBorder->Diagonal)) && (isset($styleRegion->Style->StyleBorder->{'Rev-Diagonal'}))) { if ((isset($styleRegion->Style->StyleBorder->Diagonal)) && (isset($styleRegion->Style->StyleBorder->{'Rev-Diagonal'}))) {
$styleArray['borders']['diagonal'] = self::_parseBorderAttributes($styleRegion->Style->StyleBorder->Diagonal->attributes()); $styleArray['borders']['diagonal'] = self::parseBorderAttributes($styleRegion->Style->StyleBorder->Diagonal->attributes());
$styleArray['borders']['diagonaldirection'] = PHPExcel_Style_Borders::DIAGONAL_BOTH; $styleArray['borders']['diagonaldirection'] = PHPExcel_Style_Borders::DIAGONAL_BOTH;
} elseif (isset($styleRegion->Style->StyleBorder->Diagonal)) { } elseif (isset($styleRegion->Style->StyleBorder->Diagonal)) {
$styleArray['borders']['diagonal'] = self::_parseBorderAttributes($styleRegion->Style->StyleBorder->Diagonal->attributes()); $styleArray['borders']['diagonal'] = self::parseBorderAttributes($styleRegion->Style->StyleBorder->Diagonal->attributes());
$styleArray['borders']['diagonaldirection'] = PHPExcel_Style_Borders::DIAGONAL_UP; $styleArray['borders']['diagonaldirection'] = PHPExcel_Style_Borders::DIAGONAL_UP;
} elseif (isset($styleRegion->Style->StyleBorder->{'Rev-Diagonal'})) { } elseif (isset($styleRegion->Style->StyleBorder->{'Rev-Diagonal'})) {
$styleArray['borders']['diagonal'] = self::_parseBorderAttributes($styleRegion->Style->StyleBorder->{'Rev-Diagonal'}->attributes()); $styleArray['borders']['diagonal'] = self::parseBorderAttributes($styleRegion->Style->StyleBorder->{'Rev-Diagonal'}->attributes());
$styleArray['borders']['diagonaldirection'] = PHPExcel_Style_Borders::DIAGONAL_DOWN; $styleArray['borders']['diagonaldirection'] = PHPExcel_Style_Borders::DIAGONAL_DOWN;
} }
} }
@@ -699,12 +684,12 @@ class PHPExcel_Reader_Gnumeric extends PHPExcel_Reader_Abstract implements PHPEx
} }
} }
if ((!$this->_readDataOnly) && (isset($sheet->Cols))) { if ((!$this->readDataOnly) && (isset($sheet->Cols))) {
// Column Widths // Column Widths
$columnAttributes = $sheet->Cols->attributes(); $columnAttributes = $sheet->Cols->attributes();
$defaultWidth = $columnAttributes['DefaultSizePts'] / 5.4; $defaultWidth = $columnAttributes['DefaultSizePts'] / 5.4;
$c = 0; $c = 0;
foreach($sheet->Cols->ColInfo as $columnOverride) { foreach ($sheet->Cols->ColInfo as $columnOverride) {
$columnAttributes = $columnOverride->attributes(); $columnAttributes = $columnOverride->attributes();
$column = $columnAttributes['No']; $column = $columnAttributes['No'];
$columnWidth = $columnAttributes['Unit'] / 5.4; $columnWidth = $columnAttributes['Unit'] / 5.4;
@@ -728,13 +713,13 @@ class PHPExcel_Reader_Gnumeric extends PHPExcel_Reader_Abstract implements PHPEx
} }
} }
if ((!$this->_readDataOnly) && (isset($sheet->Rows))) { if ((!$this->readDataOnly) && (isset($sheet->Rows))) {
// Row Heights // Row Heights
$rowAttributes = $sheet->Rows->attributes(); $rowAttributes = $sheet->Rows->attributes();
$defaultHeight = $rowAttributes['DefaultSizePts']; $defaultHeight = $rowAttributes['DefaultSizePts'];
$r = 0; $r = 0;
foreach($sheet->Rows->RowInfo as $rowOverride) { foreach ($sheet->Rows->RowInfo as $rowOverride) {
$rowAttributes = $rowOverride->attributes(); $rowAttributes = $rowOverride->attributes();
$row = $rowAttributes['No']; $row = $rowAttributes['No'];
$rowHeight = $rowAttributes['Unit']; $rowHeight = $rowAttributes['Unit'];
@@ -760,8 +745,8 @@ class PHPExcel_Reader_Gnumeric extends PHPExcel_Reader_Abstract implements PHPEx
// Handle Merged Cells in this worksheet // Handle Merged Cells in this worksheet
if (isset($sheet->MergedRegions)) { if (isset($sheet->MergedRegions)) {
foreach($sheet->MergedRegions->Merge as $mergeCells) { foreach ($sheet->MergedRegions->Merge as $mergeCells) {
if (strpos($mergeCells,':') !== FALSE) { if (strpos($mergeCells, ':') !== false) {
$objPHPExcel->getActiveSheet()->mergeCells($mergeCells); $objPHPExcel->getActiveSheet()->mergeCells($mergeCells);
} }
} }
@@ -772,102 +757,94 @@ class PHPExcel_Reader_Gnumeric extends PHPExcel_Reader_Abstract implements PHPEx
// Loop through definedNames (global named ranges) // Loop through definedNames (global named ranges)
if (isset($gnmXML->Names)) { if (isset($gnmXML->Names)) {
foreach($gnmXML->Names->Name as $namedRange) { foreach ($gnmXML->Names->Name as $namedRange) {
$name = (string) $namedRange->name; $name = (string) $namedRange->name;
$range = (string) $namedRange->value; $range = (string) $namedRange->value;
if (stripos($range, '#REF!') !== false) { if (stripos($range, '#REF!') !== false) {
continue; continue;
} }
$range = explode('!',$range); $range = explode('!', $range);
$range[0] = trim($range[0],"'");; $range[0] = trim($range[0], "'");
if ($worksheet = $objPHPExcel->getSheetByName($range[0])) { if ($worksheet = $objPHPExcel->getSheetByName($range[0])) {
$extractedRange = str_replace('$', '', $range[1]); $extractedRange = str_replace('$', '', $range[1]);
$objPHPExcel->addNamedRange( new PHPExcel_NamedRange($name, $worksheet, $extractedRange) ); $objPHPExcel->addNamedRange(new PHPExcel_NamedRange($name, $worksheet, $extractedRange));
} }
} }
} }
// Return // Return
return $objPHPExcel; return $objPHPExcel;
} }
private static function parseBorderAttributes($borderAttributes)
private static function _parseBorderAttributes($borderAttributes)
{ {
$styleArray = array(); $styleArray = array();
if (isset($borderAttributes["Color"])) { if (isset($borderAttributes["Color"])) {
$RGB = self::_parseGnumericColour($borderAttributes["Color"]); $styleArray['color']['rgb'] = self::parseGnumericColour($borderAttributes["Color"]);
$styleArray['color']['rgb'] = $RGB;
} }
switch ($borderAttributes["Style"]) { switch ($borderAttributes["Style"]) {
case '0' : case '0':
$styleArray['style'] = PHPExcel_Style_Border::BORDER_NONE; $styleArray['style'] = PHPExcel_Style_Border::BORDER_NONE;
break; break;
case '1' : case '1':
$styleArray['style'] = PHPExcel_Style_Border::BORDER_THIN; $styleArray['style'] = PHPExcel_Style_Border::BORDER_THIN;
break; break;
case '2' : case '2':
$styleArray['style'] = PHPExcel_Style_Border::BORDER_MEDIUM; $styleArray['style'] = PHPExcel_Style_Border::BORDER_MEDIUM;
break; break;
case '4' : case '3':
$styleArray['style'] = PHPExcel_Style_Border::BORDER_DASHED;
break;
case '5' :
$styleArray['style'] = PHPExcel_Style_Border::BORDER_THICK;
break;
case '6' :
$styleArray['style'] = PHPExcel_Style_Border::BORDER_DOUBLE;
break;
case '7' :
$styleArray['style'] = PHPExcel_Style_Border::BORDER_DOTTED;
break;
case '9' :
$styleArray['style'] = PHPExcel_Style_Border::BORDER_DASHDOT;
break;
case '10' :
$styleArray['style'] = PHPExcel_Style_Border::BORDER_MEDIUMDASHDOT;
break;
case '11' :
$styleArray['style'] = PHPExcel_Style_Border::BORDER_DASHDOTDOT;
break;
case '12' :
$styleArray['style'] = PHPExcel_Style_Border::BORDER_MEDIUMDASHDOTDOT;
break;
case '13' :
$styleArray['style'] = PHPExcel_Style_Border::BORDER_MEDIUMDASHDOTDOT;
break;
case '3' :
$styleArray['style'] = PHPExcel_Style_Border::BORDER_SLANTDASHDOT; $styleArray['style'] = PHPExcel_Style_Border::BORDER_SLANTDASHDOT;
break; break;
case '8' : case '4':
$styleArray['style'] = PHPExcel_Style_Border::BORDER_DASHED;
break;
case '5':
$styleArray['style'] = PHPExcel_Style_Border::BORDER_THICK;
break;
case '6':
$styleArray['style'] = PHPExcel_Style_Border::BORDER_DOUBLE;
break;
case '7':
$styleArray['style'] = PHPExcel_Style_Border::BORDER_DOTTED;
break;
case '8':
$styleArray['style'] = PHPExcel_Style_Border::BORDER_MEDIUMDASHED; $styleArray['style'] = PHPExcel_Style_Border::BORDER_MEDIUMDASHED;
break; break;
case '9':
$styleArray['style'] = PHPExcel_Style_Border::BORDER_DASHDOT;
break;
case '10':
$styleArray['style'] = PHPExcel_Style_Border::BORDER_MEDIUMDASHDOT;
break;
case '11':
$styleArray['style'] = PHPExcel_Style_Border::BORDER_DASHDOTDOT;
break;
case '12':
$styleArray['style'] = PHPExcel_Style_Border::BORDER_MEDIUMDASHDOTDOT;
break;
case '13':
$styleArray['style'] = PHPExcel_Style_Border::BORDER_MEDIUMDASHDOTDOT;
break;
} }
return $styleArray; return $styleArray;
} }
private function parseRichText($is = '')
private function _parseRichText($is = '') { {
$value = new PHPExcel_RichText(); $value = new PHPExcel_RichText();
$value->createText($is); $value->createText($is);
return $value; return $value;
} }
private static function parseGnumericColour($gnmColour)
private static function _parseGnumericColour($gnmColour) { {
list($gnmR,$gnmG,$gnmB) = explode(':',$gnmColour); list($gnmR, $gnmG, $gnmB) = explode(':', $gnmColour);
$gnmR = substr(str_pad($gnmR,4,'0',STR_PAD_RIGHT),0,2); $gnmR = substr(str_pad($gnmR, 4, '0', STR_PAD_RIGHT), 0, 2);
$gnmG = substr(str_pad($gnmG,4,'0',STR_PAD_RIGHT),0,2); $gnmG = substr(str_pad($gnmG, 4, '0', STR_PAD_RIGHT), 0, 2);
$gnmB = substr(str_pad($gnmB,4,'0',STR_PAD_RIGHT),0,2); $gnmB = substr(str_pad($gnmB, 4, '0', STR_PAD_RIGHT), 0, 2);
$RGB = $gnmR.$gnmG.$gnmB; return $gnmR . $gnmG . $gnmB;
// echo 'Excel Colour: ',$RGB,'<br />';
return $RGB;
} }
} }

View File

@@ -1,8 +1,17 @@
<?php <?php
if (!defined('PHPEXCEL_ROOT')) {
/**
* @ignore
*/
define('PHPEXCEL_ROOT', dirname(__FILE__) . '/../../');
require(PHPEXCEL_ROOT . 'PHPExcel/Autoloader.php');
}
/** /**
* PHPExcel * PHPExcel_Reader_HTML
* *
* Copyright (c) 2006 - 2014 PHPExcel * Copyright (c) 2006 - 2015 PHPExcel
* *
* This library is free software; you can redistribute it and/or * This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public * modify it under the terms of the GNU Lesser General Public
@@ -20,92 +29,98 @@
* *
* @category PHPExcel * @category PHPExcel
* @package PHPExcel_Reader * @package PHPExcel_Reader
* @copyright Copyright (c) 2006 - 2014 PHPExcel (http://www.codeplex.com/PHPExcel) * @copyright Copyright (c) 2006 - 2015 PHPExcel (http://www.codeplex.com/PHPExcel)
* @license http://www.gnu.org/licenses/old-licenses/lgpl-2.1.txt LGPL * @license http://www.gnu.org/licenses/old-licenses/lgpl-2.1.txt LGPL
* @version 1.8.0, 2014-03-02 * @version ##VERSION##, ##DATE##
*/ */
/** PHPExcel root directory */ /** PHPExcel root directory */
if (!defined('PHPEXCEL_ROOT')) {
/**
* @ignore
*/
define('PHPEXCEL_ROOT', dirname(__FILE__) . '/../../');
require(PHPEXCEL_ROOT . 'PHPExcel/Autoloader.php');
}
/**
* PHPExcel_Reader_HTML
*
* @category PHPExcel
* @package PHPExcel_Reader
* @copyright Copyright (c) 2006 - 2014 PHPExcel (http://www.codeplex.com/PHPExcel)
*/
class PHPExcel_Reader_HTML extends PHPExcel_Reader_Abstract implements PHPExcel_Reader_IReader class PHPExcel_Reader_HTML extends PHPExcel_Reader_Abstract implements PHPExcel_Reader_IReader
{ {
/** /**
* Input encoding * Input encoding
* *
* @var string * @var string
*/ */
private $_inputEncoding = 'ANSI'; protected $inputEncoding = 'ANSI';
/** /**
* Sheet index to read * Sheet index to read
* *
* @var int * @var int
*/ */
private $_sheetIndex = 0; protected $sheetIndex = 0;
/** /**
* Formats * Formats
* *
* @var array * @var array
*/ */
private $_formats = array( 'h1' => array( 'font' => array( 'bold' => true, protected $formats = array(
'h1' => array(
'font' => array(
'bold' => true,
'size' => 24, 'size' => 24,
), ),
), // Bold, 24pt ), // Bold, 24pt
'h2' => array( 'font' => array( 'bold' => true, 'h2' => array(
'font' => array(
'bold' => true,
'size' => 18, 'size' => 18,
), ),
), // Bold, 18pt ), // Bold, 18pt
'h3' => array( 'font' => array( 'bold' => true, 'h3' => array(
'font' => array(
'bold' => true,
'size' => 13.5, 'size' => 13.5,
), ),
), // Bold, 13.5pt ), // Bold, 13.5pt
'h4' => array( 'font' => array( 'bold' => true, 'h4' => array(
'font' => array(
'bold' => true,
'size' => 12, 'size' => 12,
), ),
), // Bold, 12pt ), // Bold, 12pt
'h5' => array( 'font' => array( 'bold' => true, 'h5' => array(
'font' => array(
'bold' => true,
'size' => 10, 'size' => 10,
), ),
), // Bold, 10pt ), // Bold, 10pt
'h6' => array( 'font' => array( 'bold' => true, 'h6' => array(
'font' => array(
'bold' => true,
'size' => 7.5, 'size' => 7.5,
), ),
), // Bold, 7.5pt ), // Bold, 7.5pt
'a' => array( 'font' => array( 'underline' => true, 'a' => array(
'color' => array( 'argb' => PHPExcel_Style_Color::COLOR_BLUE, 'font' => array(
'underline' => true,
'color' => array(
'argb' => PHPExcel_Style_Color::COLOR_BLUE,
), ),
), ),
), // Blue underlined ), // Blue underlined
'hr' => array( 'borders' => array( 'bottom' => array( 'style' => PHPExcel_Style_Border::BORDER_THIN, 'hr' => array(
'color' => array( PHPExcel_Style_Color::COLOR_BLACK, 'borders' => array(
'bottom' => array(
'style' => PHPExcel_Style_Border::BORDER_THIN,
'color' => array(
PHPExcel_Style_Color::COLOR_BLACK,
), ),
), ),
), ),
), // Bottom border ), // Bottom border
); );
protected $rowspan = array();
/** /**
* Create a new PHPExcel_Reader_HTML * Create a new PHPExcel_Reader_HTML
*/ */
public function __construct() { public function __construct()
$this->_readFilter = new PHPExcel_Reader_DefaultReadFilter(); {
$this->readFilter = new PHPExcel_Reader_DefaultReadFilter();
} }
/** /**
@@ -113,16 +128,16 @@ class PHPExcel_Reader_HTML extends PHPExcel_Reader_Abstract implements PHPExcel_
* *
* @return boolean * @return boolean
*/ */
protected function _isValidFormat() protected function isValidFormat()
{ {
// Reading 2048 bytes should be enough to validate that the format is HTML // Reading 2048 bytes should be enough to validate that the format is HTML
$data = fread($this->_fileHandle, 2048); $data = fread($this->fileHandle, 2048);
if ((strpos($data, '<') !== FALSE) && if ((strpos($data, '<') !== false) &&
(strlen($data) !== strlen(strip_tags($data)))) { (strlen($data) !== strlen(strip_tags($data)))) {
return TRUE; return true;
} }
return FALSE; return false;
} }
/** /**
@@ -148,7 +163,8 @@ class PHPExcel_Reader_HTML extends PHPExcel_Reader_Abstract implements PHPExcel_
*/ */
public function setInputEncoding($pValue = 'ANSI') public function setInputEncoding($pValue = 'ANSI')
{ {
$this->_inputEncoding = $pValue; $this->inputEncoding = $pValue;
return $this; return $this;
} }
@@ -159,34 +175,39 @@ class PHPExcel_Reader_HTML extends PHPExcel_Reader_Abstract implements PHPExcel_
*/ */
public function getInputEncoding() public function getInputEncoding()
{ {
return $this->_inputEncoding; return $this->inputEncoding;
} }
// Data Array used for testing only, should write to PHPExcel object on completion of tests // Data Array used for testing only, should write to PHPExcel object on completion of tests
private $_dataArray = array(); protected $dataArray = array();
protected $tableLevel = 0;
protected $nestedColumn = array('A');
private $_tableLevel = 0; protected function setTableStartColumn($column)
private $_nestedColumn = array('A'); {
if ($this->tableLevel == 0) {
private function _setTableStartColumn($column) {
if ($this->_tableLevel == 0)
$column = 'A'; $column = 'A';
++$this->_tableLevel; }
$this->_nestedColumn[$this->_tableLevel] = $column; ++$this->tableLevel;
$this->nestedColumn[$this->tableLevel] = $column;
return $this->_nestedColumn[$this->_tableLevel]; return $this->nestedColumn[$this->tableLevel];
} }
private function _getTableStartColumn() { protected function getTableStartColumn()
return $this->_nestedColumn[$this->_tableLevel]; {
return $this->nestedColumn[$this->tableLevel];
} }
private function _releaseTableStartColumn() { protected function releaseTableStartColumn()
--$this->_tableLevel; {
return array_pop($this->_nestedColumn); --$this->tableLevel;
return array_pop($this->nestedColumn);
} }
private function _flushCell($sheet,$column,$row,&$cellContent) { protected function flushCell($sheet, $column, $row, &$cellContent)
{
if (is_string($cellContent)) { if (is_string($cellContent)) {
// Simple String content // Simple String content
if (trim($cellContent) > '') { if (trim($cellContent) > '') {
@@ -194,21 +215,22 @@ class PHPExcel_Reader_HTML extends PHPExcel_Reader_Abstract implements PHPExcel_
// echo 'FLUSH CELL: ' , $column , $row , ' => ' , $cellContent , '<br />'; // echo 'FLUSH CELL: ' , $column , $row , ' => ' , $cellContent , '<br />';
// Write to worksheet to be done here... // Write to worksheet to be done here...
// ... we return the cell so we can mess about with styles more easily // ... we return the cell so we can mess about with styles more easily
$cell = $sheet->setCellValue($column.$row,$cellContent,true); $sheet->setCellValue($column . $row, $cellContent, true);
$this->_dataArray[$row][$column] = $cellContent; $this->dataArray[$row][$column] = $cellContent;
} }
} else { } else {
// We have a Rich Text run // We have a Rich Text run
// TODO // TODO
$this->_dataArray[$row][$column] = 'RICH TEXT: ' . $cellContent; $this->dataArray[$row][$column] = 'RICH TEXT: ' . $cellContent;
} }
$cellContent = (string) ''; $cellContent = (string) '';
} }
private function _processDomElement(DOMNode $element, $sheet, &$row, &$column, &$cellContent){ protected function processDomElement(DOMNode $element, $sheet, &$row, &$column, &$cellContent, $format = null)
foreach($element->childNodes as $child){ {
foreach ($element->childNodes as $child) {
if ($child instanceof DOMText) { if ($child instanceof DOMText) {
$domText = preg_replace('/\s+/',' ',trim($child->nodeValue)); $domText = preg_replace('/\s+/u', ' ', trim($child->nodeValue));
if (is_string($cellContent)) { if (is_string($cellContent)) {
// simply append the text if the cell content is a plain text string // simply append the text if the cell content is a plain text string
$cellContent .= $domText; $cellContent .= $domText;
@@ -216,181 +238,227 @@ class PHPExcel_Reader_HTML extends PHPExcel_Reader_Abstract implements PHPExcel_
// but if we have a rich text run instead, we need to append it correctly // but if we have a rich text run instead, we need to append it correctly
// TODO // TODO
} }
} elseif($child instanceof DOMElement) { } elseif ($child instanceof DOMElement) {
// echo '<b>DOM ELEMENT: </b>' , strtoupper($child->nodeName) , '<br />'; // echo '<b>DOM ELEMENT: </b>' , strtoupper($child->nodeName) , '<br />';
$attributeArray = array(); $attributeArray = array();
foreach($child->attributes as $attribute) { foreach ($child->attributes as $attribute) {
// echo '<b>ATTRIBUTE: </b>' , $attribute->name , ' => ' , $attribute->value , '<br />'; // echo '<b>ATTRIBUTE: </b>' , $attribute->name , ' => ' , $attribute->value , '<br />';
$attributeArray[$attribute->name] = $attribute->value; $attributeArray[$attribute->name] = $attribute->value;
} }
switch($child->nodeName) { switch ($child->nodeName) {
case 'meta' : case 'meta':
foreach($attributeArray as $attributeName => $attributeValue) { foreach ($attributeArray as $attributeName => $attributeValue) {
switch($attributeName) { switch ($attributeName) {
case 'content': case 'content':
// TODO // TODO
// Extract character set, so we can convert to UTF-8 if required // Extract character set, so we can convert to UTF-8 if required
break; break;
} }
} }
$this->_processDomElement($child,$sheet,$row,$column,$cellContent); $this->processDomElement($child, $sheet, $row, $column, $cellContent);
break; break;
case 'title' : case 'title':
$this->_processDomElement($child,$sheet,$row,$column,$cellContent); $this->processDomElement($child, $sheet, $row, $column, $cellContent);
$sheet->setTitle($cellContent); $sheet->setTitle($cellContent);
$cellContent = ''; $cellContent = '';
break; break;
case 'span' : case 'span':
case 'div' : case 'div':
case 'font' : case 'font':
case 'i' : case 'i':
case 'em' : case 'em':
case 'strong': case 'strong':
case 'b' : case 'b':
// echo 'STYLING, SPAN OR DIV<br />'; // echo 'STYLING, SPAN OR DIV<br />';
if ($cellContent > '') if ($cellContent > '') {
$cellContent .= ' '; $cellContent .= ' ';
$this->_processDomElement($child,$sheet,$row,$column,$cellContent); }
if ($cellContent > '') $this->processDomElement($child, $sheet, $row, $column, $cellContent);
if ($cellContent > '') {
$cellContent .= ' '; $cellContent .= ' ';
}
// echo 'END OF STYLING, SPAN OR DIV<br />'; // echo 'END OF STYLING, SPAN OR DIV<br />';
break; break;
case 'hr' : case 'hr':
$this->_flushCell($sheet,$column,$row,$cellContent); $this->flushCell($sheet, $column, $row, $cellContent);
++$row; ++$row;
if (isset($this->_formats[$child->nodeName])) { if (isset($this->formats[$child->nodeName])) {
$sheet->getStyle($column.$row)->applyFromArray($this->_formats[$child->nodeName]); $sheet->getStyle($column . $row)->applyFromArray($this->formats[$child->nodeName]);
} else { } else {
$cellContent = '----------'; $cellContent = '----------';
$this->_flushCell($sheet,$column,$row,$cellContent); $this->flushCell($sheet, $column, $row, $cellContent);
} }
++$row; ++$row;
case 'br' : // Add a break after a horizontal rule, simply by allowing the code to dropthru
if ($this->_tableLevel > 0) { case 'br':
if ($this->tableLevel > 0) {
// If we're inside a table, replace with a \n // If we're inside a table, replace with a \n
$cellContent .= "\n"; $cellContent .= "\n";
} else { } else {
// Otherwise flush our existing content and move the row cursor on // Otherwise flush our existing content and move the row cursor on
$this->_flushCell($sheet,$column,$row,$cellContent); $this->flushCell($sheet, $column, $row, $cellContent);
++$row; ++$row;
} }
// echo 'HARD LINE BREAK: ' , '<br />'; // echo 'HARD LINE BREAK: ' , '<br />';
break; break;
case 'a' : case 'a':
// echo 'START OF HYPERLINK: ' , '<br />'; // echo 'START OF HYPERLINK: ' , '<br />';
foreach($attributeArray as $attributeName => $attributeValue) { foreach ($attributeArray as $attributeName => $attributeValue) {
switch($attributeName) { switch ($attributeName) {
case 'href': case 'href':
// echo 'Link to ' , $attributeValue , '<br />'; // echo 'Link to ' , $attributeValue , '<br />';
$sheet->getCell($column.$row)->getHyperlink()->setUrl($attributeValue); $sheet->getCell($column . $row)->getHyperlink()->setUrl($attributeValue);
if (isset($this->_formats[$child->nodeName])) { if (isset($this->formats[$child->nodeName])) {
$sheet->getStyle($column.$row)->applyFromArray($this->_formats[$child->nodeName]); $sheet->getStyle($column . $row)->applyFromArray($this->formats[$child->nodeName]);
} }
break; break;
} }
} }
$cellContent .= ' '; $cellContent .= ' ';
$this->_processDomElement($child,$sheet,$row,$column,$cellContent); $this->processDomElement($child, $sheet, $row, $column, $cellContent);
// echo 'END OF HYPERLINK:' , '<br />'; // echo 'END OF HYPERLINK:' , '<br />';
break; break;
case 'h1' : case 'h1':
case 'h2' : case 'h2':
case 'h3' : case 'h3':
case 'h4' : case 'h4':
case 'h5' : case 'h5':
case 'h6' : case 'h6':
case 'ol' : case 'ol':
case 'ul' : case 'ul':
case 'p' : case 'p':
if ($this->_tableLevel > 0) { if ($this->tableLevel > 0) {
// If we're inside a table, replace with a \n // If we're inside a table, replace with a \n
$cellContent .= "\n"; $cellContent .= "\n";
// echo 'LIST ENTRY: ' , '<br />'; // echo 'LIST ENTRY: ' , '<br />';
$this->_processDomElement($child,$sheet,$row,$column,$cellContent); $this->processDomElement($child, $sheet, $row, $column, $cellContent);
// echo 'END OF LIST ENTRY:' , '<br />'; // echo 'END OF LIST ENTRY:' , '<br />';
} else { } else {
if ($cellContent > '') { if ($cellContent > '') {
$this->_flushCell($sheet,$column,$row,$cellContent); $this->flushCell($sheet, $column, $row, $cellContent);
$row += 2; $row++;
} }
// echo 'START OF PARAGRAPH: ' , '<br />'; // echo 'START OF PARAGRAPH: ' , '<br />';
$this->_processDomElement($child,$sheet,$row,$column,$cellContent); $this->processDomElement($child, $sheet, $row, $column, $cellContent);
// echo 'END OF PARAGRAPH:' , '<br />'; // echo 'END OF PARAGRAPH:' , '<br />';
$this->_flushCell($sheet,$column,$row,$cellContent); $this->flushCell($sheet, $column, $row, $cellContent);
if (isset($this->_formats[$child->nodeName])) { if (isset($this->formats[$child->nodeName])) {
$sheet->getStyle($column.$row)->applyFromArray($this->_formats[$child->nodeName]); $sheet->getStyle($column . $row)->applyFromArray($this->formats[$child->nodeName]);
} }
$row += 2; $row++;
$column = 'A'; $column = 'A';
} }
break; break;
case 'li' : case 'li':
if ($this->_tableLevel > 0) { if ($this->tableLevel > 0) {
// If we're inside a table, replace with a \n // If we're inside a table, replace with a \n
$cellContent .= "\n"; $cellContent .= "\n";
// echo 'LIST ENTRY: ' , '<br />'; // echo 'LIST ENTRY: ' , '<br />';
$this->_processDomElement($child,$sheet,$row,$column,$cellContent); $this->processDomElement($child, $sheet, $row, $column, $cellContent);
// echo 'END OF LIST ENTRY:' , '<br />'; // echo 'END OF LIST ENTRY:' , '<br />';
} else { } else {
if ($cellContent > '') { if ($cellContent > '') {
$this->_flushCell($sheet,$column,$row,$cellContent); $this->flushCell($sheet, $column, $row, $cellContent);
} }
++$row; ++$row;
// echo 'LIST ENTRY: ' , '<br />'; // echo 'LIST ENTRY: ' , '<br />';
$this->_processDomElement($child,$sheet,$row,$column,$cellContent); $this->processDomElement($child, $sheet, $row, $column, $cellContent);
// echo 'END OF LIST ENTRY:' , '<br />'; // echo 'END OF LIST ENTRY:' , '<br />';
$this->_flushCell($sheet,$column,$row,$cellContent); $this->flushCell($sheet, $column, $row, $cellContent);
$column = 'A'; $column = 'A';
} }
break; break;
case 'table' : case 'table':
$this->_flushCell($sheet,$column,$row,$cellContent); $this->flushCell($sheet, $column, $row, $cellContent);
$column = $this->_setTableStartColumn($column); $column = $this->setTableStartColumn($column);
// echo 'START OF TABLE LEVEL ' , $this->_tableLevel , '<br />'; // echo 'START OF TABLE LEVEL ' , $this->tableLevel , '<br />';
if ($this->_tableLevel > 1) if ($this->tableLevel > 1) {
--$row; --$row;
$this->_processDomElement($child,$sheet,$row,$column,$cellContent); }
// echo 'END OF TABLE LEVEL ' , $this->_tableLevel , '<br />'; $this->processDomElement($child, $sheet, $row, $column, $cellContent);
$column = $this->_releaseTableStartColumn(); // echo 'END OF TABLE LEVEL ' , $this->tableLevel , '<br />';
if ($this->_tableLevel > 1) { $column = $this->releaseTableStartColumn();
if ($this->tableLevel > 1) {
++$column; ++$column;
} else { } else {
++$row; ++$row;
} }
break; break;
case 'thead' : case 'thead':
case 'tbody' : case 'tbody':
$this->_processDomElement($child,$sheet,$row,$column,$cellContent); $this->processDomElement($child, $sheet, $row, $column, $cellContent);
break; break;
case 'tr' : case 'tr':
++$row; $column = $this->getTableStartColumn();
$column = $this->_getTableStartColumn();
$cellContent = ''; $cellContent = '';
// echo 'START OF TABLE ' , $this->_tableLevel , ' ROW<br />'; // echo 'START OF TABLE ' , $this->tableLevel , ' ROW<br />';
$this->_processDomElement($child,$sheet,$row,$column,$cellContent); $this->processDomElement($child, $sheet, $row, $column, $cellContent);
// echo 'END OF TABLE ' , $this->_tableLevel , ' ROW<br />'; ++$row;
// echo 'END OF TABLE ' , $this->tableLevel , ' ROW<br />';
break; break;
case 'th' : case 'th':
case 'td' : case 'td':
// echo 'START OF TABLE ' , $this->_tableLevel , ' CELL<br />'; // echo 'START OF TABLE ' , $this->tableLevel , ' CELL<br />';
$this->_processDomElement($child,$sheet,$row,$column,$cellContent); $this->processDomElement($child, $sheet, $row, $column, $cellContent);
// echo 'END OF TABLE ' , $this->_tableLevel , ' CELL<br />'; // echo 'END OF TABLE ' , $this->tableLevel , ' CELL<br />';
$this->_flushCell($sheet,$column,$row,$cellContent);
while (isset($this->rowspan[$column . $row])) {
++$column;
}
$this->flushCell($sheet, $column, $row, $cellContent);
// if (isset($attributeArray['style']) && !empty($attributeArray['style'])) {
// $styleAry = $this->getPhpExcelStyleArray($attributeArray['style']);
//
// if (!empty($styleAry)) {
// $sheet->getStyle($column . $row)->applyFromArray($styleAry);
// }
// }
if (isset($attributeArray['rowspan']) && isset($attributeArray['colspan'])) {
//create merging rowspan and colspan
$columnTo = $column;
for ($i = 0; $i < $attributeArray['colspan'] - 1; $i++) {
++$columnTo;
}
$range = $column . $row . ':' . $columnTo . ($row + $attributeArray['rowspan'] - 1);
foreach (\PHPExcel_Cell::extractAllCellReferencesInRange($range) as $value) {
$this->rowspan[$value] = true;
}
$sheet->mergeCells($range);
$column = $columnTo;
} elseif (isset($attributeArray['rowspan'])) {
//create merging rowspan
$range = $column . $row . ':' . $column . ($row + $attributeArray['rowspan'] - 1);
foreach (\PHPExcel_Cell::extractAllCellReferencesInRange($range) as $value) {
$this->rowspan[$value] = true;
}
$sheet->mergeCells($range);
} elseif (isset($attributeArray['colspan'])) {
//create merging colspan
$columnTo = $column;
for ($i = 0; $i < $attributeArray['colspan'] - 1; $i++) {
++$columnTo;
}
$sheet->mergeCells($column . $row . ':' . $columnTo . $row);
$column = $columnTo;
}
++$column; ++$column;
break; break;
case 'body' : case 'body':
$row = 1; $row = 1;
$column = 'A'; $column = 'A';
$content = ''; $content = '';
$this->_tableLevel = 0; $this->tableLevel = 0;
$this->_processDomElement($child,$sheet,$row,$column,$cellContent); $this->processDomElement($child, $sheet, $row, $column, $cellContent);
break; break;
default: default:
$this->_processDomElement($child,$sheet,$row,$column,$cellContent); $this->processDomElement($child, $sheet, $row, $column, $cellContent);
} }
} }
} }
@@ -407,39 +475,35 @@ class PHPExcel_Reader_HTML extends PHPExcel_Reader_Abstract implements PHPExcel_
public function loadIntoExisting($pFilename, PHPExcel $objPHPExcel) public function loadIntoExisting($pFilename, PHPExcel $objPHPExcel)
{ {
// Open file to validate // Open file to validate
$this->_openFile($pFilename); $this->openFile($pFilename);
if (!$this->_isValidFormat()) { if (!$this->isValidFormat()) {
fclose ($this->_fileHandle); fclose($this->fileHandle);
throw new PHPExcel_Reader_Exception($pFilename . " is an Invalid HTML file."); throw new PHPExcel_Reader_Exception($pFilename . " is an Invalid HTML file.");
} }
// Close after validating // Close after validating
fclose ($this->_fileHandle); fclose($this->fileHandle);
// Create new PHPExcel // Create new PHPExcel
while ($objPHPExcel->getSheetCount() <= $this->_sheetIndex) { while ($objPHPExcel->getSheetCount() <= $this->sheetIndex) {
$objPHPExcel->createSheet(); $objPHPExcel->createSheet();
} }
$objPHPExcel->setActiveSheetIndex( $this->_sheetIndex ); $objPHPExcel->setActiveSheetIndex($this->sheetIndex);
// Create a new DOM object // Create a new DOM object
$dom = new domDocument; $dom = new domDocument;
// Reload the HTML file into the DOM object // Reload the HTML file into the DOM object
$loaded = $dom->loadHTMLFile($pFilename, PHPExcel_Settings::getLibXmlLoaderOptions()); $loaded = $dom->loadHTML(mb_convert_encoding($this->securityScanFile($pFilename), 'HTML-ENTITIES', 'UTF-8'));
if ($loaded === FALSE) { if ($loaded === false) {
throw new PHPExcel_Reader_Exception('Failed to load ',$pFilename,' as a DOM Document'); throw new PHPExcel_Reader_Exception('Failed to load ', $pFilename, ' as a DOM Document');
} }
// Discard white space // Discard white space
$dom->preserveWhiteSpace = false; $dom->preserveWhiteSpace = false;
$row = 0; $row = 0;
$column = 'A'; $column = 'A';
$content = ''; $content = '';
$this->_processDomElement($dom,$objPHPExcel->getActiveSheet(),$row,$column,$content); $this->processDomElement($dom, $objPHPExcel->getActiveSheet(), $row, $column, $content);
// echo '<hr />';
// var_dump($this->_dataArray);
// Return // Return
return $objPHPExcel; return $objPHPExcel;
@@ -450,8 +514,9 @@ class PHPExcel_Reader_HTML extends PHPExcel_Reader_Abstract implements PHPExcel_
* *
* @return int * @return int
*/ */
public function getSheetIndex() { public function getSheetIndex()
return $this->_sheetIndex; {
return $this->sheetIndex;
} }
/** /**
@@ -460,9 +525,25 @@ class PHPExcel_Reader_HTML extends PHPExcel_Reader_Abstract implements PHPExcel_
* @param int $pValue Sheet index * @param int $pValue Sheet index
* @return PHPExcel_Reader_HTML * @return PHPExcel_Reader_HTML
*/ */
public function setSheetIndex($pValue = 0) { public function setSheetIndex($pValue = 0)
$this->_sheetIndex = $pValue; {
$this->sheetIndex = $pValue;
return $this; return $this;
} }
/**
* Scan theXML for use of <!ENTITY to prevent XXE/XEE attacks
*
* @param string $xml
* @throws PHPExcel_Reader_Exception
*/
public function securityScan($xml)
{
$pattern = '/\\0?' . implode('\\0?', str_split('<!ENTITY')) . '\\0?/';
if (preg_match($pattern, $xml)) {
throw new PHPExcel_Reader_Exception('Detected use of ENTITY in XML, spreadsheet file load() aborted to prevent XXE/XEE attacks');
}
return $xml;
}
} }

View File

@@ -1,8 +1,9 @@
<?php <?php
/** /**
* PHPExcel * PHPExcel_Reader_IReadFilter
* *
* Copyright (c) 2006 - 2014 PHPExcel * Copyright (c) 2006 - 2015 PHPExcel
* *
* This library is free software; you can redistribute it and/or * This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public * modify it under the terms of the GNU Lesser General Public
@@ -20,26 +21,17 @@
* *
* @category PHPExcel * @category PHPExcel
* @package PHPExcel_Reader * @package PHPExcel_Reader
* @copyright Copyright (c) 2006 - 2014 PHPExcel (http://www.codeplex.com/PHPExcel) * @copyright Copyright (c) 2006 - 2015 PHPExcel (http://www.codeplex.com/PHPExcel)
* @license http://www.gnu.org/licenses/old-licenses/lgpl-2.1.txt LGPL * @license http://www.gnu.org/licenses/old-licenses/lgpl-2.1.txt LGPL
* @version 1.8.0, 2014-03-02 * @version ##VERSION##, ##DATE##
*/
/**
* PHPExcel_Reader_IReadFilter
*
* @category PHPExcel
* @package PHPExcel_Reader
* @copyright Copyright (c) 2006 - 2014 PHPExcel (http://www.codeplex.com/PHPExcel)
*/ */
interface PHPExcel_Reader_IReadFilter interface PHPExcel_Reader_IReadFilter
{ {
/** /**
* Should this cell be read? * Should this cell be read?
* *
* @param $column String column index * @param $column Column address (as a string value like "A", or "IV")
* @param $row Row index * @param $row Row number
* @param $worksheetName Optional worksheet name * @param $worksheetName Optional worksheet name
* @return boolean * @return boolean
*/ */

View File

@@ -1,8 +1,9 @@
<?php <?php
/** /**
* PHPExcel * PHPExcel_Reader_IReader
* *
* Copyright (c) 2006 - 2014 PHPExcel * Copyright (c) 2006 - 2015 PHPExcel
* *
* This library is free software; you can redistribute it and/or * This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public * modify it under the terms of the GNU Lesser General Public
@@ -20,18 +21,9 @@
* *
* @category PHPExcel * @category PHPExcel
* @package PHPExcel_Reader * @package PHPExcel_Reader
* @copyright Copyright (c) 2006 - 2014 PHPExcel (http://www.codeplex.com/PHPExcel) * @copyright Copyright (c) 2006 - 2015 PHPExcel (http://www.codeplex.com/PHPExcel)
* @license http://www.gnu.org/licenses/old-licenses/lgpl-2.1.txt LGPL * @license http://www.gnu.org/licenses/old-licenses/lgpl-2.1.txt LGPL
* @version 1.8.0, 2014-03-02 * @version ##VERSION##, ##DATE##
*/
/**
* PHPExcel_Reader_IReader
*
* @category PHPExcel
* @package PHPExcel_Reader
* @copyright Copyright (c) 2006 - 2014 PHPExcel (http://www.codeplex.com/PHPExcel)
*/ */
interface PHPExcel_Reader_IReader interface PHPExcel_Reader_IReader
{ {
@@ -47,6 +39,7 @@ interface PHPExcel_Reader_IReader
* Loads PHPExcel from file * Loads PHPExcel from file
* *
* @param string $pFilename * @param string $pFilename
* @return PHPExcel
* @throws PHPExcel_Reader_Exception * @throws PHPExcel_Reader_Exception
*/ */
public function load($pFilename); public function load($pFilename);

View File

@@ -1,8 +1,18 @@
<?php <?php
/** PHPExcel root directory */
if (!defined('PHPEXCEL_ROOT')) {
/**
* @ignore
*/
define('PHPEXCEL_ROOT', dirname(__FILE__) . '/../../');
require(PHPEXCEL_ROOT . 'PHPExcel/Autoloader.php');
}
/** /**
* PHPExcel * PHPExcel_Reader_OOCalc
* *
* Copyright (c) 2006 - 2014 PHPExcel * Copyright (c) 2006 - 2015 PHPExcel
* *
* This library is free software; you can redistribute it and/or * This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public * modify it under the terms of the GNU Lesser General Public
@@ -20,27 +30,9 @@
* *
* @category PHPExcel * @category PHPExcel
* @package PHPExcel_Reader * @package PHPExcel_Reader
* @copyright Copyright (c) 2006 - 2014 PHPExcel (http://www.codeplex.com/PHPExcel) * @copyright Copyright (c) 2006 - 2015 PHPExcel (http://www.codeplex.com/PHPExcel)
* @license http://www.gnu.org/licenses/old-licenses/lgpl-2.1.txt LGPL * @license http://www.gnu.org/licenses/old-licenses/lgpl-2.1.txt LGPL
* @version 1.8.0, 2014-03-02 * @version ##VERSION##, ##DATE##
*/
/** PHPExcel root directory */
if (!defined('PHPEXCEL_ROOT')) {
/**
* @ignore
*/
define('PHPEXCEL_ROOT', dirname(__FILE__) . '/../../');
require(PHPEXCEL_ROOT . 'PHPExcel/Autoloader.php');
}
/**
* PHPExcel_Reader_OOCalc
*
* @category PHPExcel
* @package PHPExcel_Reader
* @copyright Copyright (c) 2006 - 2014 PHPExcel (http://www.codeplex.com/PHPExcel)
*/ */
class PHPExcel_Reader_OOCalc extends PHPExcel_Reader_Abstract implements PHPExcel_Reader_IReader class PHPExcel_Reader_OOCalc extends PHPExcel_Reader_Abstract implements PHPExcel_Reader_IReader
{ {
@@ -49,17 +41,16 @@ class PHPExcel_Reader_OOCalc extends PHPExcel_Reader_Abstract implements PHPExce
* *
* @var array * @var array
*/ */
private $_styles = array(); private $styles = array();
/** /**
* Create a new PHPExcel_Reader_OOCalc * Create a new PHPExcel_Reader_OOCalc
*/ */
public function __construct() { public function __construct()
$this->_readFilter = new PHPExcel_Reader_DefaultReadFilter(); {
$this->readFilter = new PHPExcel_Reader_DefaultReadFilter();
} }
/** /**
* Can the current PHPExcel_Reader_IReader read the file? * Can the current PHPExcel_Reader_IReader read the file?
* *
@@ -77,7 +68,7 @@ class PHPExcel_Reader_OOCalc extends PHPExcel_Reader_Abstract implements PHPExce
$zipClass = PHPExcel_Settings::getZipClass(); $zipClass = PHPExcel_Settings::getZipClass();
// Check if zip class exists // Check if zip class exists
// if (!class_exists($zipClass, FALSE)) { // if (!class_exists($zipClass, false)) {
// throw new PHPExcel_Reader_Exception($zipClass . " library is not enabled"); // throw new PHPExcel_Reader_Exception($zipClass . " library is not enabled");
// } // }
@@ -89,12 +80,12 @@ class PHPExcel_Reader_OOCalc extends PHPExcel_Reader_Abstract implements PHPExce
$stat = $zip->statName('mimetype'); $stat = $zip->statName('mimetype');
if ($stat && ($stat['size'] <= 255)) { if ($stat && ($stat['size'] <= 255)) {
$mimeType = $zip->getFromName($stat['name']); $mimeType = $zip->getFromName($stat['name']);
} elseif($stat = $zip->statName('META-INF/manifest.xml')) { } elseif ($stat = $zip->statName('META-INF/manifest.xml')) {
$xml = simplexml_load_string($zip->getFromName('META-INF/manifest.xml'), 'SimpleXMLElement', PHPExcel_Settings::getLibXmlLoaderOptions()); $xml = simplexml_load_string($this->securityScan($zip->getFromName('META-INF/manifest.xml')), 'SimpleXMLElement', PHPExcel_Settings::getLibXmlLoaderOptions());
$namespacesContent = $xml->getNamespaces(true); $namespacesContent = $xml->getNamespaces(true);
if (isset($namespacesContent['manifest'])) { if (isset($namespacesContent['manifest'])) {
$manifest = $xml->children($namespacesContent['manifest']); $manifest = $xml->children($namespacesContent['manifest']);
foreach($manifest as $manifestDataSet) { foreach ($manifest as $manifestDataSet) {
$manifestAttributes = $manifestDataSet->attributes($namespacesContent['manifest']); $manifestAttributes = $manifestDataSet->attributes($namespacesContent['manifest']);
if ($manifestAttributes->{'full-path'} == '/') { if ($manifestAttributes->{'full-path'} == '/') {
$mimeType = (string) $manifestAttributes->{'media-type'}; $mimeType = (string) $manifestAttributes->{'media-type'};
@@ -109,7 +100,7 @@ class PHPExcel_Reader_OOCalc extends PHPExcel_Reader_Abstract implements PHPExce
return ($mimeType === 'application/vnd.oasis.opendocument.spreadsheet'); return ($mimeType === 'application/vnd.oasis.opendocument.spreadsheet');
} }
return FALSE; return false;
} }
@@ -136,19 +127,20 @@ class PHPExcel_Reader_OOCalc extends PHPExcel_Reader_Abstract implements PHPExce
$worksheetNames = array(); $worksheetNames = array();
$xml = new XMLReader(); $xml = new XMLReader();
$res = $xml->open('zip://'.realpath($pFilename).'#content.xml', null, PHPExcel_Settings::getLibXmlLoaderOptions()); $res = $xml->xml($this->securityScanFile('zip://'.realpath($pFilename).'#content.xml'), null, PHPExcel_Settings::getLibXmlLoaderOptions());
$xml->setParserProperty(2,true); $xml->setParserProperty(2, true);
// Step into the first level of content of the XML // Step into the first level of content of the XML
$xml->read(); $xml->read();
while ($xml->read()) { while ($xml->read()) {
// Quickly jump through to the office:body node // Quickly jump through to the office:body node
while ($xml->name !== 'office:body') { while ($xml->name !== 'office:body') {
if ($xml->isEmptyElement) if ($xml->isEmptyElement) {
$xml->read(); $xml->read();
else } else {
$xml->next(); $xml->next();
} }
}
// Now read each node until we find our first table:table node // Now read each node until we find our first table:table node
while ($xml->read()) { while ($xml->read()) {
if ($xml->name == 'table:table' && $xml->nodeType == XMLReader::ELEMENT) { if ($xml->name == 'table:table' && $xml->nodeType == XMLReader::ELEMENT) {
@@ -164,7 +156,6 @@ class PHPExcel_Reader_OOCalc extends PHPExcel_Reader_Abstract implements PHPExce
return $worksheetNames; return $worksheetNames;
} }
/** /**
* Return worksheet info (Name, Last Column Letter, Last Column Index, Total Rows, Total Columns) * Return worksheet info (Name, Last Column Letter, Last Column Index, Total Rows, Total Columns)
* *
@@ -188,19 +179,20 @@ class PHPExcel_Reader_OOCalc extends PHPExcel_Reader_Abstract implements PHPExce
} }
$xml = new XMLReader(); $xml = new XMLReader();
$res = $xml->open('zip://'.realpath($pFilename).'#content.xml', null, PHPExcel_Settings::getLibXmlLoaderOptions()); $res = $xml->xml($this->securityScanFile('zip://'.realpath($pFilename).'#content.xml'), null, PHPExcel_Settings::getLibXmlLoaderOptions());
$xml->setParserProperty(2,true); $xml->setParserProperty(2, true);
// Step into the first level of content of the XML // Step into the first level of content of the XML
$xml->read(); $xml->read();
while ($xml->read()) { while ($xml->read()) {
// Quickly jump through to the office:body node // Quickly jump through to the office:body node
while ($xml->name !== 'office:body') { while ($xml->name !== 'office:body') {
if ($xml->isEmptyElement) if ($xml->isEmptyElement) {
$xml->read(); $xml->read();
else } else {
$xml->next(); $xml->next();
} }
}
// Now read each node until we find our first table:table node // Now read each node until we find our first table:table node
while ($xml->read()) { while ($xml->read()) {
if ($xml->name == 'table:table' && $xml->nodeType == XMLReader::ELEMENT) { if ($xml->name == 'table:table' && $xml->nodeType == XMLReader::ELEMENT) {
@@ -222,7 +214,7 @@ class PHPExcel_Reader_OOCalc extends PHPExcel_Reader_Abstract implements PHPExce
$rowspan = $xml->getAttribute('table:number-rows-repeated'); $rowspan = $xml->getAttribute('table:number-rows-repeated');
$rowspan = empty($rowspan) ? 1 : $rowspan; $rowspan = empty($rowspan) ? 1 : $rowspan;
$tmpInfo['totalRows'] += $rowspan; $tmpInfo['totalRows'] += $rowspan;
$tmpInfo['totalColumns'] = max($tmpInfo['totalColumns'],$currCells); $tmpInfo['totalColumns'] = max($tmpInfo['totalColumns'], $currCells);
$currCells = 0; $currCells = 0;
// Step into the row // Step into the row
$xml->read(); $xml->read();
@@ -243,14 +235,14 @@ class PHPExcel_Reader_OOCalc extends PHPExcel_Reader_Abstract implements PHPExce
} }
} while ($xml->name != 'table:table'); } while ($xml->name != 'table:table');
$tmpInfo['totalColumns'] = max($tmpInfo['totalColumns'],$currCells); $tmpInfo['totalColumns'] = max($tmpInfo['totalColumns'], $currCells);
$tmpInfo['lastColumnIndex'] = $tmpInfo['totalColumns'] - 1; $tmpInfo['lastColumnIndex'] = $tmpInfo['totalColumns'] - 1;
$tmpInfo['lastColumnLetter'] = PHPExcel_Cell::stringFromColumnIndex($tmpInfo['lastColumnIndex']); $tmpInfo['lastColumnLetter'] = PHPExcel_Cell::stringFromColumnIndex($tmpInfo['lastColumnIndex']);
$worksheetInfo[] = $tmpInfo; $worksheetInfo[] = $tmpInfo;
} }
} }
// foreach($workbookData->table as $worksheetDataSet) { // foreach ($workbookData->table as $worksheetDataSet) {
// $worksheetData = $worksheetDataSet->children($namespacesContent['table']); // $worksheetData = $worksheetDataSet->children($namespacesContent['table']);
// $worksheetDataAttributes = $worksheetDataSet->attributes($namespacesContent['table']); // $worksheetDataAttributes = $worksheetDataSet->attributes($namespacesContent['table']);
// //
@@ -289,7 +281,6 @@ class PHPExcel_Reader_OOCalc extends PHPExcel_Reader_Abstract implements PHPExce
return $worksheetInfo; return $worksheetInfo;
} }
/** /**
* Loads PHPExcel from file * Loads PHPExcel from file
* *
@@ -306,10 +297,10 @@ class PHPExcel_Reader_OOCalc extends PHPExcel_Reader_Abstract implements PHPExce
return $this->loadIntoExisting($pFilename, $objPHPExcel); return $this->loadIntoExisting($pFilename, $objPHPExcel);
} }
private static function identifyFixedStyleValue($styleList, &$styleAttributeValue)
private static function identifyFixedStyleValue($styleList,&$styleAttributeValue) { {
$styleAttributeValue = strtolower($styleAttributeValue); $styleAttributeValue = strtolower($styleAttributeValue);
foreach($styleList as $style) { foreach ($styleList as $style) {
if ($styleAttributeValue == strtolower($style)) { if ($styleAttributeValue == strtolower($style)) {
$styleAttributeValue = $style; $styleAttributeValue = $style;
return true; return true;
@@ -318,7 +309,6 @@ class PHPExcel_Reader_OOCalc extends PHPExcel_Reader_Abstract implements PHPExce
return false; return false;
} }
/** /**
* Loads PHPExcel from file into PHPExcel instance * Loads PHPExcel from file into PHPExcel instance
* *
@@ -345,7 +335,7 @@ class PHPExcel_Reader_OOCalc extends PHPExcel_Reader_Abstract implements PHPExce
} }
// echo '<h1>Meta Information</h1>'; // echo '<h1>Meta Information</h1>';
$xml = simplexml_load_string($zip->getFromName("meta.xml"), 'SimpleXMLElement', PHPExcel_Settings::getLibXmlLoaderOptions()); $xml = simplexml_load_string($this->securityScan($zip->getFromName("meta.xml")), 'SimpleXMLElement', PHPExcel_Settings::getLibXmlLoaderOptions());
$namespacesMeta = $xml->getNamespaces(true); $namespacesMeta = $xml->getNamespaces(true);
// echo '<pre>'; // echo '<pre>';
// print_r($namespacesMeta); // print_r($namespacesMeta);
@@ -353,30 +343,30 @@ class PHPExcel_Reader_OOCalc extends PHPExcel_Reader_Abstract implements PHPExce
$docProps = $objPHPExcel->getProperties(); $docProps = $objPHPExcel->getProperties();
$officeProperty = $xml->children($namespacesMeta['office']); $officeProperty = $xml->children($namespacesMeta['office']);
foreach($officeProperty as $officePropertyData) { foreach ($officeProperty as $officePropertyData) {
$officePropertyDC = array(); $officePropertyDC = array();
if (isset($namespacesMeta['dc'])) { if (isset($namespacesMeta['dc'])) {
$officePropertyDC = $officePropertyData->children($namespacesMeta['dc']); $officePropertyDC = $officePropertyData->children($namespacesMeta['dc']);
} }
foreach($officePropertyDC as $propertyName => $propertyValue) { foreach ($officePropertyDC as $propertyName => $propertyValue) {
$propertyValue = (string) $propertyValue; $propertyValue = (string) $propertyValue;
switch ($propertyName) { switch ($propertyName) {
case 'title' : case 'title':
$docProps->setTitle($propertyValue); $docProps->setTitle($propertyValue);
break; break;
case 'subject' : case 'subject':
$docProps->setSubject($propertyValue); $docProps->setSubject($propertyValue);
break; break;
case 'creator' : case 'creator':
$docProps->setCreator($propertyValue); $docProps->setCreator($propertyValue);
$docProps->setLastModifiedBy($propertyValue); $docProps->setLastModifiedBy($propertyValue);
break; break;
case 'date' : case 'date':
$creationDate = strtotime($propertyValue); $creationDate = strtotime($propertyValue);
$docProps->setCreated($creationDate); $docProps->setCreated($creationDate);
$docProps->setModified($creationDate); $docProps->setModified($creationDate);
break; break;
case 'description' : case 'description':
$docProps->setDescription($propertyValue); $docProps->setDescription($propertyValue);
break; break;
} }
@@ -385,45 +375,45 @@ class PHPExcel_Reader_OOCalc extends PHPExcel_Reader_Abstract implements PHPExce
if (isset($namespacesMeta['dc'])) { if (isset($namespacesMeta['dc'])) {
$officePropertyMeta = $officePropertyData->children($namespacesMeta['meta']); $officePropertyMeta = $officePropertyData->children($namespacesMeta['meta']);
} }
foreach($officePropertyMeta as $propertyName => $propertyValue) { foreach ($officePropertyMeta as $propertyName => $propertyValue) {
$propertyValueAttributes = $propertyValue->attributes($namespacesMeta['meta']); $propertyValueAttributes = $propertyValue->attributes($namespacesMeta['meta']);
$propertyValue = (string) $propertyValue; $propertyValue = (string) $propertyValue;
switch ($propertyName) { switch ($propertyName) {
case 'initial-creator' : case 'initial-creator':
$docProps->setCreator($propertyValue); $docProps->setCreator($propertyValue);
break; break;
case 'keyword' : case 'keyword':
$docProps->setKeywords($propertyValue); $docProps->setKeywords($propertyValue);
break; break;
case 'creation-date' : case 'creation-date':
$creationDate = strtotime($propertyValue); $creationDate = strtotime($propertyValue);
$docProps->setCreated($creationDate); $docProps->setCreated($creationDate);
break; break;
case 'user-defined' : case 'user-defined':
$propertyValueType = PHPExcel_DocumentProperties::PROPERTY_TYPE_STRING; $propertyValueType = PHPExcel_DocumentProperties::PROPERTY_TYPE_STRING;
foreach ($propertyValueAttributes as $key => $value) { foreach ($propertyValueAttributes as $key => $value) {
if ($key == 'name') { if ($key == 'name') {
$propertyValueName = (string) $value; $propertyValueName = (string) $value;
} elseif($key == 'value-type') { } elseif ($key == 'value-type') {
switch ($value) { switch ($value) {
case 'date' : case 'date':
$propertyValue = PHPExcel_DocumentProperties::convertProperty($propertyValue,'date'); $propertyValue = PHPExcel_DocumentProperties::convertProperty($propertyValue, 'date');
$propertyValueType = PHPExcel_DocumentProperties::PROPERTY_TYPE_DATE; $propertyValueType = PHPExcel_DocumentProperties::PROPERTY_TYPE_DATE;
break; break;
case 'boolean' : case 'boolean':
$propertyValue = PHPExcel_DocumentProperties::convertProperty($propertyValue,'bool'); $propertyValue = PHPExcel_DocumentProperties::convertProperty($propertyValue, 'bool');
$propertyValueType = PHPExcel_DocumentProperties::PROPERTY_TYPE_BOOLEAN; $propertyValueType = PHPExcel_DocumentProperties::PROPERTY_TYPE_BOOLEAN;
break; break;
case 'float' : case 'float':
$propertyValue = PHPExcel_DocumentProperties::convertProperty($propertyValue,'r4'); $propertyValue = PHPExcel_DocumentProperties::convertProperty($propertyValue, 'r4');
$propertyValueType = PHPExcel_DocumentProperties::PROPERTY_TYPE_FLOAT; $propertyValueType = PHPExcel_DocumentProperties::PROPERTY_TYPE_FLOAT;
break; break;
default : default:
$propertyValueType = PHPExcel_DocumentProperties::PROPERTY_TYPE_STRING; $propertyValueType = PHPExcel_DocumentProperties::PROPERTY_TYPE_STRING;
} }
} }
} }
$docProps->setCustomProperty($propertyValueName,$propertyValue,$propertyValueType); $docProps->setCustomProperty($propertyValueName, $propertyValue, $propertyValueType);
break; break;
} }
} }
@@ -431,25 +421,25 @@ class PHPExcel_Reader_OOCalc extends PHPExcel_Reader_Abstract implements PHPExce
// echo '<h1>Workbook Content</h1>'; // echo '<h1>Workbook Content</h1>';
$xml = simplexml_load_string($zip->getFromName("content.xml"), 'SimpleXMLElement', PHPExcel_Settings::getLibXmlLoaderOptions()); $xml = simplexml_load_string($this->securityScan($zip->getFromName("content.xml")), 'SimpleXMLElement', PHPExcel_Settings::getLibXmlLoaderOptions());
$namespacesContent = $xml->getNamespaces(true); $namespacesContent = $xml->getNamespaces(true);
// echo '<pre>'; // echo '<pre>';
// print_r($namespacesContent); // print_r($namespacesContent);
// echo '</pre><hr />'; // echo '</pre><hr />';
$workbook = $xml->children($namespacesContent['office']); $workbook = $xml->children($namespacesContent['office']);
foreach($workbook->body->spreadsheet as $workbookData) { foreach ($workbook->body->spreadsheet as $workbookData) {
$workbookData = $workbookData->children($namespacesContent['table']); $workbookData = $workbookData->children($namespacesContent['table']);
$worksheetID = 0; $worksheetID = 0;
foreach($workbookData->table as $worksheetDataSet) { foreach ($workbookData->table as $worksheetDataSet) {
$worksheetData = $worksheetDataSet->children($namespacesContent['table']); $worksheetData = $worksheetDataSet->children($namespacesContent['table']);
// print_r($worksheetData); // print_r($worksheetData);
// echo '<br />'; // echo '<br />';
$worksheetDataAttributes = $worksheetDataSet->attributes($namespacesContent['table']); $worksheetDataAttributes = $worksheetDataSet->attributes($namespacesContent['table']);
// print_r($worksheetDataAttributes); // print_r($worksheetDataAttributes);
// echo '<br />'; // echo '<br />';
if ((isset($this->_loadSheetsOnly)) && (isset($worksheetDataAttributes['name'])) && if ((isset($this->loadSheetsOnly)) && (isset($worksheetDataAttributes['name'])) &&
(!in_array($worksheetDataAttributes['name'], $this->_loadSheetsOnly))) { (!in_array($worksheetDataAttributes['name'], $this->loadSheetsOnly))) {
continue; continue;
} }
@@ -462,34 +452,31 @@ class PHPExcel_Reader_OOCalc extends PHPExcel_Reader_Abstract implements PHPExce
// Use false for $updateFormulaCellReferences to prevent adjustment of worksheet references in // Use false for $updateFormulaCellReferences to prevent adjustment of worksheet references in
// formula cells... during the load, all formulae should be correct, and we're simply // formula cells... during the load, all formulae should be correct, and we're simply
// bringing the worksheet name in line with the formula, not the reverse // bringing the worksheet name in line with the formula, not the reverse
$objPHPExcel->getActiveSheet()->setTitle($worksheetName,false); $objPHPExcel->getActiveSheet()->setTitle($worksheetName, false);
} }
$rowID = 1; $rowID = 1;
foreach($worksheetData as $key => $rowData) { foreach ($worksheetData as $key => $rowData) {
// echo '<b>'.$key.'</b><br />'; // echo '<b>'.$key.'</b><br />';
switch ($key) { switch ($key) {
case 'table-header-rows': case 'table-header-rows':
foreach ($rowData as $key=>$cellData) { foreach ($rowData as $key => $cellData) {
$rowData = $cellData; $rowData = $cellData;
break; break;
} }
case 'table-row' : case 'table-row':
$rowDataTableAttributes = $rowData->attributes($namespacesContent['table']); $rowDataTableAttributes = $rowData->attributes($namespacesContent['table']);
$rowRepeats = (isset($rowDataTableAttributes['number-rows-repeated'])) ? $rowRepeats = (isset($rowDataTableAttributes['number-rows-repeated'])) ? $rowDataTableAttributes['number-rows-repeated'] : 1;
$rowDataTableAttributes['number-rows-repeated'] : 1;
$columnID = 'A'; $columnID = 'A';
foreach($rowData as $key => $cellData) { foreach ($rowData as $key => $cellData) {
if ($this->getReadFilter() !== NULL) { if ($this->getReadFilter() !== null) {
if (!$this->getReadFilter()->readCell($columnID, $rowID, $worksheetName)) { if (!$this->getReadFilter()->readCell($columnID, $rowID, $worksheetName)) {
continue; continue;
} }
} }
// echo '<b>'.$columnID.$rowID.'</b><br />'; // echo '<b>'.$columnID.$rowID.'</b><br />';
$cellDataText = (isset($namespacesContent['text'])) ? $cellDataText = (isset($namespacesContent['text'])) ? $cellData->children($namespacesContent['text']) : '';
$cellData->children($namespacesContent['text']) :
'';
$cellDataOffice = $cellData->children($namespacesContent['office']); $cellDataOffice = $cellData->children($namespacesContent['office']);
$cellDataOfficeAttributes = $cellData->attributes($namespacesContent['office']); $cellDataOfficeAttributes = $cellData->attributes($namespacesContent['office']);
$cellDataTableAttributes = $cellData->attributes($namespacesContent['table']); $cellDataTableAttributes = $cellData->attributes($namespacesContent['table']);
@@ -514,16 +501,19 @@ class PHPExcel_Reader_OOCalc extends PHPExcel_Reader_Abstract implements PHPExce
// echo 'Cell has comment<br />'; // echo 'Cell has comment<br />';
$annotationText = $cellDataOffice->annotation->children($namespacesContent['text']); $annotationText = $cellDataOffice->annotation->children($namespacesContent['text']);
$textArray = array(); $textArray = array();
foreach($annotationText as $t) { foreach ($annotationText as $t) {
foreach($t->span as $text) { if (isset($t->span)) {
foreach ($t->span as $text) {
$textArray[] = (string)$text; $textArray[] = (string)$text;
} }
} else {
$textArray[] = (string) $t;
} }
$text = implode("\n",$textArray); }
// echo $text,'<br />'; $text = implode("\n", $textArray);
$objPHPExcel->getActiveSheet()->getComment( $columnID.$rowID ) // echo $text, '<br />';
$objPHPExcel->getActiveSheet()->getComment($columnID.$rowID)->setText($this->parseRichText($text));
// ->setAuthor( $author ) // ->setAuthor( $author )
->setText($this->_parseRichText($text) );
} }
if (isset($cellDataText->p)) { if (isset($cellDataText->p)) {
@@ -549,7 +539,7 @@ class PHPExcel_Reader_OOCalc extends PHPExcel_Reader_Abstract implements PHPExce
// echo 'Value Type is '.$cellDataOfficeAttributes['value-type'].'<br />'; // echo 'Value Type is '.$cellDataOfficeAttributes['value-type'].'<br />';
switch ($cellDataOfficeAttributes['value-type']) { switch ($cellDataOfficeAttributes['value-type']) {
case 'string' : case 'string':
$type = PHPExcel_Cell_DataType::TYPE_STRING; $type = PHPExcel_Cell_DataType::TYPE_STRING;
$dataValue = $allCellDataText; $dataValue = $allCellDataText;
if (isset($dataValue->a)) { if (isset($dataValue->a)) {
@@ -558,11 +548,11 @@ class PHPExcel_Reader_OOCalc extends PHPExcel_Reader_Abstract implements PHPExce
$hyperlink = $cellXLinkAttributes['href']; $hyperlink = $cellXLinkAttributes['href'];
} }
break; break;
case 'boolean' : case 'boolean':
$type = PHPExcel_Cell_DataType::TYPE_BOOL; $type = PHPExcel_Cell_DataType::TYPE_BOOL;
$dataValue = ($allCellDataText == 'TRUE') ? True : False; $dataValue = ($allCellDataText == 'TRUE') ? true : false;
break; break;
case 'percentage' : case 'percentage':
$type = PHPExcel_Cell_DataType::TYPE_NUMERIC; $type = PHPExcel_Cell_DataType::TYPE_NUMERIC;
$dataValue = (float) $cellDataOfficeAttributes['value']; $dataValue = (float) $cellDataOfficeAttributes['value'];
if (floor($dataValue) == $dataValue) { if (floor($dataValue) == $dataValue) {
@@ -570,7 +560,7 @@ class PHPExcel_Reader_OOCalc extends PHPExcel_Reader_Abstract implements PHPExce
} }
$formatting = PHPExcel_Style_NumberFormat::FORMAT_PERCENTAGE_00; $formatting = PHPExcel_Style_NumberFormat::FORMAT_PERCENTAGE_00;
break; break;
case 'currency' : case 'currency':
$type = PHPExcel_Cell_DataType::TYPE_NUMERIC; $type = PHPExcel_Cell_DataType::TYPE_NUMERIC;
$dataValue = (float) $cellDataOfficeAttributes['value']; $dataValue = (float) $cellDataOfficeAttributes['value'];
if (floor($dataValue) == $dataValue) { if (floor($dataValue) == $dataValue) {
@@ -578,68 +568,68 @@ class PHPExcel_Reader_OOCalc extends PHPExcel_Reader_Abstract implements PHPExce
} }
$formatting = PHPExcel_Style_NumberFormat::FORMAT_CURRENCY_USD_SIMPLE; $formatting = PHPExcel_Style_NumberFormat::FORMAT_CURRENCY_USD_SIMPLE;
break; break;
case 'float' : case 'float':
$type = PHPExcel_Cell_DataType::TYPE_NUMERIC; $type = PHPExcel_Cell_DataType::TYPE_NUMERIC;
$dataValue = (float) $cellDataOfficeAttributes['value']; $dataValue = (float) $cellDataOfficeAttributes['value'];
if (floor($dataValue) == $dataValue) { if (floor($dataValue) == $dataValue) {
if ($dataValue == (integer) $dataValue) if ($dataValue == (integer) $dataValue) {
$dataValue = (integer) $dataValue; $dataValue = (integer) $dataValue;
else } else {
$dataValue = (float) $dataValue; $dataValue = (float) $dataValue;
} }
}
break; break;
case 'date' : case 'date':
$type = PHPExcel_Cell_DataType::TYPE_NUMERIC; $type = PHPExcel_Cell_DataType::TYPE_NUMERIC;
$dateObj = new DateTime($cellDataOfficeAttributes['date-value'], $GMT); $dateObj = new DateTime($cellDataOfficeAttributes['date-value'], $GMT);
$dateObj->setTimeZone($timezoneObj); $dateObj->setTimeZone($timezoneObj);
list($year,$month,$day,$hour,$minute,$second) = explode(' ',$dateObj->format('Y m d H i s')); list($year, $month, $day, $hour, $minute, $second) = explode(' ', $dateObj->format('Y m d H i s'));
$dataValue = PHPExcel_Shared_Date::FormattedPHPToExcel($year,$month,$day,$hour,$minute,$second); $dataValue = PHPExcel_Shared_Date::FormattedPHPToExcel($year, $month, $day, $hour, $minute, $second);
if ($dataValue != floor($dataValue)) { if ($dataValue != floor($dataValue)) {
$formatting = PHPExcel_Style_NumberFormat::FORMAT_DATE_XLSX15.' '.PHPExcel_Style_NumberFormat::FORMAT_DATE_TIME4; $formatting = PHPExcel_Style_NumberFormat::FORMAT_DATE_XLSX15.' '.PHPExcel_Style_NumberFormat::FORMAT_DATE_TIME4;
} else { } else {
$formatting = PHPExcel_Style_NumberFormat::FORMAT_DATE_XLSX15; $formatting = PHPExcel_Style_NumberFormat::FORMAT_DATE_XLSX15;
} }
break; break;
case 'time' : case 'time':
$type = PHPExcel_Cell_DataType::TYPE_NUMERIC; $type = PHPExcel_Cell_DataType::TYPE_NUMERIC;
$dataValue = PHPExcel_Shared_Date::PHPToExcel(strtotime('01-01-1970 '.implode(':',sscanf($cellDataOfficeAttributes['time-value'],'PT%dH%dM%dS')))); $dataValue = PHPExcel_Shared_Date::PHPToExcel(strtotime('01-01-1970 '.implode(':', sscanf($cellDataOfficeAttributes['time-value'], 'PT%dH%dM%dS'))));
$formatting = PHPExcel_Style_NumberFormat::FORMAT_DATE_TIME4; $formatting = PHPExcel_Style_NumberFormat::FORMAT_DATE_TIME4;
break; break;
} }
// echo 'Data value is '.$dataValue.'<br />'; // echo 'Data value is '.$dataValue.'<br />';
// if ($hyperlink !== NULL) { // if ($hyperlink !== null) {
// echo 'Hyperlink is '.$hyperlink.'<br />'; // echo 'Hyperlink is '.$hyperlink.'<br />';
// } // }
} else { } else {
$type = PHPExcel_Cell_DataType::TYPE_NULL; $type = PHPExcel_Cell_DataType::TYPE_NULL;
$dataValue = NULL; $dataValue = null;
} }
if ($hasCalculatedValue) { if ($hasCalculatedValue) {
$type = PHPExcel_Cell_DataType::TYPE_FORMULA; $type = PHPExcel_Cell_DataType::TYPE_FORMULA;
// echo 'Formula: ', $cellDataFormula, PHP_EOL; // echo 'Formula: ', $cellDataFormula, PHP_EOL;
$cellDataFormula = substr($cellDataFormula,strpos($cellDataFormula,':=')+1); $cellDataFormula = substr($cellDataFormula, strpos($cellDataFormula, ':=')+1);
$temp = explode('"',$cellDataFormula); $temp = explode('"', $cellDataFormula);
$tKey = false; $tKey = false;
foreach($temp as &$value) { foreach ($temp as &$value) {
// Only replace in alternate array entries (i.e. non-quoted blocks) // Only replace in alternate array entries (i.e. non-quoted blocks)
if ($tKey = !$tKey) { if ($tKey = !$tKey) {
$value = preg_replace('/\[([^\.]+)\.([^\.]+):\.([^\.]+)\]/Ui','$1!$2:$3',$value); // Cell range reference in another sheet $value = preg_replace('/\[([^\.]+)\.([^\.]+):\.([^\.]+)\]/Ui', '$1!$2:$3', $value); // Cell range reference in another sheet
$value = preg_replace('/\[([^\.]+)\.([^\.]+)\]/Ui','$1!$2',$value); // Cell reference in another sheet $value = preg_replace('/\[([^\.]+)\.([^\.]+)\]/Ui', '$1!$2', $value); // Cell reference in another sheet
$value = preg_replace('/\[\.([^\.]+):\.([^\.]+)\]/Ui','$1:$2',$value); // Cell range reference $value = preg_replace('/\[\.([^\.]+):\.([^\.]+)\]/Ui', '$1:$2', $value); // Cell range reference
$value = preg_replace('/\[\.([^\.]+)\]/Ui','$1',$value); // Simple cell reference $value = preg_replace('/\[\.([^\.]+)\]/Ui', '$1', $value); // Simple cell reference
$value = PHPExcel_Calculation::_translateSeparator(';',',',$value,$inBraces); $value = PHPExcel_Calculation::translateSeparator(';', ',', $value, $inBraces);
} }
} }
unset($value); unset($value);
// Then rebuild the formula string // Then rebuild the formula string
$cellDataFormula = implode('"',$temp); $cellDataFormula = implode('"', $temp);
// echo 'Adjusted Formula: ', $cellDataFormula, PHP_EOL; // echo 'Adjusted Formula: ', $cellDataFormula, PHP_EOL;
} }
$colRepeats = (isset($cellDataTableAttributes['number-columns-repeated'])) ? $colRepeats = (isset($cellDataTableAttributes['number-columns-repeated'])) ? $cellDataTableAttributes['number-columns-repeated'] : 1;
$cellDataTableAttributes['number-columns-repeated'] : 1; if ($type !== null) {
if ($type !== NULL) {
for ($i = 0; $i < $colRepeats; ++$i) { for ($i = 0; $i < $colRepeats; ++$i) {
if ($i > 0) { if ($i > 0) {
++$columnID; ++$columnID;
@@ -647,17 +637,17 @@ class PHPExcel_Reader_OOCalc extends PHPExcel_Reader_Abstract implements PHPExce
if ($type !== PHPExcel_Cell_DataType::TYPE_NULL) { if ($type !== PHPExcel_Cell_DataType::TYPE_NULL) {
for ($rowAdjust = 0; $rowAdjust < $rowRepeats; ++$rowAdjust) { for ($rowAdjust = 0; $rowAdjust < $rowRepeats; ++$rowAdjust) {
$rID = $rowID + $rowAdjust; $rID = $rowID + $rowAdjust;
$objPHPExcel->getActiveSheet()->getCell($columnID.$rID)->setValueExplicit((($hasCalculatedValue) ? $cellDataFormula : $dataValue),$type); $objPHPExcel->getActiveSheet()->getCell($columnID.$rID)->setValueExplicit((($hasCalculatedValue) ? $cellDataFormula : $dataValue), $type);
if ($hasCalculatedValue) { if ($hasCalculatedValue) {
// echo 'Forumla result is '.$dataValue.'<br />'; // echo 'Forumla result is '.$dataValue.'<br />';
$objPHPExcel->getActiveSheet()->getCell($columnID.$rID)->setCalculatedValue($dataValue); $objPHPExcel->getActiveSheet()->getCell($columnID.$rID)->setCalculatedValue($dataValue);
} }
if ($formatting !== NULL) { if ($formatting !== null) {
$objPHPExcel->getActiveSheet()->getStyle($columnID.$rID)->getNumberFormat()->setFormatCode($formatting); $objPHPExcel->getActiveSheet()->getStyle($columnID.$rID)->getNumberFormat()->setFormatCode($formatting);
} else { } else {
$objPHPExcel->getActiveSheet()->getStyle($columnID.$rID)->getNumberFormat()->setFormatCode(PHPExcel_Style_NumberFormat::FORMAT_GENERAL); $objPHPExcel->getActiveSheet()->getStyle($columnID.$rID)->getNumberFormat()->setFormatCode(PHPExcel_Style_NumberFormat::FORMAT_GENERAL);
} }
if ($hyperlink !== NULL) { if ($hyperlink !== null) {
$objPHPExcel->getActiveSheet()->getCell($columnID.$rID)->getHyperlink()->setUrl($hyperlink); $objPHPExcel->getActiveSheet()->getCell($columnID.$rID)->getHyperlink()->setUrl($hyperlink);
} }
} }
@@ -667,7 +657,7 @@ class PHPExcel_Reader_OOCalc extends PHPExcel_Reader_Abstract implements PHPExce
// Merged cells // Merged cells
if ((isset($cellDataTableAttributes['number-columns-spanned'])) || (isset($cellDataTableAttributes['number-rows-spanned']))) { if ((isset($cellDataTableAttributes['number-columns-spanned'])) || (isset($cellDataTableAttributes['number-rows-spanned']))) {
if (($type !== PHPExcel_Cell_DataType::TYPE_NULL) || (!$this->_readDataOnly)) { if (($type !== PHPExcel_Cell_DataType::TYPE_NULL) || (!$this->readDataOnly)) {
$columnTo = $columnID; $columnTo = $columnID;
if (isset($cellDataTableAttributes['number-columns-spanned'])) { if (isset($cellDataTableAttributes['number-columns-spanned'])) {
$columnTo = PHPExcel_Cell::stringFromColumnIndex(PHPExcel_Cell::columnIndexFromString($columnID) + $cellDataTableAttributes['number-columns-spanned'] -2); $columnTo = PHPExcel_Cell::stringFromColumnIndex(PHPExcel_Cell::columnIndexFromString($columnID) + $cellDataTableAttributes['number-columns-spanned'] -2);
@@ -695,13 +685,12 @@ class PHPExcel_Reader_OOCalc extends PHPExcel_Reader_Abstract implements PHPExce
return $objPHPExcel; return $objPHPExcel;
} }
private function parseRichText($is = '')
private function _parseRichText($is = '') { {
$value = new PHPExcel_RichText(); $value = new PHPExcel_RichText();
$value->createText($is); $value->createText($is);
return $value; return $value;
} }
} }

View File

@@ -1,8 +1,18 @@
<?php <?php
/** PHPExcel root directory */
if (!defined('PHPEXCEL_ROOT')) {
/**
* @ignore
*/
define('PHPEXCEL_ROOT', dirname(__FILE__) . '/../../');
require(PHPEXCEL_ROOT . 'PHPExcel/Autoloader.php');
}
/** /**
* PHPExcel * PHPExcel_Reader_SYLK
* *
* Copyright (c) 2006 - 2014 PHPExcel * Copyright (c) 2006 - 2015 PHPExcel
* *
* This library is free software; you can redistribute it and/or * This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public * modify it under the terms of the GNU Lesser General Public
@@ -20,27 +30,9 @@
* *
* @category PHPExcel * @category PHPExcel
* @package PHPExcel_Reader * @package PHPExcel_Reader
* @copyright Copyright (c) 2006 - 2014 PHPExcel (http://www.codeplex.com/PHPExcel) * @copyright Copyright (c) 2006 - 2015 PHPExcel (http://www.codeplex.com/PHPExcel)
* @license http://www.gnu.org/licenses/old-licenses/lgpl-2.1.txt LGPL * @license http://www.gnu.org/licenses/old-licenses/lgpl-2.1.txt LGPL
* @version 1.8.0, 2014-03-02 * @version ##VERSION##, ##DATE##
*/
/** PHPExcel root directory */
if (!defined('PHPEXCEL_ROOT')) {
/**
* @ignore
*/
define('PHPEXCEL_ROOT', dirname(__FILE__) . '/../../');
require(PHPEXCEL_ROOT . 'PHPExcel/Autoloader.php');
}
/**
* PHPExcel_Reader_SYLK
*
* @category PHPExcel
* @package PHPExcel_Reader
* @copyright Copyright (c) 2006 - 2014 PHPExcel (http://www.codeplex.com/PHPExcel)
*/ */
class PHPExcel_Reader_SYLK extends PHPExcel_Reader_Abstract implements PHPExcel_Reader_IReader class PHPExcel_Reader_SYLK extends PHPExcel_Reader_Abstract implements PHPExcel_Reader_IReader
{ {
@@ -49,34 +41,35 @@ class PHPExcel_Reader_SYLK extends PHPExcel_Reader_Abstract implements PHPExcel_
* *
* @var string * @var string
*/ */
private $_inputEncoding = 'ANSI'; private $inputEncoding = 'ANSI';
/** /**
* Sheet index to read * Sheet index to read
* *
* @var int * @var int
*/ */
private $_sheetIndex = 0; private $sheetIndex = 0;
/** /**
* Formats * Formats
* *
* @var array * @var array
*/ */
private $_formats = array(); private $formats = array();
/** /**
* Format Count * Format Count
* *
* @var int * @var int
*/ */
private $_format = 0; private $format = 0;
/** /**
* Create a new PHPExcel_Reader_SYLK * Create a new PHPExcel_Reader_SYLK
*/ */
public function __construct() { public function __construct()
$this->_readFilter = new PHPExcel_Reader_DefaultReadFilter(); {
$this->readFilter = new PHPExcel_Reader_DefaultReadFilter();
} }
/** /**
@@ -84,24 +77,24 @@ class PHPExcel_Reader_SYLK extends PHPExcel_Reader_Abstract implements PHPExcel_
* *
* @return boolean * @return boolean
*/ */
protected function _isValidFormat() protected function isValidFormat()
{ {
// Read sample data (first 2 KB will do) // Read sample data (first 2 KB will do)
$data = fread($this->_fileHandle, 2048); $data = fread($this->fileHandle, 2048);
// Count delimiters in file // Count delimiters in file
$delimiterCount = substr_count($data, ';'); $delimiterCount = substr_count($data, ';');
if ($delimiterCount < 1) { if ($delimiterCount < 1) {
return FALSE; return false;
} }
// Analyze first line looking for ID; signature // Analyze first line looking for ID; signature
$lines = explode("\n", $data); $lines = explode("\n", $data);
if (substr($lines[0],0,4) != 'ID;P') { if (substr($lines[0], 0, 4) != 'ID;P') {
return FALSE; return false;
} }
return TRUE; return true;
} }
/** /**
@@ -111,7 +104,7 @@ class PHPExcel_Reader_SYLK extends PHPExcel_Reader_Abstract implements PHPExcel_
*/ */
public function setInputEncoding($pValue = 'ANSI') public function setInputEncoding($pValue = 'ANSI')
{ {
$this->_inputEncoding = $pValue; $this->inputEncoding = $pValue;
return $this; return $this;
} }
@@ -122,7 +115,7 @@ class PHPExcel_Reader_SYLK extends PHPExcel_Reader_Abstract implements PHPExcel_
*/ */
public function getInputEncoding() public function getInputEncoding()
{ {
return $this->_inputEncoding; return $this->inputEncoding;
} }
/** /**
@@ -134,12 +127,12 @@ class PHPExcel_Reader_SYLK extends PHPExcel_Reader_Abstract implements PHPExcel_
public function listWorksheetInfo($pFilename) public function listWorksheetInfo($pFilename)
{ {
// Open file // Open file
$this->_openFile($pFilename); $this->openFile($pFilename);
if (!$this->_isValidFormat()) { if (!$this->isValidFormat()) {
fclose ($this->_fileHandle); fclose($this->fileHandle);
throw new PHPExcel_Reader_Exception($pFilename . " is an Invalid Spreadsheet file."); throw new PHPExcel_Reader_Exception($pFilename . " is an Invalid Spreadsheet file.");
} }
$fileHandle = $this->_fileHandle; $fileHandle = $this->fileHandle;
rewind($fileHandle); rewind($fileHandle);
$worksheetInfo = array(); $worksheetInfo = array();
@@ -154,7 +147,7 @@ class PHPExcel_Reader_SYLK extends PHPExcel_Reader_Abstract implements PHPExcel_
// loop through one row (line) at a time in the file // loop through one row (line) at a time in the file
$rowIndex = 0; $rowIndex = 0;
while (($rowData = fgets($fileHandle)) !== FALSE) { while (($rowData = fgets($fileHandle)) !== false) {
$columnIndex = 0; $columnIndex = 0;
// convert SYLK encoded $rowData to UTF-8 // convert SYLK encoded $rowData to UTF-8
@@ -162,20 +155,20 @@ class PHPExcel_Reader_SYLK extends PHPExcel_Reader_Abstract implements PHPExcel_
// explode each row at semicolons while taking into account that literal semicolon (;) // explode each row at semicolons while taking into account that literal semicolon (;)
// is escaped like this (;;) // is escaped like this (;;)
$rowData = explode("\t",str_replace('¤',';',str_replace(';',"\t",str_replace(';;','¤',rtrim($rowData))))); $rowData = explode("\t", str_replace('¤', ';', str_replace(';', "\t", str_replace(';;', '¤', rtrim($rowData)))));
$dataType = array_shift($rowData); $dataType = array_shift($rowData);
if ($dataType == 'C') { if ($dataType == 'C') {
// Read cell value data // Read cell value data
foreach($rowData as $rowDatum) { foreach ($rowData as $rowDatum) {
switch($rowDatum{0}) { switch ($rowDatum{0}) {
case 'C' : case 'C':
case 'X' : case 'X':
$columnIndex = substr($rowDatum,1) - 1; $columnIndex = substr($rowDatum, 1) - 1;
break; break;
case 'R' : case 'R':
case 'Y' : case 'Y':
$rowIndex = substr($rowDatum,1); $rowIndex = substr($rowDatum, 1);
break; break;
} }
@@ -221,19 +214,19 @@ class PHPExcel_Reader_SYLK extends PHPExcel_Reader_Abstract implements PHPExcel_
public function loadIntoExisting($pFilename, PHPExcel $objPHPExcel) public function loadIntoExisting($pFilename, PHPExcel $objPHPExcel)
{ {
// Open file // Open file
$this->_openFile($pFilename); $this->openFile($pFilename);
if (!$this->_isValidFormat()) { if (!$this->isValidFormat()) {
fclose ($this->_fileHandle); fclose($this->fileHandle);
throw new PHPExcel_Reader_Exception($pFilename . " is an Invalid Spreadsheet file."); throw new PHPExcel_Reader_Exception($pFilename . " is an Invalid Spreadsheet file.");
} }
$fileHandle = $this->_fileHandle; $fileHandle = $this->fileHandle;
rewind($fileHandle); rewind($fileHandle);
// Create new PHPExcel // Create new PHPExcel
while ($objPHPExcel->getSheetCount() <= $this->_sheetIndex) { while ($objPHPExcel->getSheetCount() <= $this->sheetIndex) {
$objPHPExcel->createSheet(); $objPHPExcel->createSheet();
} }
$objPHPExcel->setActiveSheetIndex( $this->_sheetIndex ); $objPHPExcel->setActiveSheetIndex($this->sheetIndex);
$fromFormats = array('\-', '\ '); $fromFormats = array('\-', '\ ');
$toFormats = array('-', ' '); $toFormats = array('-', ' ');
@@ -243,140 +236,172 @@ class PHPExcel_Reader_SYLK extends PHPExcel_Reader_Abstract implements PHPExcel_
$column = $row = ''; $column = $row = '';
// loop through one row (line) at a time in the file // loop through one row (line) at a time in the file
while (($rowData = fgets($fileHandle)) !== FALSE) { while (($rowData = fgets($fileHandle)) !== false) {
// convert SYLK encoded $rowData to UTF-8 // convert SYLK encoded $rowData to UTF-8
$rowData = PHPExcel_Shared_String::SYLKtoUTF8($rowData); $rowData = PHPExcel_Shared_String::SYLKtoUTF8($rowData);
// explode each row at semicolons while taking into account that literal semicolon (;) // explode each row at semicolons while taking into account that literal semicolon (;)
// is escaped like this (;;) // is escaped like this (;;)
$rowData = explode("\t",str_replace('¤',';',str_replace(';',"\t",str_replace(';;','¤',rtrim($rowData))))); $rowData = explode("\t", str_replace('¤', ';', str_replace(';', "\t", str_replace(';;', '¤', rtrim($rowData)))));
$dataType = array_shift($rowData); $dataType = array_shift($rowData);
// Read shared styles // Read shared styles
if ($dataType == 'P') { if ($dataType == 'P') {
$formatArray = array(); $formatArray = array();
foreach($rowData as $rowDatum) { foreach ($rowData as $rowDatum) {
switch($rowDatum{0}) { switch ($rowDatum{0}) {
case 'P' : $formatArray['numberformat']['code'] = str_replace($fromFormats,$toFormats,substr($rowDatum,1)); case 'P':
$formatArray['numberformat']['code'] = str_replace($fromFormats, $toFormats, substr($rowDatum, 1));
break; break;
case 'E' : case 'E':
case 'F' : $formatArray['font']['name'] = substr($rowDatum,1); case 'F':
$formatArray['font']['name'] = substr($rowDatum, 1);
break; break;
case 'L' : $formatArray['font']['size'] = substr($rowDatum,1); case 'L':
$formatArray['font']['size'] = substr($rowDatum, 1);
break; break;
case 'S' : $styleSettings = substr($rowDatum,1); case 'S':
for ($i=0;$i<strlen($styleSettings);++$i) { $styleSettings = substr($rowDatum, 1);
for ($i=0; $i<strlen($styleSettings); ++$i) {
switch ($styleSettings{$i}) { switch ($styleSettings{$i}) {
case 'I' : $formatArray['font']['italic'] = true; case 'I':
$formatArray['font']['italic'] = true;
break; break;
case 'D' : $formatArray['font']['bold'] = true; case 'D':
$formatArray['font']['bold'] = true;
break; break;
case 'T' : $formatArray['borders']['top']['style'] = PHPExcel_Style_Border::BORDER_THIN; case 'T':
$formatArray['borders']['top']['style'] = PHPExcel_Style_Border::BORDER_THIN;
break; break;
case 'B' : $formatArray['borders']['bottom']['style'] = PHPExcel_Style_Border::BORDER_THIN; case 'B':
$formatArray['borders']['bottom']['style'] = PHPExcel_Style_Border::BORDER_THIN;
break; break;
case 'L' : $formatArray['borders']['left']['style'] = PHPExcel_Style_Border::BORDER_THIN; case 'L':
$formatArray['borders']['left']['style'] = PHPExcel_Style_Border::BORDER_THIN;
break; break;
case 'R' : $formatArray['borders']['right']['style'] = PHPExcel_Style_Border::BORDER_THIN; case 'R':
$formatArray['borders']['right']['style'] = PHPExcel_Style_Border::BORDER_THIN;
break; break;
} }
} }
break; break;
} }
} }
$this->_formats['P'.$this->_format++] = $formatArray; $this->formats['P'.$this->format++] = $formatArray;
// Read cell value data // Read cell value data
} elseif ($dataType == 'C') { } elseif ($dataType == 'C') {
$hasCalculatedValue = false; $hasCalculatedValue = false;
$cellData = $cellDataFormula = ''; $cellData = $cellDataFormula = '';
foreach($rowData as $rowDatum) { foreach ($rowData as $rowDatum) {
switch($rowDatum{0}) { switch ($rowDatum{0}) {
case 'C' : case 'C':
case 'X' : $column = substr($rowDatum,1); case 'X':
$column = substr($rowDatum, 1);
break; break;
case 'R' : case 'R':
case 'Y' : $row = substr($rowDatum,1); case 'Y':
$row = substr($rowDatum, 1);
break; break;
case 'K' : $cellData = substr($rowDatum,1); case 'K':
$cellData = substr($rowDatum, 1);
break; break;
case 'E' : $cellDataFormula = '='.substr($rowDatum,1); case 'E':
$cellDataFormula = '='.substr($rowDatum, 1);
// Convert R1C1 style references to A1 style references (but only when not quoted) // Convert R1C1 style references to A1 style references (but only when not quoted)
$temp = explode('"',$cellDataFormula); $temp = explode('"', $cellDataFormula);
$key = false; $key = false;
foreach($temp as &$value) { foreach ($temp as &$value) {
// Only count/replace in alternate array entries // Only count/replace in alternate array entries
if ($key = !$key) { if ($key = !$key) {
preg_match_all('/(R(\[?-?\d*\]?))(C(\[?-?\d*\]?))/',$value, $cellReferences,PREG_SET_ORDER+PREG_OFFSET_CAPTURE); preg_match_all('/(R(\[?-?\d*\]?))(C(\[?-?\d*\]?))/', $value, $cellReferences, PREG_SET_ORDER+PREG_OFFSET_CAPTURE);
// Reverse the matches array, otherwise all our offsets will become incorrect if we modify our way // Reverse the matches array, otherwise all our offsets will become incorrect if we modify our way
// through the formula from left to right. Reversing means that we work right to left.through // through the formula from left to right. Reversing means that we work right to left.through
// the formula // the formula
$cellReferences = array_reverse($cellReferences); $cellReferences = array_reverse($cellReferences);
// Loop through each R1C1 style reference in turn, converting it to its A1 style equivalent, // Loop through each R1C1 style reference in turn, converting it to its A1 style equivalent,
// then modify the formula to use that new reference // then modify the formula to use that new reference
foreach($cellReferences as $cellReference) { foreach ($cellReferences as $cellReference) {
$rowReference = $cellReference[2][0]; $rowReference = $cellReference[2][0];
// Empty R reference is the current row // Empty R reference is the current row
if ($rowReference == '') $rowReference = $row; if ($rowReference == '') {
$rowReference = $row;
}
// Bracketed R references are relative to the current row // Bracketed R references are relative to the current row
if ($rowReference{0} == '[') $rowReference = $row + trim($rowReference,'[]'); if ($rowReference{0} == '[') {
$rowReference = $row + trim($rowReference, '[]');
}
$columnReference = $cellReference[4][0]; $columnReference = $cellReference[4][0];
// Empty C reference is the current column // Empty C reference is the current column
if ($columnReference == '') $columnReference = $column; if ($columnReference == '') {
$columnReference = $column;
}
// Bracketed C references are relative to the current column // Bracketed C references are relative to the current column
if ($columnReference{0} == '[') $columnReference = $column + trim($columnReference,'[]'); if ($columnReference{0} == '[') {
$columnReference = $column + trim($columnReference, '[]');
}
$A1CellReference = PHPExcel_Cell::stringFromColumnIndex($columnReference-1).$rowReference; $A1CellReference = PHPExcel_Cell::stringFromColumnIndex($columnReference-1).$rowReference;
$value = substr_replace($value,$A1CellReference,$cellReference[0][1],strlen($cellReference[0][0])); $value = substr_replace($value, $A1CellReference, $cellReference[0][1], strlen($cellReference[0][0]));
} }
} }
} }
unset($value); unset($value);
// Then rebuild the formula string // Then rebuild the formula string
$cellDataFormula = implode('"',$temp); $cellDataFormula = implode('"', $temp);
$hasCalculatedValue = true; $hasCalculatedValue = true;
break; break;
} }
} }
$columnLetter = PHPExcel_Cell::stringFromColumnIndex($column-1); $columnLetter = PHPExcel_Cell::stringFromColumnIndex($column-1);
$cellData = PHPExcel_Calculation::_unwrapResult($cellData); $cellData = PHPExcel_Calculation::unwrapResult($cellData);
// Set cell value // Set cell value
$objPHPExcel->getActiveSheet()->getCell($columnLetter.$row)->setValue(($hasCalculatedValue) ? $cellDataFormula : $cellData); $objPHPExcel->getActiveSheet()->getCell($columnLetter.$row)->setValue(($hasCalculatedValue) ? $cellDataFormula : $cellData);
if ($hasCalculatedValue) { if ($hasCalculatedValue) {
$cellData = PHPExcel_Calculation::_unwrapResult($cellData); $cellData = PHPExcel_Calculation::unwrapResult($cellData);
$objPHPExcel->getActiveSheet()->getCell($columnLetter.$row)->setCalculatedValue($cellData); $objPHPExcel->getActiveSheet()->getCell($columnLetter.$row)->setCalculatedValue($cellData);
} }
// Read cell formatting // Read cell formatting
} elseif ($dataType == 'F') { } elseif ($dataType == 'F') {
$formatStyle = $columnWidth = $styleSettings = ''; $formatStyle = $columnWidth = $styleSettings = '';
$styleData = array(); $styleData = array();
foreach($rowData as $rowDatum) { foreach ($rowData as $rowDatum) {
switch($rowDatum{0}) { switch ($rowDatum{0}) {
case 'C' : case 'C':
case 'X' : $column = substr($rowDatum,1); case 'X':
$column = substr($rowDatum, 1);
break; break;
case 'R' : case 'R':
case 'Y' : $row = substr($rowDatum,1); case 'Y':
$row = substr($rowDatum, 1);
break; break;
case 'P' : $formatStyle = $rowDatum; case 'P':
$formatStyle = $rowDatum;
break; break;
case 'W' : list($startCol,$endCol,$columnWidth) = explode(' ',substr($rowDatum,1)); case 'W':
list($startCol, $endCol, $columnWidth) = explode(' ', substr($rowDatum, 1));
break; break;
case 'S' : $styleSettings = substr($rowDatum,1); case 'S':
for ($i=0;$i<strlen($styleSettings);++$i) { $styleSettings = substr($rowDatum, 1);
for ($i=0; $i<strlen($styleSettings); ++$i) {
switch ($styleSettings{$i}) { switch ($styleSettings{$i}) {
case 'I' : $styleData['font']['italic'] = true; case 'I':
$styleData['font']['italic'] = true;
break; break;
case 'D' : $styleData['font']['bold'] = true; case 'D':
$styleData['font']['bold'] = true;
break; break;
case 'T' : $styleData['borders']['top']['style'] = PHPExcel_Style_Border::BORDER_THIN; case 'T':
$styleData['borders']['top']['style'] = PHPExcel_Style_Border::BORDER_THIN;
break; break;
case 'B' : $styleData['borders']['bottom']['style'] = PHPExcel_Style_Border::BORDER_THIN; case 'B':
$styleData['borders']['bottom']['style'] = PHPExcel_Style_Border::BORDER_THIN;
break; break;
case 'L' : $styleData['borders']['left']['style'] = PHPExcel_Style_Border::BORDER_THIN; case 'L':
$styleData['borders']['left']['style'] = PHPExcel_Style_Border::BORDER_THIN;
break; break;
case 'R' : $styleData['borders']['right']['style'] = PHPExcel_Style_Border::BORDER_THIN; case 'R':
$styleData['borders']['right']['style'] = PHPExcel_Style_Border::BORDER_THIN;
break; break;
} }
} }
@@ -385,8 +410,8 @@ class PHPExcel_Reader_SYLK extends PHPExcel_Reader_Abstract implements PHPExcel_
} }
if (($formatStyle > '') && ($column > '') && ($row > '')) { if (($formatStyle > '') && ($column > '') && ($row > '')) {
$columnLetter = PHPExcel_Cell::stringFromColumnIndex($column-1); $columnLetter = PHPExcel_Cell::stringFromColumnIndex($column-1);
if (isset($this->_formats[$formatStyle])) { if (isset($this->formats[$formatStyle])) {
$objPHPExcel->getActiveSheet()->getStyle($columnLetter.$row)->applyFromArray($this->_formats[$formatStyle]); $objPHPExcel->getActiveSheet()->getStyle($columnLetter.$row)->applyFromArray($this->formats[$formatStyle]);
} }
} }
if ((!empty($styleData)) && ($column > '') && ($row > '')) { if ((!empty($styleData)) && ($column > '') && ($row > '')) {
@@ -407,13 +432,15 @@ class PHPExcel_Reader_SYLK extends PHPExcel_Reader_Abstract implements PHPExcel_
} }
} }
} else { } else {
foreach($rowData as $rowDatum) { foreach ($rowData as $rowDatum) {
switch($rowDatum{0}) { switch ($rowDatum{0}) {
case 'C' : case 'C':
case 'X' : $column = substr($rowDatum,1); case 'X':
$column = substr($rowDatum, 1);
break; break;
case 'R' : case 'R':
case 'Y' : $row = substr($rowDatum,1); case 'Y':
$row = substr($rowDatum, 1);
break; break;
} }
} }
@@ -432,8 +459,9 @@ class PHPExcel_Reader_SYLK extends PHPExcel_Reader_Abstract implements PHPExcel_
* *
* @return int * @return int
*/ */
public function getSheetIndex() { public function getSheetIndex()
return $this->_sheetIndex; {
return $this->sheetIndex;
} }
/** /**
@@ -442,9 +470,9 @@ class PHPExcel_Reader_SYLK extends PHPExcel_Reader_Abstract implements PHPExcel_
* @param int $pValue Sheet index * @param int $pValue Sheet index
* @return PHPExcel_Reader_SYLK * @return PHPExcel_Reader_SYLK
*/ */
public function setSheetIndex($pValue = 0) { public function setSheetIndex($pValue = 0)
$this->_sheetIndex = $pValue; {
$this->sheetIndex = $pValue;
return $this; return $this;
} }
} }

View File

@@ -1,8 +1,9 @@
<?php <?php
/** /**
* PHPExcel * PHPExcel_ReferenceHelper (Singleton)
* *
* Copyright (c) 2006 - 2014 PHPExcel * Copyright (c) 2006 - 2015 PHPExcel
* *
* This library is free software; you can redistribute it and/or * This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public * modify it under the terms of the GNU Lesser General Public
@@ -20,18 +21,9 @@
* *
* @category PHPExcel * @category PHPExcel
* @package PHPExcel * @package PHPExcel
* @copyright Copyright (c) 2006 - 2014 PHPExcel (http://www.codeplex.com/PHPExcel) * @copyright Copyright (c) 2006 - 2015 PHPExcel (http://www.codeplex.com/PHPExcel)
* @license http://www.gnu.org/licenses/old-licenses/lgpl-2.1.txt LGPL * @license http://www.gnu.org/licenses/old-licenses/lgpl-2.1.txt LGPL
* @version 1.8.0, 2014-03-02 * @version ##VERSION##, ##DATE##
*/
/**
* PHPExcel_ReferenceHelper (Singleton)
*
* @category PHPExcel
* @package PHPExcel
* @copyright Copyright (c) 2006 - 2014 PHPExcel (http://www.codeplex.com/PHPExcel)
*/ */
class PHPExcel_ReferenceHelper class PHPExcel_ReferenceHelper
{ {
@@ -47,25 +39,27 @@ class PHPExcel_ReferenceHelper
* *
* @var PHPExcel_ReferenceHelper * @var PHPExcel_ReferenceHelper
*/ */
private static $_instance; private static $instance;
/** /**
* Get an instance of this class * Get an instance of this class
* *
* @return PHPExcel_ReferenceHelper * @return PHPExcel_ReferenceHelper
*/ */
public static function getInstance() { public static function getInstance()
if (!isset(self::$_instance) || (self::$_instance === NULL)) { {
self::$_instance = new PHPExcel_ReferenceHelper(); if (!isset(self::$instance) || (self::$instance === null)) {
self::$instance = new PHPExcel_ReferenceHelper();
} }
return self::$_instance; return self::$instance;
} }
/** /**
* Create a new PHPExcel_ReferenceHelper * Create a new PHPExcel_ReferenceHelper
*/ */
protected function __construct() { protected function __construct()
{
} }
/** /**
@@ -76,7 +70,8 @@ class PHPExcel_ReferenceHelper
* @param string $b Second column to test (e.g. 'Z') * @param string $b Second column to test (e.g. 'Z')
* @return integer * @return integer
*/ */
public static function columnSort($a, $b) { public static function columnSort($a, $b)
{
return strcasecmp(strlen($a) . $a, strlen($b) . $b); return strcasecmp(strlen($a) . $a, strlen($b) . $b);
} }
@@ -88,7 +83,8 @@ class PHPExcel_ReferenceHelper
* @param string $b Second column to test (e.g. 'Z') * @param string $b Second column to test (e.g. 'Z')
* @return integer * @return integer
*/ */
public static function columnReverseSort($a, $b) { public static function columnReverseSort($a, $b)
{
return 1 - strcasecmp(strlen($a) . $a, strlen($b) . $b); return 1 - strcasecmp(strlen($a) . $a, strlen($b) . $b);
} }
@@ -100,9 +96,10 @@ class PHPExcel_ReferenceHelper
* @param string $b Second cell to test (e.g. 'Z1') * @param string $b Second cell to test (e.g. 'Z1')
* @return integer * @return integer
*/ */
public static function cellSort($a, $b) { public static function cellSort($a, $b)
sscanf($a,'%[A-Z]%d', $ac, $ar); {
sscanf($b,'%[A-Z]%d', $bc, $br); sscanf($a, '%[A-Z]%d', $ac, $ar);
sscanf($b, '%[A-Z]%d', $bc, $br);
if ($ar == $br) { if ($ar == $br) {
return strcasecmp(strlen($ac) . $ac, strlen($bc) . $bc); return strcasecmp(strlen($ac) . $ac, strlen($bc) . $bc);
@@ -118,9 +115,10 @@ class PHPExcel_ReferenceHelper
* @param string $b Second cell to test (e.g. 'Z1') * @param string $b Second cell to test (e.g. 'Z1')
* @return integer * @return integer
*/ */
public static function cellReverseSort($a, $b) { public static function cellReverseSort($a, $b)
sscanf($a,'%[A-Z]%d', $ac, $ar); {
sscanf($b,'%[A-Z]%d', $bc, $br); sscanf($a, '%[A-Z]%d', $ac, $ar);
sscanf($b, '%[A-Z]%d', $bc, $br);
if ($ar == $br) { if ($ar == $br) {
return 1 - strcasecmp(strlen($ac) . $ac, strlen($bc) . $bc); return 1 - strcasecmp(strlen($ac) . $ac, strlen($bc) . $bc);
@@ -138,20 +136,21 @@ class PHPExcel_ReferenceHelper
* @param integer $pNumCols Number of columns to insert/delete (negative values indicate deletion) * @param integer $pNumCols Number of columns to insert/delete (negative values indicate deletion)
* @return boolean * @return boolean
*/ */
private static function cellAddressInDeleteRange($cellAddress, $beforeRow, $pNumRows, $beforeColumnIndex, $pNumCols) { private static function cellAddressInDeleteRange($cellAddress, $beforeRow, $pNumRows, $beforeColumnIndex, $pNumCols)
{
list($cellColumn, $cellRow) = PHPExcel_Cell::coordinateFromString($cellAddress); list($cellColumn, $cellRow) = PHPExcel_Cell::coordinateFromString($cellAddress);
$cellColumnIndex = PHPExcel_Cell::columnIndexFromString($cellColumn); $cellColumnIndex = PHPExcel_Cell::columnIndexFromString($cellColumn);
// Is cell within the range of rows/columns if we're deleting // Is cell within the range of rows/columns if we're deleting
if ($pNumRows < 0 && if ($pNumRows < 0 &&
($cellRow >= ($beforeRow + $pNumRows)) && ($cellRow >= ($beforeRow + $pNumRows)) &&
($cellRow < $beforeRow)) { ($cellRow < $beforeRow)) {
return TRUE; return true;
} elseif ($pNumCols < 0 && } elseif ($pNumCols < 0 &&
($cellColumnIndex >= ($beforeColumnIndex + $pNumCols)) && ($cellColumnIndex >= ($beforeColumnIndex + $pNumCols)) &&
($cellColumnIndex < $beforeColumnIndex)) { ($cellColumnIndex < $beforeColumnIndex)) {
return TRUE; return true;
} }
return FALSE; return false;
} }
/** /**
@@ -164,7 +163,7 @@ class PHPExcel_ReferenceHelper
* @param integer $beforeRow Number of the row we're inserting/deleting before * @param integer $beforeRow Number of the row we're inserting/deleting before
* @param integer $pNumRows Number of rows to insert/delete (negative values indicate deletion) * @param integer $pNumRows Number of rows to insert/delete (negative values indicate deletion)
*/ */
protected function _adjustPageBreaks(PHPExcel_Worksheet $pSheet, $pBefore, $beforeColumnIndex, $pNumCols, $beforeRow, $pNumRows) protected function adjustPageBreaks(PHPExcel_Worksheet $pSheet, $pBefore, $beforeColumnIndex, $pNumCols, $beforeRow, $pNumRows)
{ {
$aBreaks = $pSheet->getBreaks(); $aBreaks = $pSheet->getBreaks();
($pNumCols > 0 || $pNumRows > 0) ? ($pNumCols > 0 || $pNumRows > 0) ?
@@ -198,7 +197,7 @@ class PHPExcel_ReferenceHelper
* @param integer $beforeRow Number of the row we're inserting/deleting before * @param integer $beforeRow Number of the row we're inserting/deleting before
* @param integer $pNumRows Number of rows to insert/delete (negative values indicate deletion) * @param integer $pNumRows Number of rows to insert/delete (negative values indicate deletion)
*/ */
protected function _adjustComments($pSheet, $pBefore, $beforeColumnIndex, $pNumCols, $beforeRow, $pNumRows) protected function adjustComments($pSheet, $pBefore, $beforeColumnIndex, $pNumCols, $beforeRow, $pNumRows)
{ {
$aComments = $pSheet->getComments(); $aComments = $pSheet->getComments();
$aNewComments = array(); // the new array of all comments $aNewComments = array(); // the new array of all comments
@@ -225,18 +224,16 @@ class PHPExcel_ReferenceHelper
* @param integer $beforeRow Number of the row we're inserting/deleting before * @param integer $beforeRow Number of the row we're inserting/deleting before
* @param integer $pNumRows Number of rows to insert/delete (negative values indicate deletion) * @param integer $pNumRows Number of rows to insert/delete (negative values indicate deletion)
*/ */
protected function _adjustHyperlinks($pSheet, $pBefore, $beforeColumnIndex, $pNumCols, $beforeRow, $pNumRows) protected function adjustHyperlinks($pSheet, $pBefore, $beforeColumnIndex, $pNumCols, $beforeRow, $pNumRows)
{ {
$aHyperlinkCollection = $pSheet->getHyperlinkCollection(); $aHyperlinkCollection = $pSheet->getHyperlinkCollection();
($pNumCols > 0 || $pNumRows > 0) ? ($pNumCols > 0 || $pNumRows > 0) ? uksort($aHyperlinkCollection, array('PHPExcel_ReferenceHelper','cellReverseSort')) : uksort($aHyperlinkCollection, array('PHPExcel_ReferenceHelper','cellSort'));
uksort($aHyperlinkCollection, array('PHPExcel_ReferenceHelper','cellReverseSort')) :
uksort($aHyperlinkCollection, array('PHPExcel_ReferenceHelper','cellSort'));
foreach ($aHyperlinkCollection as $key => $value) { foreach ($aHyperlinkCollection as $key => $value) {
$newReference = $this->updateCellReference($key, $pBefore, $pNumCols, $pNumRows); $newReference = $this->updateCellReference($key, $pBefore, $pNumCols, $pNumRows);
if ($key != $newReference) { if ($key != $newReference) {
$pSheet->setHyperlink( $newReference, $value ); $pSheet->setHyperlink($newReference, $value);
$pSheet->setHyperlink( $key, null ); $pSheet->setHyperlink($key, null);
} }
} }
} }
@@ -251,17 +248,16 @@ class PHPExcel_ReferenceHelper
* @param integer $beforeRow Number of the row we're inserting/deleting before * @param integer $beforeRow Number of the row we're inserting/deleting before
* @param integer $pNumRows Number of rows to insert/delete (negative values indicate deletion) * @param integer $pNumRows Number of rows to insert/delete (negative values indicate deletion)
*/ */
protected function _adjustDataValidations($pSheet, $pBefore, $beforeColumnIndex, $pNumCols, $beforeRow, $pNumRows) protected function adjustDataValidations($pSheet, $pBefore, $beforeColumnIndex, $pNumCols, $beforeRow, $pNumRows)
{ {
$aDataValidationCollection = $pSheet->getDataValidationCollection(); $aDataValidationCollection = $pSheet->getDataValidationCollection();
($pNumCols > 0 || $pNumRows > 0) ? ($pNumCols > 0 || $pNumRows > 0) ? uksort($aDataValidationCollection, array('PHPExcel_ReferenceHelper','cellReverseSort')) : uksort($aDataValidationCollection, array('PHPExcel_ReferenceHelper','cellSort'));
uksort($aDataValidationCollection, array('PHPExcel_ReferenceHelper','cellReverseSort')) :
uksort($aDataValidationCollection, array('PHPExcel_ReferenceHelper','cellSort'));
foreach ($aDataValidationCollection as $key => $value) { foreach ($aDataValidationCollection as $key => $value) {
$newReference = $this->updateCellReference($key, $pBefore, $pNumCols, $pNumRows); $newReference = $this->updateCellReference($key, $pBefore, $pNumCols, $pNumRows);
if ($key != $newReference) { if ($key != $newReference) {
$pSheet->setDataValidation( $newReference, $value ); $pSheet->setDataValidation($newReference, $value);
$pSheet->setDataValidation( $key, null ); $pSheet->setDataValidation($key, null);
} }
} }
} }
@@ -276,7 +272,7 @@ class PHPExcel_ReferenceHelper
* @param integer $beforeRow Number of the row we're inserting/deleting before * @param integer $beforeRow Number of the row we're inserting/deleting before
* @param integer $pNumRows Number of rows to insert/delete (negative values indicate deletion) * @param integer $pNumRows Number of rows to insert/delete (negative values indicate deletion)
*/ */
protected function _adjustMergeCells($pSheet, $pBefore, $beforeColumnIndex, $pNumCols, $beforeRow, $pNumRows) protected function adjustMergeCells($pSheet, $pBefore, $beforeColumnIndex, $pNumCols, $beforeRow, $pNumRows)
{ {
$aMergeCells = $pSheet->getMergeCells(); $aMergeCells = $pSheet->getMergeCells();
$aNewMergeCells = array(); // the new array of all merge cells $aNewMergeCells = array(); // the new array of all merge cells
@@ -297,7 +293,7 @@ class PHPExcel_ReferenceHelper
* @param integer $beforeRow Number of the row we're inserting/deleting before * @param integer $beforeRow Number of the row we're inserting/deleting before
* @param integer $pNumRows Number of rows to insert/delete (negative values indicate deletion) * @param integer $pNumRows Number of rows to insert/delete (negative values indicate deletion)
*/ */
protected function _adjustProtectedCells($pSheet, $pBefore, $beforeColumnIndex, $pNumCols, $beforeRow, $pNumRows) protected function adjustProtectedCells($pSheet, $pBefore, $beforeColumnIndex, $pNumCols, $beforeRow, $pNumRows)
{ {
$aProtectedCells = $pSheet->getProtectedCells(); $aProtectedCells = $pSheet->getProtectedCells();
($pNumCols > 0 || $pNumRows > 0) ? ($pNumCols > 0 || $pNumRows > 0) ?
@@ -306,8 +302,8 @@ class PHPExcel_ReferenceHelper
foreach ($aProtectedCells as $key => $value) { foreach ($aProtectedCells as $key => $value) {
$newReference = $this->updateCellReference($key, $pBefore, $pNumCols, $pNumRows); $newReference = $this->updateCellReference($key, $pBefore, $pNumCols, $pNumRows);
if ($key != $newReference) { if ($key != $newReference) {
$pSheet->protectCells( $newReference, $value, true ); $pSheet->protectCells($newReference, $value, true);
$pSheet->unprotectCells( $key ); $pSheet->unprotectCells($key);
} }
} }
} }
@@ -322,7 +318,7 @@ class PHPExcel_ReferenceHelper
* @param integer $beforeRow Number of the row we're inserting/deleting before * @param integer $beforeRow Number of the row we're inserting/deleting before
* @param integer $pNumRows Number of rows to insert/delete (negative values indicate deletion) * @param integer $pNumRows Number of rows to insert/delete (negative values indicate deletion)
*/ */
protected function _adjustColumnDimensions($pSheet, $pBefore, $beforeColumnIndex, $pNumCols, $beforeRow, $pNumRows) protected function adjustColumnDimensions($pSheet, $pBefore, $beforeColumnIndex, $pNumCols, $beforeRow, $pNumRows)
{ {
$aColumnDimensions = array_reverse($pSheet->getColumnDimensions(), true); $aColumnDimensions = array_reverse($pSheet->getColumnDimensions(), true);
if (!empty($aColumnDimensions)) { if (!empty($aColumnDimensions)) {
@@ -347,7 +343,7 @@ class PHPExcel_ReferenceHelper
* @param integer $beforeRow Number of the row we're inserting/deleting before * @param integer $beforeRow Number of the row we're inserting/deleting before
* @param integer $pNumRows Number of rows to insert/delete (negative values indicate deletion) * @param integer $pNumRows Number of rows to insert/delete (negative values indicate deletion)
*/ */
protected function _adjustRowDimensions($pSheet, $pBefore, $beforeColumnIndex, $pNumCols, $beforeRow, $pNumRows) protected function adjustRowDimensions($pSheet, $pBefore, $beforeColumnIndex, $pNumCols, $beforeRow, $pNumRows)
{ {
$aRowDimensions = array_reverse($pSheet->getRowDimensions(), true); $aRowDimensions = array_reverse($pSheet->getRowDimensions(), true);
if (!empty($aRowDimensions)) { if (!empty($aRowDimensions)) {
@@ -380,7 +376,7 @@ class PHPExcel_ReferenceHelper
* @param PHPExcel_Worksheet $pSheet The worksheet that we're editing * @param PHPExcel_Worksheet $pSheet The worksheet that we're editing
* @throws PHPExcel_Exception * @throws PHPExcel_Exception
*/ */
public function insertNewBefore($pBefore = 'A1', $pNumCols = 0, $pNumRows = 0, PHPExcel_Worksheet $pSheet = NULL) public function insertNewBefore($pBefore = 'A1', $pNumCols = 0, $pNumRows = 0, PHPExcel_Worksheet $pSheet = null)
{ {
$remove = ($pNumCols < 0 || $pNumRows < 0); $remove = ($pNumCols < 0 || $pNumRows < 0);
$aCellCollection = $pSheet->getCellCollection(); $aCellCollection = $pSheet->getCellCollection();
@@ -424,7 +420,7 @@ class PHPExcel_ReferenceHelper
} }
// Loop through cells, bottom-up, and change cell coordinates // Loop through cells, bottom-up, and change cell coordinates
if($remove) { if ($remove) {
// It's faster to reverse and pop than to use unshift, especially with large cell collections // It's faster to reverse and pop than to use unshift, especially with large cell collections
$aCellCollection = array_reverse($aCellCollection); $aCellCollection = array_reverse($aCellCollection);
} }
@@ -440,9 +436,7 @@ class PHPExcel_ReferenceHelper
$newCoordinates = PHPExcel_Cell::stringFromColumnIndex($cellIndex-1 + $pNumCols) . ($cell->getRow() + $pNumRows); $newCoordinates = PHPExcel_Cell::stringFromColumnIndex($cellIndex-1 + $pNumCols) . ($cell->getRow() + $pNumRows);
// Should the cell be updated? Move value and cellXf index from one cell to another. // Should the cell be updated? Move value and cellXf index from one cell to another.
if (($cellIndex >= $beforeColumnIndex) && if (($cellIndex >= $beforeColumnIndex) && ($cell->getRow() >= $beforeRow)) {
($cell->getRow() >= $beforeRow)) {
// Update cell styles // Update cell styles
$pSheet->getCell($newCoordinates)->setXfIndex($cell->getXfIndex()); $pSheet->getCell($newCoordinates)->setXfIndex($cell->getXfIndex());
@@ -450,8 +444,7 @@ class PHPExcel_ReferenceHelper
if ($cell->getDataType() == PHPExcel_Cell_DataType::TYPE_FORMULA) { if ($cell->getDataType() == PHPExcel_Cell_DataType::TYPE_FORMULA) {
// Formula should be adjusted // Formula should be adjusted
$pSheet->getCell($newCoordinates) $pSheet->getCell($newCoordinates)
->setValue($this->updateFormulaReferences($cell->getValue(), ->setValue($this->updateFormulaReferences($cell->getValue(), $pBefore, $pNumCols, $pNumRows, $pSheet->getTitle()));
$pBefore, $pNumCols, $pNumRows, $pSheet->getTitle()));
} else { } else {
// Formula should not be adjusted // Formula should not be adjusted
$pSheet->getCell($newCoordinates)->setValue($cell->getValue()); $pSheet->getCell($newCoordinates)->setValue($cell->getValue());
@@ -459,14 +452,12 @@ class PHPExcel_ReferenceHelper
// Clear the original cell // Clear the original cell
$pSheet->getCellCacheController()->deleteCacheData($cellID); $pSheet->getCellCacheController()->deleteCacheData($cellID);
} else { } else {
/* We don't need to update styles for rows/columns before our insertion position, /* We don't need to update styles for rows/columns before our insertion position,
but we do still need to adjust any formulae in those cells */ but we do still need to adjust any formulae in those cells */
if ($cell->getDataType() == PHPExcel_Cell_DataType::TYPE_FORMULA) { if ($cell->getDataType() == PHPExcel_Cell_DataType::TYPE_FORMULA) {
// Formula should be adjusted // Formula should be adjusted
$cell->setValue($this->updateFormulaReferences($cell->getValue(), $cell->setValue($this->updateFormulaReferences($cell->getValue(), $pBefore, $pNumCols, $pNumRows, $pSheet->getTitle()));
$pBefore, $pNumCols, $pNumRows, $pSheet->getTitle()));
} }
} }
@@ -478,9 +469,8 @@ class PHPExcel_ReferenceHelper
if ($pNumCols > 0 && $beforeColumnIndex - 2 > 0) { if ($pNumCols > 0 && $beforeColumnIndex - 2 > 0) {
for ($i = $beforeRow; $i <= $highestRow - 1; ++$i) { for ($i = $beforeRow; $i <= $highestRow - 1; ++$i) {
// Style // Style
$coordinate = PHPExcel_Cell::stringFromColumnIndex( $beforeColumnIndex - 2 ) . $i; $coordinate = PHPExcel_Cell::stringFromColumnIndex($beforeColumnIndex - 2) . $i;
if ($pSheet->cellExists($coordinate)) { if ($pSheet->cellExists($coordinate)) {
$xfIndex = $pSheet->getCell($coordinate)->getXfIndex(); $xfIndex = $pSheet->getCell($coordinate)->getXfIndex();
$conditionalStyles = $pSheet->conditionalStylesExists($coordinate) ? $conditionalStyles = $pSheet->conditionalStylesExists($coordinate) ?
@@ -502,7 +492,6 @@ class PHPExcel_ReferenceHelper
if ($pNumRows > 0 && $beforeRow - 1 > 0) { if ($pNumRows > 0 && $beforeRow - 1 > 0) {
for ($i = $beforeColumnIndex - 1; $i <= PHPExcel_Cell::columnIndexFromString($highestColumn) - 1; ++$i) { for ($i = $beforeColumnIndex - 1; $i <= PHPExcel_Cell::columnIndexFromString($highestColumn) - 1; ++$i) {
// Style // Style
$coordinate = PHPExcel_Cell::stringFromColumnIndex($i) . ($beforeRow - 1); $coordinate = PHPExcel_Cell::stringFromColumnIndex($i) . ($beforeRow - 1);
if ($pSheet->cellExists($coordinate)) { if ($pSheet->cellExists($coordinate)) {
@@ -524,28 +513,28 @@ class PHPExcel_ReferenceHelper
} }
// Update worksheet: column dimensions // Update worksheet: column dimensions
$this->_adjustColumnDimensions($pSheet, $pBefore, $beforeColumnIndex, $pNumCols, $beforeRow, $pNumRows); $this->adjustColumnDimensions($pSheet, $pBefore, $beforeColumnIndex, $pNumCols, $beforeRow, $pNumRows);
// Update worksheet: row dimensions // Update worksheet: row dimensions
$this->_adjustRowDimensions($pSheet, $pBefore, $beforeColumnIndex, $pNumCols, $beforeRow, $pNumRows); $this->adjustRowDimensions($pSheet, $pBefore, $beforeColumnIndex, $pNumCols, $beforeRow, $pNumRows);
// Update worksheet: page breaks // Update worksheet: page breaks
$this->_adjustPageBreaks($pSheet, $pBefore, $beforeColumnIndex, $pNumCols, $beforeRow, $pNumRows); $this->adjustPageBreaks($pSheet, $pBefore, $beforeColumnIndex, $pNumCols, $beforeRow, $pNumRows);
// Update worksheet: comments // Update worksheet: comments
$this->_adjustComments($pSheet, $pBefore, $beforeColumnIndex, $pNumCols, $beforeRow, $pNumRows); $this->adjustComments($pSheet, $pBefore, $beforeColumnIndex, $pNumCols, $beforeRow, $pNumRows);
// Update worksheet: hyperlinks // Update worksheet: hyperlinks
$this->_adjustHyperlinks($pSheet, $pBefore, $beforeColumnIndex, $pNumCols, $beforeRow, $pNumRows); $this->adjustHyperlinks($pSheet, $pBefore, $beforeColumnIndex, $pNumCols, $beforeRow, $pNumRows);
// Update worksheet: data validations // Update worksheet: data validations
$this->_adjustDataValidations($pSheet, $pBefore, $beforeColumnIndex, $pNumCols, $beforeRow, $pNumRows); $this->adjustDataValidations($pSheet, $pBefore, $beforeColumnIndex, $pNumCols, $beforeRow, $pNumRows);
// Update worksheet: merge cells // Update worksheet: merge cells
$this->_adjustMergeCells($pSheet, $pBefore, $beforeColumnIndex, $pNumCols, $beforeRow, $pNumRows); $this->adjustMergeCells($pSheet, $pBefore, $beforeColumnIndex, $pNumCols, $beforeRow, $pNumRows);
// Update worksheet: protected cells // Update worksheet: protected cells
$this->_adjustProtectedCells($pSheet, $pBefore, $beforeColumnIndex, $pNumCols, $beforeRow, $pNumRows); $this->adjustProtectedCells($pSheet, $pBefore, $beforeColumnIndex, $pNumCols, $beforeRow, $pNumRows);
// Update worksheet: autofilter // Update worksheet: autofilter
$autoFilter = $pSheet->getAutoFilter(); $autoFilter = $pSheet->getAutoFilter();
@@ -554,9 +543,9 @@ class PHPExcel_ReferenceHelper
if ($pNumCols != 0) { if ($pNumCols != 0) {
$autoFilterColumns = array_keys($autoFilter->getColumns()); $autoFilterColumns = array_keys($autoFilter->getColumns());
if (count($autoFilterColumns) > 0) { if (count($autoFilterColumns) > 0) {
sscanf($pBefore,'%[A-Z]%d', $column, $row); sscanf($pBefore, '%[A-Z]%d', $column, $row);
$columnIndex = PHPExcel_Cell::columnIndexFromString($column); $columnIndex = PHPExcel_Cell::columnIndexFromString($column);
list($rangeStart,$rangeEnd) = PHPExcel_Cell::rangeBoundaries($autoFilterRange); list($rangeStart, $rangeEnd) = PHPExcel_Cell::rangeBoundaries($autoFilterRange);
if ($columnIndex <= $rangeEnd[0]) { if ($columnIndex <= $rangeEnd[0]) {
if ($pNumCols < 0) { if ($pNumCols < 0) {
// If we're actually deleting any columns that fall within the autofilter range, // If we're actually deleting any columns that fall within the autofilter range,
@@ -564,7 +553,7 @@ class PHPExcel_ReferenceHelper
$deleteColumn = $columnIndex + $pNumCols - 1; $deleteColumn = $columnIndex + $pNumCols - 1;
$deleteCount = abs($pNumCols); $deleteCount = abs($pNumCols);
for ($i = 1; $i <= $deleteCount; ++$i) { for ($i = 1; $i <= $deleteCount; ++$i) {
if (in_array(PHPExcel_Cell::stringFromColumnIndex($deleteColumn),$autoFilterColumns)) { if (in_array(PHPExcel_Cell::stringFromColumnIndex($deleteColumn), $autoFilterColumns)) {
$autoFilter->clearColumn(PHPExcel_Cell::stringFromColumnIndex($deleteColumn)); $autoFilter->clearColumn(PHPExcel_Cell::stringFromColumnIndex($deleteColumn));
} }
++$deleteColumn; ++$deleteColumn;
@@ -584,7 +573,7 @@ class PHPExcel_ReferenceHelper
$toColRef = $rangeEnd[0]+$pNumCols; $toColRef = $rangeEnd[0]+$pNumCols;
do { do {
$autoFilter->shiftColumn(PHPExcel_Cell::stringFromColumnIndex($endColRef-1),PHPExcel_Cell::stringFromColumnIndex($toColRef-1)); $autoFilter->shiftColumn(PHPExcel_Cell::stringFromColumnIndex($endColRef-1), PHPExcel_Cell::stringFromColumnIndex($toColRef-1));
--$endColRef; --$endColRef;
--$toColRef; --$toColRef;
} while ($startColRef <= $endColRef); } while ($startColRef <= $endColRef);
@@ -594,7 +583,7 @@ class PHPExcel_ReferenceHelper
$toColID = PHPExcel_Cell::stringFromColumnIndex($startCol+$pNumCols-1); $toColID = PHPExcel_Cell::stringFromColumnIndex($startCol+$pNumCols-1);
$endColID = PHPExcel_Cell::stringFromColumnIndex($rangeEnd[0]); $endColID = PHPExcel_Cell::stringFromColumnIndex($rangeEnd[0]);
do { do {
$autoFilter->shiftColumn($startColID,$toColID); $autoFilter->shiftColumn($startColID, $toColID);
++$startColID; ++$startColID;
++$toColID; ++$toColID;
} while ($startColID != $endColID); } while ($startColID != $endColID);
@@ -602,17 +591,17 @@ class PHPExcel_ReferenceHelper
} }
} }
} }
$pSheet->setAutoFilter( $this->updateCellReference($autoFilterRange, $pBefore, $pNumCols, $pNumRows) ); $pSheet->setAutoFilter($this->updateCellReference($autoFilterRange, $pBefore, $pNumCols, $pNumRows));
} }
// Update worksheet: freeze pane // Update worksheet: freeze pane
if ($pSheet->getFreezePane() != '') { if ($pSheet->getFreezePane() != '') {
$pSheet->freezePane( $this->updateCellReference($pSheet->getFreezePane(), $pBefore, $pNumCols, $pNumRows) ); $pSheet->freezePane($this->updateCellReference($pSheet->getFreezePane(), $pBefore, $pNumCols, $pNumRows));
} }
// Page setup // Page setup
if ($pSheet->getPageSetup()->isPrintAreaSet()) { if ($pSheet->getPageSetup()->isPrintAreaSet()) {
$pSheet->getPageSetup()->setPrintArea( $this->updateCellReference($pSheet->getPageSetup()->getPrintArea(), $pBefore, $pNumCols, $pNumRows) ); $pSheet->getPageSetup()->setPrintArea($this->updateCellReference($pSheet->getPageSetup()->getPrintArea(), $pBefore, $pNumCols, $pNumRows));
} }
// Update worksheet: drawings // Update worksheet: drawings
@@ -628,9 +617,7 @@ class PHPExcel_ReferenceHelper
if (count($pSheet->getParent()->getNamedRanges()) > 0) { if (count($pSheet->getParent()->getNamedRanges()) > 0) {
foreach ($pSheet->getParent()->getNamedRanges() as $namedRange) { foreach ($pSheet->getParent()->getNamedRanges() as $namedRange) {
if ($namedRange->getWorksheet()->getHashCode() == $pSheet->getHashCode()) { if ($namedRange->getWorksheet()->getHashCode() == $pSheet->getHashCode()) {
$namedRange->setRange( $namedRange->setRange($this->updateCellReference($namedRange->getRange(), $pBefore, $pNumCols, $pNumRows));
$this->updateCellReference($namedRange->getRange(), $pBefore, $pNumCols, $pNumRows)
);
} }
} }
} }
@@ -650,11 +637,12 @@ class PHPExcel_ReferenceHelper
* @return string Updated formula * @return string Updated formula
* @throws PHPExcel_Exception * @throws PHPExcel_Exception
*/ */
public function updateFormulaReferences($pFormula = '', $pBefore = 'A1', $pNumCols = 0, $pNumRows = 0, $sheetName = '') { public function updateFormulaReferences($pFormula = '', $pBefore = 'A1', $pNumCols = 0, $pNumRows = 0, $sheetName = '')
{
// Update cell references in the formula // Update cell references in the formula
$formulaBlocks = explode('"',$pFormula); $formulaBlocks = explode('"', $pFormula);
$i = false; $i = false;
foreach($formulaBlocks as &$formulaBlock) { foreach ($formulaBlocks as &$formulaBlock) {
// Ignore blocks that were enclosed in quotes (alternating entries in the $formulaBlocks array after the explode) // Ignore blocks that were enclosed in quotes (alternating entries in the $formulaBlocks array after the explode)
if ($i = !$i) { if ($i = !$i) {
$adjustCount = 0; $adjustCount = 0;
@@ -662,19 +650,19 @@ class PHPExcel_ReferenceHelper
// Search for row ranges (e.g. 'Sheet1'!3:5 or 3:5) with or without $ absolutes (e.g. $3:5) // Search for row ranges (e.g. 'Sheet1'!3:5 or 3:5) with or without $ absolutes (e.g. $3:5)
$matchCount = preg_match_all('/'.self::REFHELPER_REGEXP_ROWRANGE.'/i', ' '.$formulaBlock.' ', $matches, PREG_SET_ORDER); $matchCount = preg_match_all('/'.self::REFHELPER_REGEXP_ROWRANGE.'/i', ' '.$formulaBlock.' ', $matches, PREG_SET_ORDER);
if ($matchCount > 0) { if ($matchCount > 0) {
foreach($matches as $match) { foreach ($matches as $match) {
$fromString = ($match[2] > '') ? $match[2].'!' : ''; $fromString = ($match[2] > '') ? $match[2].'!' : '';
$fromString .= $match[3].':'.$match[4]; $fromString .= $match[3].':'.$match[4];
$modified3 = substr($this->updateCellReference('$A'.$match[3],$pBefore,$pNumCols,$pNumRows),2); $modified3 = substr($this->updateCellReference('$A'.$match[3], $pBefore, $pNumCols, $pNumRows), 2);
$modified4 = substr($this->updateCellReference('$A'.$match[4],$pBefore,$pNumCols,$pNumRows),2); $modified4 = substr($this->updateCellReference('$A'.$match[4], $pBefore, $pNumCols, $pNumRows), 2);
if ($match[3].':'.$match[4] !== $modified3.':'.$modified4) { if ($match[3].':'.$match[4] !== $modified3.':'.$modified4) {
if (($match[2] == '') || (trim($match[2],"'") == $sheetName)) { if (($match[2] == '') || (trim($match[2], "'") == $sheetName)) {
$toString = ($match[2] > '') ? $match[2].'!' : ''; $toString = ($match[2] > '') ? $match[2].'!' : '';
$toString .= $modified3.':'.$modified4; $toString .= $modified3.':'.$modified4;
// Max worksheet size is 1,048,576 rows by 16,384 columns in Excel 2007, so our adjustments need to be at least one digit more // Max worksheet size is 1,048,576 rows by 16,384 columns in Excel 2007, so our adjustments need to be at least one digit more
$column = 100000; $column = 100000;
$row = 10000000+trim($match[3],'$'); $row = 10000000 + trim($match[3], '$');
$cellIndex = $column.$row; $cellIndex = $column.$row;
$newCellTokens[$cellIndex] = preg_quote($toString); $newCellTokens[$cellIndex] = preg_quote($toString);
@@ -687,18 +675,18 @@ class PHPExcel_ReferenceHelper
// Search for column ranges (e.g. 'Sheet1'!C:E or C:E) with or without $ absolutes (e.g. $C:E) // Search for column ranges (e.g. 'Sheet1'!C:E or C:E) with or without $ absolutes (e.g. $C:E)
$matchCount = preg_match_all('/'.self::REFHELPER_REGEXP_COLRANGE.'/i', ' '.$formulaBlock.' ', $matches, PREG_SET_ORDER); $matchCount = preg_match_all('/'.self::REFHELPER_REGEXP_COLRANGE.'/i', ' '.$formulaBlock.' ', $matches, PREG_SET_ORDER);
if ($matchCount > 0) { if ($matchCount > 0) {
foreach($matches as $match) { foreach ($matches as $match) {
$fromString = ($match[2] > '') ? $match[2].'!' : ''; $fromString = ($match[2] > '') ? $match[2].'!' : '';
$fromString .= $match[3].':'.$match[4]; $fromString .= $match[3].':'.$match[4];
$modified3 = substr($this->updateCellReference($match[3].'$1',$pBefore,$pNumCols,$pNumRows),0,-2); $modified3 = substr($this->updateCellReference($match[3].'$1', $pBefore, $pNumCols, $pNumRows), 0, -2);
$modified4 = substr($this->updateCellReference($match[4].'$1',$pBefore,$pNumCols,$pNumRows),0,-2); $modified4 = substr($this->updateCellReference($match[4].'$1', $pBefore, $pNumCols, $pNumRows), 0, -2);
if ($match[3].':'.$match[4] !== $modified3.':'.$modified4) { if ($match[3].':'.$match[4] !== $modified3.':'.$modified4) {
if (($match[2] == '') || (trim($match[2],"'") == $sheetName)) { if (($match[2] == '') || (trim($match[2], "'") == $sheetName)) {
$toString = ($match[2] > '') ? $match[2].'!' : ''; $toString = ($match[2] > '') ? $match[2].'!' : '';
$toString .= $modified3.':'.$modified4; $toString .= $modified3.':'.$modified4;
// Max worksheet size is 1,048,576 rows by 16,384 columns in Excel 2007, so our adjustments need to be at least one digit more // Max worksheet size is 1,048,576 rows by 16,384 columns in Excel 2007, so our adjustments need to be at least one digit more
$column = PHPExcel_Cell::columnIndexFromString(trim($match[3],'$')) + 100000; $column = PHPExcel_Cell::columnIndexFromString(trim($match[3], '$')) + 100000;
$row = 10000000; $row = 10000000;
$cellIndex = $column.$row; $cellIndex = $column.$row;
@@ -712,20 +700,20 @@ class PHPExcel_ReferenceHelper
// Search for cell ranges (e.g. 'Sheet1'!A3:C5 or A3:C5) with or without $ absolutes (e.g. $A1:C$5) // Search for cell ranges (e.g. 'Sheet1'!A3:C5 or A3:C5) with or without $ absolutes (e.g. $A1:C$5)
$matchCount = preg_match_all('/'.self::REFHELPER_REGEXP_CELLRANGE.'/i', ' '.$formulaBlock.' ', $matches, PREG_SET_ORDER); $matchCount = preg_match_all('/'.self::REFHELPER_REGEXP_CELLRANGE.'/i', ' '.$formulaBlock.' ', $matches, PREG_SET_ORDER);
if ($matchCount > 0) { if ($matchCount > 0) {
foreach($matches as $match) { foreach ($matches as $match) {
$fromString = ($match[2] > '') ? $match[2].'!' : ''; $fromString = ($match[2] > '') ? $match[2].'!' : '';
$fromString .= $match[3].':'.$match[4]; $fromString .= $match[3].':'.$match[4];
$modified3 = $this->updateCellReference($match[3],$pBefore,$pNumCols,$pNumRows); $modified3 = $this->updateCellReference($match[3], $pBefore, $pNumCols, $pNumRows);
$modified4 = $this->updateCellReference($match[4],$pBefore,$pNumCols,$pNumRows); $modified4 = $this->updateCellReference($match[4], $pBefore, $pNumCols, $pNumRows);
if ($match[3].$match[4] !== $modified3.$modified4) { if ($match[3].$match[4] !== $modified3.$modified4) {
if (($match[2] == '') || (trim($match[2],"'") == $sheetName)) { if (($match[2] == '') || (trim($match[2], "'") == $sheetName)) {
$toString = ($match[2] > '') ? $match[2].'!' : ''; $toString = ($match[2] > '') ? $match[2].'!' : '';
$toString .= $modified3.':'.$modified4; $toString .= $modified3.':'.$modified4;
list($column,$row) = PHPExcel_Cell::coordinateFromString($match[3]); list($column, $row) = PHPExcel_Cell::coordinateFromString($match[3]);
// Max worksheet size is 1,048,576 rows by 16,384 columns in Excel 2007, so our adjustments need to be at least one digit more // Max worksheet size is 1,048,576 rows by 16,384 columns in Excel 2007, so our adjustments need to be at least one digit more
$column = PHPExcel_Cell::columnIndexFromString(trim($column,'$')) + 100000; $column = PHPExcel_Cell::columnIndexFromString(trim($column, '$')) + 100000;
$row = trim($row,'$') + 10000000; $row = trim($row, '$') + 10000000;
$cellIndex = $column.$row; $cellIndex = $column.$row;
$newCellTokens[$cellIndex] = preg_quote($toString); $newCellTokens[$cellIndex] = preg_quote($toString);
@@ -739,19 +727,19 @@ class PHPExcel_ReferenceHelper
$matchCount = preg_match_all('/'.self::REFHELPER_REGEXP_CELLREF.'/i', ' '.$formulaBlock.' ', $matches, PREG_SET_ORDER); $matchCount = preg_match_all('/'.self::REFHELPER_REGEXP_CELLREF.'/i', ' '.$formulaBlock.' ', $matches, PREG_SET_ORDER);
if ($matchCount > 0) { if ($matchCount > 0) {
foreach($matches as $match) { foreach ($matches as $match) {
$fromString = ($match[2] > '') ? $match[2].'!' : ''; $fromString = ($match[2] > '') ? $match[2].'!' : '';
$fromString .= $match[3]; $fromString .= $match[3];
$modified3 = $this->updateCellReference($match[3],$pBefore,$pNumCols,$pNumRows); $modified3 = $this->updateCellReference($match[3], $pBefore, $pNumCols, $pNumRows);
if ($match[3] !== $modified3) { if ($match[3] !== $modified3) {
if (($match[2] == '') || (trim($match[2],"'") == $sheetName)) { if (($match[2] == '') || (trim($match[2], "'") == $sheetName)) {
$toString = ($match[2] > '') ? $match[2].'!' : ''; $toString = ($match[2] > '') ? $match[2].'!' : '';
$toString .= $modified3; $toString .= $modified3;
list($column,$row) = PHPExcel_Cell::coordinateFromString($match[3]); list($column, $row) = PHPExcel_Cell::coordinateFromString($match[3]);
// Max worksheet size is 1,048,576 rows by 16,384 columns in Excel 2007, so our adjustments need to be at least one digit more // Max worksheet size is 1,048,576 rows by 16,384 columns in Excel 2007, so our adjustments need to be at least one digit more
$column = PHPExcel_Cell::columnIndexFromString(trim($column,'$')) + 100000; $column = PHPExcel_Cell::columnIndexFromString(trim($column, '$')) + 100000;
$row = trim($row,'$') + 10000000; $row = trim($row, '$') + 10000000;
$cellIndex = $row . $column; $cellIndex = $row . $column;
$newCellTokens[$cellIndex] = preg_quote($toString); $newCellTokens[$cellIndex] = preg_quote($toString);
@@ -769,14 +757,14 @@ class PHPExcel_ReferenceHelper
ksort($cellTokens); ksort($cellTokens);
ksort($newCellTokens); ksort($newCellTokens);
} // Update cell references in the formula } // Update cell references in the formula
$formulaBlock = str_replace('\\','',preg_replace($cellTokens,$newCellTokens,$formulaBlock)); $formulaBlock = str_replace('\\', '', preg_replace($cellTokens, $newCellTokens, $formulaBlock));
} }
} }
} }
unset($formulaBlock); unset($formulaBlock);
// Then rebuild the formula string // Then rebuild the formula string
return implode('"',$formulaBlocks); return implode('"', $formulaBlocks);
} }
/** /**
@@ -789,17 +777,18 @@ class PHPExcel_ReferenceHelper
* @return string Updated cell range * @return string Updated cell range
* @throws PHPExcel_Exception * @throws PHPExcel_Exception
*/ */
public function updateCellReference($pCellRange = 'A1', $pBefore = 'A1', $pNumCols = 0, $pNumRows = 0) { public function updateCellReference($pCellRange = 'A1', $pBefore = 'A1', $pNumCols = 0, $pNumRows = 0)
{
// Is it in another worksheet? Will not have to update anything. // Is it in another worksheet? Will not have to update anything.
if (strpos($pCellRange, "!") !== false) { if (strpos($pCellRange, "!") !== false) {
return $pCellRange; return $pCellRange;
// Is it a range or a single cell? // Is it a range or a single cell?
} elseif (strpos($pCellRange, ':') === false && strpos($pCellRange, ',') === false) { } elseif (strpos($pCellRange, ':') === false && strpos($pCellRange, ',') === false) {
// Single cell // Single cell
return $this->_updateSingleCellReference($pCellRange, $pBefore, $pNumCols, $pNumRows); return $this->updateSingleCellReference($pCellRange, $pBefore, $pNumCols, $pNumRows);
} elseif (strpos($pCellRange, ':') !== false || strpos($pCellRange, ',') !== false) { } elseif (strpos($pCellRange, ':') !== false || strpos($pCellRange, ',') !== false) {
// Range // Range
return $this->_updateCellRange($pCellRange, $pBefore, $pNumCols, $pNumRows); return $this->updateCellRange($pCellRange, $pBefore, $pNumCols, $pNumRows);
} else { } else {
// Return original // Return original
return $pCellRange; return $pCellRange;
@@ -813,7 +802,8 @@ class PHPExcel_ReferenceHelper
* @param string $oldName Old name (name to replace) * @param string $oldName Old name (name to replace)
* @param string $newName New name * @param string $newName New name
*/ */
public function updateNamedFormulas(PHPExcel $pPhpExcel, $oldName = '', $newName = '') { public function updateNamedFormulas(PHPExcel $pPhpExcel, $oldName = '', $newName = '')
{
if ($oldName == '') { if ($oldName == '') {
return; return;
} }
@@ -821,7 +811,7 @@ class PHPExcel_ReferenceHelper
foreach ($pPhpExcel->getWorksheetIterator() as $sheet) { foreach ($pPhpExcel->getWorksheetIterator() as $sheet) {
foreach ($sheet->getCellCollection(false) as $cellID) { foreach ($sheet->getCellCollection(false) as $cellID) {
$cell = $sheet->getCell($cellID); $cell = $sheet->getCell($cellID);
if (($cell !== NULL) && ($cell->getDataType() == PHPExcel_Cell_DataType::TYPE_FORMULA)) { if (($cell !== null) && ($cell->getDataType() == PHPExcel_Cell_DataType::TYPE_FORMULA)) {
$formula = $cell->getValue(); $formula = $cell->getValue();
if (strpos($formula, $oldName) !== false) { if (strpos($formula, $oldName) !== false) {
$formula = str_replace("'" . $oldName . "'!", "'" . $newName . "'!", $formula); $formula = str_replace("'" . $oldName . "'!", "'" . $newName . "'!", $formula);
@@ -843,8 +833,9 @@ class PHPExcel_ReferenceHelper
* @return string Updated cell range * @return string Updated cell range
* @throws PHPExcel_Exception * @throws PHPExcel_Exception
*/ */
private function _updateCellRange($pCellRange = 'A1:A1', $pBefore = 'A1', $pNumCols = 0, $pNumRows = 0) { private function updateCellRange($pCellRange = 'A1:A1', $pBefore = 'A1', $pNumCols = 0, $pNumRows = 0)
if (strpos($pCellRange,':') !== false || strpos($pCellRange, ',') !== false) { {
if (strpos($pCellRange, ':') !== false || strpos($pCellRange, ',') !== false) {
// Update range // Update range
$range = PHPExcel_Cell::splitRange($pCellRange); $range = PHPExcel_Cell::splitRange($pCellRange);
$ic = count($range); $ic = count($range);
@@ -852,13 +843,13 @@ class PHPExcel_ReferenceHelper
$jc = count($range[$i]); $jc = count($range[$i]);
for ($j = 0; $j < $jc; ++$j) { for ($j = 0; $j < $jc; ++$j) {
if (ctype_alpha($range[$i][$j])) { if (ctype_alpha($range[$i][$j])) {
$r = PHPExcel_Cell::coordinateFromString($this->_updateSingleCellReference($range[$i][$j].'1', $pBefore, $pNumCols, $pNumRows)); $r = PHPExcel_Cell::coordinateFromString($this->updateSingleCellReference($range[$i][$j].'1', $pBefore, $pNumCols, $pNumRows));
$range[$i][$j] = $r[0]; $range[$i][$j] = $r[0];
} elseif(ctype_digit($range[$i][$j])) { } elseif (ctype_digit($range[$i][$j])) {
$r = PHPExcel_Cell::coordinateFromString($this->_updateSingleCellReference('A'.$range[$i][$j], $pBefore, $pNumCols, $pNumRows)); $r = PHPExcel_Cell::coordinateFromString($this->updateSingleCellReference('A'.$range[$i][$j], $pBefore, $pNumCols, $pNumRows));
$range[$i][$j] = $r[1]; $range[$i][$j] = $r[1];
} else { } else {
$range[$i][$j] = $this->_updateSingleCellReference($range[$i][$j], $pBefore, $pNumCols, $pNumRows); $range[$i][$j] = $this->updateSingleCellReference($range[$i][$j], $pBefore, $pNumCols, $pNumRows);
} }
} }
} }
@@ -880,23 +871,22 @@ class PHPExcel_ReferenceHelper
* @return string Updated cell reference * @return string Updated cell reference
* @throws PHPExcel_Exception * @throws PHPExcel_Exception
*/ */
private function _updateSingleCellReference($pCellReference = 'A1', $pBefore = 'A1', $pNumCols = 0, $pNumRows = 0) { private function updateSingleCellReference($pCellReference = 'A1', $pBefore = 'A1', $pNumCols = 0, $pNumRows = 0)
{
if (strpos($pCellReference, ':') === false && strpos($pCellReference, ',') === false) { if (strpos($pCellReference, ':') === false && strpos($pCellReference, ',') === false) {
// Get coordinates of $pBefore // Get coordinates of $pBefore
list($beforeColumn, $beforeRow) = PHPExcel_Cell::coordinateFromString( $pBefore ); list($beforeColumn, $beforeRow) = PHPExcel_Cell::coordinateFromString($pBefore);
// Get coordinates of $pCellReference // Get coordinates of $pCellReference
list($newColumn, $newRow) = PHPExcel_Cell::coordinateFromString( $pCellReference ); list($newColumn, $newRow) = PHPExcel_Cell::coordinateFromString($pCellReference);
// Verify which parts should be updated // Verify which parts should be updated
$updateColumn = (($newColumn{0} != '$') && ($beforeColumn{0} != '$') && $updateColumn = (($newColumn{0} != '$') && ($beforeColumn{0} != '$') && (PHPExcel_Cell::columnIndexFromString($newColumn) >= PHPExcel_Cell::columnIndexFromString($beforeColumn)));
PHPExcel_Cell::columnIndexFromString($newColumn) >= PHPExcel_Cell::columnIndexFromString($beforeColumn)); $updateRow = (($newRow{0} != '$') && ($beforeRow{0} != '$') && $newRow >= $beforeRow);
$updateRow = (($newRow{0} != '$') && ($beforeRow{0} != '$') &&
$newRow >= $beforeRow);
// Create new column reference // Create new column reference
if ($updateColumn) { if ($updateColumn) {
$newColumn = PHPExcel_Cell::stringFromColumnIndex( PHPExcel_Cell::columnIndexFromString($newColumn) - 1 + $pNumCols ); $newColumn = PHPExcel_Cell::stringFromColumnIndex(PHPExcel_Cell::columnIndexFromString($newColumn) - 1 + $pNumCols);
} }
// Create new row reference // Create new row reference
@@ -916,7 +906,8 @@ class PHPExcel_ReferenceHelper
* *
* @throws PHPExcel_Exception * @throws PHPExcel_Exception
*/ */
public final function __clone() { final public function __clone()
{
throw new PHPExcel_Exception("Cloning a Singleton is not allowed!"); throw new PHPExcel_Exception("Cloning a Singleton is not allowed!");
} }
} }

View File

@@ -1,8 +1,9 @@
<?php <?php
/** /**
* PHPExcel * PHPExcel_RichText
* *
* Copyright (c) 2006 - 2014 PHPExcel * Copyright (c) 2006 - 2015 PHPExcel
* *
* This library is free software; you can redistribute it and/or * This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public * modify it under the terms of the GNU Lesser General Public
@@ -20,18 +21,9 @@
* *
* @category PHPExcel * @category PHPExcel
* @package PHPExcel_RichText * @package PHPExcel_RichText
* @copyright Copyright (c) 2006 - 2014 PHPExcel (http://www.codeplex.com/PHPExcel) * @copyright Copyright (c) 2006 - 2015 PHPExcel (http://www.codeplex.com/PHPExcel)
* @license http://www.gnu.org/licenses/old-licenses/lgpl-2.1.txt LGPL * @license http://www.gnu.org/licenses/old-licenses/lgpl-2.1.txt LGPL
* @version 1.8.0, 2014-03-02 * @version ##VERSION##, ##DATE##
*/
/**
* PHPExcel_RichText
*
* @category PHPExcel
* @package PHPExcel_RichText
* @copyright Copyright (c) 2006 - 2014 PHPExcel (http://www.codeplex.com/PHPExcel)
*/ */
class PHPExcel_RichText implements PHPExcel_IComparable class PHPExcel_RichText implements PHPExcel_IComparable
{ {
@@ -40,7 +32,7 @@ class PHPExcel_RichText implements PHPExcel_IComparable
* *
* @var PHPExcel_RichText_ITextElement[] * @var PHPExcel_RichText_ITextElement[]
*/ */
private $_richTextElements; private $richTextElements;
/** /**
* Create a new PHPExcel_RichText instance * Create a new PHPExcel_RichText instance
@@ -51,10 +43,10 @@ class PHPExcel_RichText implements PHPExcel_IComparable
public function __construct(PHPExcel_Cell $pCell = null) public function __construct(PHPExcel_Cell $pCell = null)
{ {
// Initialise variables // Initialise variables
$this->_richTextElements = array(); $this->richTextElements = array();
// Rich-Text string attached to cell? // Rich-Text string attached to cell?
if ($pCell !== NULL) { if ($pCell !== null) {
// Add cell text and style // Add cell text and style
if ($pCell->getValue() != "") { if ($pCell->getValue() != "") {
$objRun = new PHPExcel_RichText_Run($pCell->getValue()); $objRun = new PHPExcel_RichText_Run($pCell->getValue());
@@ -76,7 +68,7 @@ class PHPExcel_RichText implements PHPExcel_IComparable
*/ */
public function addText(PHPExcel_RichText_ITextElement $pText = null) public function addText(PHPExcel_RichText_ITextElement $pText = null)
{ {
$this->_richTextElements[] = $pText; $this->richTextElements[] = $pText;
return $this; return $this;
} }
@@ -119,7 +111,7 @@ class PHPExcel_RichText implements PHPExcel_IComparable
$returnValue = ''; $returnValue = '';
// Loop through all PHPExcel_RichText_ITextElement // Loop through all PHPExcel_RichText_ITextElement
foreach ($this->_richTextElements as $text) { foreach ($this->richTextElements as $text) {
$returnValue .= $text->getText(); $returnValue .= $text->getText();
} }
@@ -144,7 +136,7 @@ class PHPExcel_RichText implements PHPExcel_IComparable
*/ */
public function getRichTextElements() public function getRichTextElements()
{ {
return $this->_richTextElements; return $this->richTextElements;
} }
/** /**
@@ -157,7 +149,7 @@ class PHPExcel_RichText implements PHPExcel_IComparable
public function setRichTextElements($pElements = null) public function setRichTextElements($pElements = null)
{ {
if (is_array($pElements)) { if (is_array($pElements)) {
$this->_richTextElements = $pElements; $this->richTextElements = $pElements;
} else { } else {
throw new PHPExcel_Exception("Invalid PHPExcel_RichText_ITextElement[] array passed."); throw new PHPExcel_Exception("Invalid PHPExcel_RichText_ITextElement[] array passed.");
} }
@@ -172,13 +164,13 @@ class PHPExcel_RichText implements PHPExcel_IComparable
public function getHashCode() public function getHashCode()
{ {
$hashElements = ''; $hashElements = '';
foreach ($this->_richTextElements as $element) { foreach ($this->richTextElements as $element) {
$hashElements .= $element->getHashCode(); $hashElements .= $element->getHashCode();
} }
return md5( return md5(
$hashElements $hashElements .
. __CLASS__ __CLASS__
); );
} }

View File

@@ -1,6 +1,7 @@
<?php <?php
/** /**
* PHPExcel * PHPExcel_RichText_ITextElement
* *
* This library is free software; you can redistribute it and/or * This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public * modify it under the terms of the GNU Lesser General Public
@@ -18,18 +19,9 @@
* *
* @category PHPExcel * @category PHPExcel
* @package PHPExcel_RichText * @package PHPExcel_RichText
* @copyright Copyright (c) 2006 - 2014 PHPExcel (http://www.codeplex.com/PHPExcel) * @copyright Copyright (c) 2006 - 2015 PHPExcel (http://www.codeplex.com/PHPExcel)
* @license http://www.gnu.org/licenses/old-licenses/lgpl-2.1.txt LGPL * @license http://www.gnu.org/licenses/old-licenses/lgpl-2.1.txt LGPL
* @version 1.8.0, 2014-03-02 * @version ##VERSION##, ##DATE##
*/
/**
* PHPExcel_RichText_ITextElement
*
* @category PHPExcel
* @package PHPExcel_RichText
* @copyright Copyright (c) 2006 - 2014 PHPExcel (http://www.codeplex.com/PHPExcel)
*/ */
interface PHPExcel_RichText_ITextElement interface PHPExcel_RichText_ITextElement
{ {

View File

@@ -1,6 +1,7 @@
<?php <?php
/** /**
* PHPExcel * PHPExcel_RichText_Run
* *
* This library is free software; you can redistribute it and/or * This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public * modify it under the terms of the GNU Lesser General Public
@@ -18,18 +19,9 @@
* *
* @category PHPExcel * @category PHPExcel
* @package PHPExcel_RichText * @package PHPExcel_RichText
* @copyright Copyright (c) 2006 - 2014 PHPExcel (http://www.codeplex.com/PHPExcel) * @copyright Copyright (c) 2006 - 2015 PHPExcel (http://www.codeplex.com/PHPExcel)
* @license http://www.gnu.org/licenses/old-licenses/lgpl-2.1.txt LGPL * @license http://www.gnu.org/licenses/old-licenses/lgpl-2.1.txt LGPL
* @version 1.8.0, 2014-03-02 * @version ##VERSION##, ##DATE##
*/
/**
* PHPExcel_RichText_Run
*
* @category PHPExcel
* @package PHPExcel_RichText
* @copyright Copyright (c) 2006 - 2014 PHPExcel (http://www.codeplex.com/PHPExcel)
*/ */
class PHPExcel_RichText_Run extends PHPExcel_RichText_TextElement implements PHPExcel_RichText_ITextElement class PHPExcel_RichText_Run extends PHPExcel_RichText_TextElement implements PHPExcel_RichText_ITextElement
{ {
@@ -38,7 +30,7 @@ class PHPExcel_RichText_Run extends PHPExcel_RichText_TextElement implements PHP
* *
* @var PHPExcel_Style_Font * @var PHPExcel_Style_Font
*/ */
private $_font; private $font;
/** /**
* Create a new PHPExcel_RichText_Run instance * Create a new PHPExcel_RichText_Run instance
@@ -49,7 +41,7 @@ class PHPExcel_RichText_Run extends PHPExcel_RichText_TextElement implements PHP
{ {
// Initialise variables // Initialise variables
$this->setText($pText); $this->setText($pText);
$this->_font = new PHPExcel_Style_Font(); $this->font = new PHPExcel_Style_Font();
} }
/** /**
@@ -57,8 +49,9 @@ class PHPExcel_RichText_Run extends PHPExcel_RichText_TextElement implements PHP
* *
* @return PHPExcel_Style_Font * @return PHPExcel_Style_Font
*/ */
public function getFont() { public function getFont()
return $this->_font; {
return $this->font;
} }
/** /**
@@ -68,8 +61,9 @@ class PHPExcel_RichText_Run extends PHPExcel_RichText_TextElement implements PHP
* @throws PHPExcel_Exception * @throws PHPExcel_Exception
* @return PHPExcel_RichText_ITextElement * @return PHPExcel_RichText_ITextElement
*/ */
public function setFont(PHPExcel_Style_Font $pFont = null) { public function setFont(PHPExcel_Style_Font $pFont = null)
$this->_font = $pFont; {
$this->font = $pFont;
return $this; return $this;
} }
@@ -78,18 +72,20 @@ class PHPExcel_RichText_Run extends PHPExcel_RichText_TextElement implements PHP
* *
* @return string Hash code * @return string Hash code
*/ */
public function getHashCode() { public function getHashCode()
{
return md5( return md5(
$this->getText() $this->getText() .
. $this->_font->getHashCode() $this->font->getHashCode() .
. __CLASS__ __CLASS__
); );
} }
/** /**
* Implement PHP __clone to create a deep clone, not just a shallow copy. * Implement PHP __clone to create a deep clone, not just a shallow copy.
*/ */
public function __clone() { public function __clone()
{
$vars = get_object_vars($this); $vars = get_object_vars($this);
foreach ($vars as $key => $value) { foreach ($vars as $key => $value) {
if (is_object($value)) { if (is_object($value)) {

View File

@@ -1,6 +1,7 @@
<?php <?php
/** /**
* PHPExcel * PHPExcel_RichText_TextElement
* *
* This library is free software; you can redistribute it and/or * This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public * modify it under the terms of the GNU Lesser General Public
@@ -18,18 +19,9 @@
* *
* @category PHPExcel * @category PHPExcel
* @package PHPExcel_RichText * @package PHPExcel_RichText
* @copyright Copyright (c) 2006 - 2014 PHPExcel (http://www.codeplex.com/PHPExcel) * @copyright Copyright (c) 2006 - 2015 PHPExcel (http://www.codeplex.com/PHPExcel)
* @license http://www.gnu.org/licenses/old-licenses/lgpl-2.1.txt LGPL * @license http://www.gnu.org/licenses/old-licenses/lgpl-2.1.txt LGPL
* @version 1.8.0, 2014-03-02 * @version ##VERSION##, ##DATE##
*/
/**
* PHPExcel_RichText_TextElement
*
* @category PHPExcel
* @package PHPExcel_RichText
* @copyright Copyright (c) 2006 - 2014 PHPExcel (http://www.codeplex.com/PHPExcel)
*/ */
class PHPExcel_RichText_TextElement implements PHPExcel_RichText_ITextElement class PHPExcel_RichText_TextElement implements PHPExcel_RichText_ITextElement
{ {
@@ -38,7 +30,7 @@ class PHPExcel_RichText_TextElement implements PHPExcel_RichText_ITextElement
* *
* @var string * @var string
*/ */
private $_text; private $text;
/** /**
* Create a new PHPExcel_RichText_TextElement instance * Create a new PHPExcel_RichText_TextElement instance
@@ -48,7 +40,7 @@ class PHPExcel_RichText_TextElement implements PHPExcel_RichText_ITextElement
public function __construct($pText = '') public function __construct($pText = '')
{ {
// Initialise variables // Initialise variables
$this->_text = $pText; $this->text = $pText;
} }
/** /**
@@ -56,8 +48,9 @@ class PHPExcel_RichText_TextElement implements PHPExcel_RichText_ITextElement
* *
* @return string Text * @return string Text
*/ */
public function getText() { public function getText()
return $this->_text; {
return $this->text;
} }
/** /**
@@ -66,8 +59,9 @@ class PHPExcel_RichText_TextElement implements PHPExcel_RichText_ITextElement
* @param $pText string Text * @param $pText string Text
* @return PHPExcel_RichText_ITextElement * @return PHPExcel_RichText_ITextElement
*/ */
public function setText($pText = '') { public function setText($pText = '')
$this->_text = $pText; {
$this->text = $pText;
return $this; return $this;
} }
@@ -76,7 +70,8 @@ class PHPExcel_RichText_TextElement implements PHPExcel_RichText_ITextElement
* *
* @return PHPExcel_Style_Font * @return PHPExcel_Style_Font
*/ */
public function getFont() { public function getFont()
{
return null; return null;
} }
@@ -85,17 +80,19 @@ class PHPExcel_RichText_TextElement implements PHPExcel_RichText_ITextElement
* *
* @return string Hash code * @return string Hash code
*/ */
public function getHashCode() { public function getHashCode()
{
return md5( return md5(
$this->_text $this->text .
. __CLASS__ __CLASS__
); );
} }
/** /**
* Implement PHP __clone to create a deep clone, not just a shallow copy. * Implement PHP __clone to create a deep clone, not just a shallow copy.
*/ */
public function __clone() { public function __clone()
{
$vars = get_object_vars($this); $vars = get_object_vars($this);
foreach ($vars as $key => $value) { foreach ($vars as $key => $value) {
if (is_object($value)) { if (is_object($value)) {

View File

@@ -1,8 +1,18 @@
<?php <?php
/** PHPExcel root directory */
if (!defined('PHPEXCEL_ROOT')) {
/**
* @ignore
*/
define('PHPEXCEL_ROOT', dirname(__FILE__) . '/../');
require(PHPEXCEL_ROOT . 'PHPExcel/Autoloader.php');
}
/** /**
* PHPExcel * PHPExcel_Settings
* *
* Copyright (c) 2006 - 2014 PHPExcel * Copyright (c) 2006 - 2015 PHPExcel
* *
* This library is free software; you can redistribute it and/or * This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public * modify it under the terms of the GNU Lesser General Public
@@ -20,21 +30,10 @@
* *
* @category PHPExcel * @category PHPExcel
* @package PHPExcel_Settings * @package PHPExcel_Settings
* @copyright Copyright (c) 2006 - 2014 PHPExcel (http://www.codeplex.com/PHPExcel) * @copyright Copyright (c) 2006 - 2015 PHPExcel (http://www.codeplex.com/PHPExcel)
* @license http://www.gnu.org/licenses/old-licenses/lgpl-2.1.txt LGPL * @license http://www.gnu.org/licenses/old-licenses/lgpl-2.1.txt LGPL
* @version 1.8.0, 2014-03-02 * @version ##VERSION##, ##DATE##
*/ */
/** PHPExcel root directory */
if (!defined('PHPEXCEL_ROOT')) {
/**
* @ignore
*/
define('PHPEXCEL_ROOT', dirname(__FILE__) . '/../');
require(PHPEXCEL_ROOT . 'PHPExcel/Autoloader.php');
}
class PHPExcel_Settings class PHPExcel_Settings
{ {
/** constants */ /** constants */
@@ -51,11 +50,11 @@ class PHPExcel_Settings
const PDF_RENDERER_MPDF = 'mPDF'; const PDF_RENDERER_MPDF = 'mPDF';
private static $_chartRenderers = array( private static $chartRenderers = array(
self::CHART_RENDERER_JPGRAPH, self::CHART_RENDERER_JPGRAPH,
); );
private static $_pdfRenderers = array( private static $pdfRenderers = array(
self::PDF_RENDERER_TCPDF, self::PDF_RENDERER_TCPDF,
self::PDF_RENDERER_DOMPDF, self::PDF_RENDERER_DOMPDF,
self::PDF_RENDERER_MPDF, self::PDF_RENDERER_MPDF,
@@ -69,7 +68,7 @@ class PHPExcel_Settings
* *
* @var string * @var string
*/ */
private static $_zipClass = self::ZIPARCHIVE; private static $zipClass = self::ZIPARCHIVE;
/** /**
@@ -79,14 +78,14 @@ class PHPExcel_Settings
* *
* @var string * @var string
*/ */
private static $_chartRendererName = NULL; private static $chartRendererName;
/** /**
* Directory Path to the external Library used for rendering charts * Directory Path to the external Library used for rendering charts
* *
* @var string * @var string
*/ */
private static $_chartRendererPath = NULL; private static $chartRendererPath;
/** /**
@@ -96,21 +95,21 @@ class PHPExcel_Settings
* *
* @var string * @var string
*/ */
private static $_pdfRendererName = NULL; private static $pdfRendererName;
/** /**
* Directory Path to the external Library used for rendering PDF files * Directory Path to the external Library used for rendering PDF files
* *
* @var string * @var string
*/ */
private static $_pdfRendererPath = NULL; private static $pdfRendererPath;
/** /**
* Default options for libxml loader * Default options for libxml loader
* *
* @var int * @var int
*/ */
private static $_libXmlLoaderOptions = null; private static $libXmlLoaderOptions = null;
/** /**
* Set the Zip handler Class that PHPExcel should use for Zip file management (PCLZip or ZipArchive) * Set the Zip handler Class that PHPExcel should use for Zip file management (PCLZip or ZipArchive)
@@ -123,11 +122,11 @@ class PHPExcel_Settings
{ {
if (($zipClass === self::PCLZIP) || if (($zipClass === self::PCLZIP) ||
($zipClass === self::ZIPARCHIVE)) { ($zipClass === self::ZIPARCHIVE)) {
self::$_zipClass = $zipClass; self::$zipClass = $zipClass;
return TRUE; return true;
}
return false;
} }
return FALSE;
} // function setZipClass()
/** /**
@@ -140,8 +139,8 @@ class PHPExcel_Settings
*/ */
public static function getZipClass() public static function getZipClass()
{ {
return self::$_zipClass; return self::$zipClass;
} // function getZipClass() }
/** /**
@@ -152,7 +151,7 @@ class PHPExcel_Settings
public static function getCacheStorageMethod() public static function getCacheStorageMethod()
{ {
return PHPExcel_CachedObjectStorageFactory::getCacheStorageMethod(); return PHPExcel_CachedObjectStorageFactory::getCacheStorageMethod();
} // function getCacheStorageMethod() }
/** /**
@@ -163,7 +162,7 @@ class PHPExcel_Settings
public static function getCacheStorageClass() public static function getCacheStorageClass()
{ {
return PHPExcel_CachedObjectStorageFactory::getCacheStorageClass(); return PHPExcel_CachedObjectStorageFactory::getCacheStorageClass();
} // function getCacheStorageClass() }
/** /**
@@ -173,13 +172,10 @@ class PHPExcel_Settings
* @param array $arguments Optional configuration arguments for the cacheing method * @param array $arguments Optional configuration arguments for the cacheing method
* @return boolean Success or failure * @return boolean Success or failure
*/ */
public static function setCacheStorageMethod( public static function setCacheStorageMethod($method = PHPExcel_CachedObjectStorageFactory::cache_in_memory, $arguments = array())
$method = PHPExcel_CachedObjectStorageFactory::cache_in_memory,
$arguments = array()
)
{ {
return PHPExcel_CachedObjectStorageFactory::initialize($method, $arguments); return PHPExcel_CachedObjectStorageFactory::initialize($method, $arguments);
} // function setCacheStorageMethod() }
/** /**
@@ -188,10 +184,10 @@ class PHPExcel_Settings
* @param string $locale The locale code to use (e.g. "fr" or "pt_br" or "en_uk") * @param string $locale The locale code to use (e.g. "fr" or "pt_br" or "en_uk")
* @return boolean Success or failure * @return boolean Success or failure
*/ */
public static function setLocale($locale='en_us') public static function setLocale($locale = 'en_us')
{ {
return PHPExcel_Calculation::getInstance()->setLocale($locale); return PHPExcel_Calculation::getInstance()->setLocale($locale);
} // function setLocale() }
/** /**
@@ -205,10 +201,11 @@ class PHPExcel_Settings
*/ */
public static function setChartRenderer($libraryName, $libraryBaseDir) public static function setChartRenderer($libraryName, $libraryBaseDir)
{ {
if (!self::setChartRendererName($libraryName)) if (!self::setChartRendererName($libraryName)) {
return FALSE; return false;
}
return self::setChartRendererPath($libraryBaseDir); return self::setChartRendererPath($libraryBaseDir);
} // function setChartRenderer() }
/** /**
@@ -221,14 +218,13 @@ class PHPExcel_Settings
*/ */
public static function setChartRendererName($libraryName) public static function setChartRendererName($libraryName)
{ {
if (!in_array($libraryName,self::$_chartRenderers)) { if (!in_array($libraryName, self::$chartRenderers)) {
return FALSE; return false;
} }
self::$chartRendererName = $libraryName;
self::$_chartRendererName = $libraryName; return true;
}
return TRUE;
} // function setChartRendererName()
/** /**
@@ -240,12 +236,12 @@ class PHPExcel_Settings
public static function setChartRendererPath($libraryBaseDir) public static function setChartRendererPath($libraryBaseDir)
{ {
if ((file_exists($libraryBaseDir) === false) || (is_readable($libraryBaseDir) === false)) { if ((file_exists($libraryBaseDir) === false) || (is_readable($libraryBaseDir) === false)) {
return FALSE; return false;
} }
self::$_chartRendererPath = $libraryBaseDir; self::$chartRendererPath = $libraryBaseDir;
return TRUE; return true;
} // function setChartRendererPath() }
/** /**
@@ -257,8 +253,8 @@ class PHPExcel_Settings
*/ */
public static function getChartRendererName() public static function getChartRendererName()
{ {
return self::$_chartRendererName; return self::$chartRendererName;
} // function getChartRendererName() }
/** /**
@@ -269,8 +265,8 @@ class PHPExcel_Settings
*/ */
public static function getChartRendererPath() public static function getChartRendererPath()
{ {
return self::$_chartRendererPath; return self::$chartRendererPath;
} // function getChartRendererPath() }
/** /**
@@ -286,10 +282,11 @@ class PHPExcel_Settings
*/ */
public static function setPdfRenderer($libraryName, $libraryBaseDir) public static function setPdfRenderer($libraryName, $libraryBaseDir)
{ {
if (!self::setPdfRendererName($libraryName)) if (!self::setPdfRendererName($libraryName)) {
return FALSE; return false;
}
return self::setPdfRendererPath($libraryBaseDir); return self::setPdfRendererPath($libraryBaseDir);
} // function setPdfRenderer() }
/** /**
@@ -304,14 +301,13 @@ class PHPExcel_Settings
*/ */
public static function setPdfRendererName($libraryName) public static function setPdfRendererName($libraryName)
{ {
if (!in_array($libraryName,self::$_pdfRenderers)) { if (!in_array($libraryName, self::$pdfRenderers)) {
return FALSE; return false;
} }
self::$pdfRendererName = $libraryName;
self::$_pdfRendererName = $libraryName; return true;
}
return TRUE;
} // function setPdfRendererName()
/** /**
@@ -323,12 +319,12 @@ class PHPExcel_Settings
public static function setPdfRendererPath($libraryBaseDir) public static function setPdfRendererPath($libraryBaseDir)
{ {
if ((file_exists($libraryBaseDir) === false) || (is_readable($libraryBaseDir) === false)) { if ((file_exists($libraryBaseDir) === false) || (is_readable($libraryBaseDir) === false)) {
return FALSE; return false;
} }
self::$_pdfRendererPath = $libraryBaseDir; self::$pdfRendererPath = $libraryBaseDir;
return TRUE; return true;
} // function setPdfRendererPath() }
/** /**
@@ -342,8 +338,8 @@ class PHPExcel_Settings
*/ */
public static function getPdfRendererName() public static function getPdfRendererName()
{ {
return self::$_pdfRendererName; return self::$pdfRendererName;
} // function getPdfRendererName() }
/** /**
* Return the directory path to the PDF Rendering Library that PHPExcel is currently configured to use * Return the directory path to the PDF Rendering Library that PHPExcel is currently configured to use
@@ -353,8 +349,8 @@ class PHPExcel_Settings
*/ */
public static function getPdfRendererPath() public static function getPdfRendererPath()
{ {
return self::$_pdfRendererPath; return self::$pdfRendererPath;
} // function getPdfRendererPath() }
/** /**
* Set default options for libxml loader * Set default options for libxml loader
@@ -363,12 +359,14 @@ class PHPExcel_Settings
*/ */
public static function setLibXmlLoaderOptions($options = null) public static function setLibXmlLoaderOptions($options = null)
{ {
if (is_null($options)) { if (is_null($options) && defined(LIBXML_DTDLOAD)) {
$options = LIBXML_DTDLOAD | LIBXML_DTDATTR; $options = LIBXML_DTDLOAD | LIBXML_DTDATTR;
} }
if (version_compare(PHP_VERSION, '5.2.11') >= 0) {
@libxml_disable_entity_loader($options == (LIBXML_DTDLOAD | LIBXML_DTDATTR)); @libxml_disable_entity_loader($options == (LIBXML_DTDLOAD | LIBXML_DTDATTR));
self::$_libXmlLoaderOptions = $options; }
} // function setLibXmlLoaderOptions self::$libXmlLoaderOptions = $options;
}
/** /**
* Get default options for libxml loader. * Get default options for libxml loader.
@@ -378,10 +376,12 @@ class PHPExcel_Settings
*/ */
public static function getLibXmlLoaderOptions() public static function getLibXmlLoaderOptions()
{ {
if (is_null(self::$_libXmlLoaderOptions)) { if (is_null(self::$libXmlLoaderOptions) && defined(LIBXML_DTDLOAD)) {
self::setLibXmlLoaderOptions(LIBXML_DTDLOAD | LIBXML_DTDATTR); self::setLibXmlLoaderOptions(LIBXML_DTDLOAD | LIBXML_DTDATTR);
} }
@libxml_disable_entity_loader($options == (LIBXML_DTDLOAD | LIBXML_DTDATTR)); if (version_compare(PHP_VERSION, '5.2.11') >= 0) {
return self::$_libXmlLoaderOptions; @libxml_disable_entity_loader(self::$libXmlLoaderOptions == (LIBXML_DTDLOAD | LIBXML_DTDATTR));
} // function getLibXmlLoaderOptions }
return self::$libXmlLoaderOptions;
}
} }

View File

@@ -1,8 +1,9 @@
<?php <?php
/** /**
* PHPExcel * PHPExcel_Shared_CodePage
* *
* Copyright (c) 2006 - 2014 PHPExcel * Copyright (c) 2006 - 2015 PHPExcel
* *
* This library is free software; you can redistribute it and/or * This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public * modify it under the terms of the GNU Lesser General Public
@@ -20,18 +21,9 @@
* *
* @category PHPExcel * @category PHPExcel
* @package PHPExcel_Shared * @package PHPExcel_Shared
* @copyright Copyright (c) 2006 - 2014 PHPExcel (http://www.codeplex.com/PHPExcel) * @copyright Copyright (c) 2006 - 2015 PHPExcel (http://www.codeplex.com/PHPExcel)
* @license http://www.gnu.org/licenses/old-licenses/lgpl-2.1.txt LGPL * @license http://www.gnu.org/licenses/old-licenses/lgpl-2.1.txt LGPL
* @version 1.8.0, 2014-03-02 * @version ##VERSION##, ##DATE##
*/
/**
* PHPExcel_Shared_CodePage
*
* @category PHPExcel
* @package PHPExcel_Shared
* @copyright Copyright (c) 2006 - 2014 PHPExcel (http://www.codeplex.com/PHPExcel)
*/ */
class PHPExcel_Shared_CodePage class PHPExcel_Shared_CodePage
{ {
@@ -46,57 +38,119 @@ class PHPExcel_Shared_CodePage
public static function NumberToName($codePage = 1252) public static function NumberToName($codePage = 1252)
{ {
switch ($codePage) { switch ($codePage) {
case 367: return 'ASCII'; break; // ASCII case 367:
case 437: return 'CP437'; break; // OEM US return 'ASCII'; // ASCII
case 720: throw new PHPExcel_Exception('Code page 720 not supported.'); case 437:
break; // OEM Arabic return 'CP437'; // OEM US
case 737: return 'CP737'; break; // OEM Greek case 720:
case 775: return 'CP775'; break; // OEM Baltic throw new PHPExcel_Exception('Code page 720 not supported.'); // OEM Arabic
case 850: return 'CP850'; break; // OEM Latin I case 737:
case 852: return 'CP852'; break; // OEM Latin II (Central European) return 'CP737'; // OEM Greek
case 855: return 'CP855'; break; // OEM Cyrillic case 775:
case 857: return 'CP857'; break; // OEM Turkish return 'CP775'; // OEM Baltic
case 858: return 'CP858'; break; // OEM Multilingual Latin I with Euro case 850:
case 860: return 'CP860'; break; // OEM Portugese return 'CP850'; // OEM Latin I
case 861: return 'CP861'; break; // OEM Icelandic case 852:
case 862: return 'CP862'; break; // OEM Hebrew return 'CP852'; // OEM Latin II (Central European)
case 863: return 'CP863'; break; // OEM Canadian (French) case 855:
case 864: return 'CP864'; break; // OEM Arabic return 'CP855'; // OEM Cyrillic
case 865: return 'CP865'; break; // OEM Nordic case 857:
case 866: return 'CP866'; break; // OEM Cyrillic (Russian) return 'CP857'; // OEM Turkish
case 869: return 'CP869'; break; // OEM Greek (Modern) case 858:
case 874: return 'CP874'; break; // ANSI Thai return 'CP858'; // OEM Multilingual Latin I with Euro
case 932: return 'CP932'; break; // ANSI Japanese Shift-JIS case 860:
case 936: return 'CP936'; break; // ANSI Chinese Simplified GBK return 'CP860'; // OEM Portugese
case 949: return 'CP949'; break; // ANSI Korean (Wansung) case 861:
case 950: return 'CP950'; break; // ANSI Chinese Traditional BIG5 return 'CP861'; // OEM Icelandic
case 1200: return 'UTF-16LE'; break; // UTF-16 (BIFF8) case 862:
case 1250: return 'CP1250'; break; // ANSI Latin II (Central European) return 'CP862'; // OEM Hebrew
case 1251: return 'CP1251'; break; // ANSI Cyrillic case 863:
case 0: // CodePage is not always correctly set when the xls file was saved by Apple's Numbers program return 'CP863'; // OEM Canadian (French)
case 1252: return 'CP1252'; break; // ANSI Latin I (BIFF4-BIFF7) case 864:
case 1253: return 'CP1253'; break; // ANSI Greek return 'CP864'; // OEM Arabic
case 1254: return 'CP1254'; break; // ANSI Turkish case 865:
case 1255: return 'CP1255'; break; // ANSI Hebrew return 'CP865'; // OEM Nordic
case 1256: return 'CP1256'; break; // ANSI Arabic case 866:
case 1257: return 'CP1257'; break; // ANSI Baltic return 'CP866'; // OEM Cyrillic (Russian)
case 1258: return 'CP1258'; break; // ANSI Vietnamese case 869:
case 1361: return 'CP1361'; break; // ANSI Korean (Johab) return 'CP869'; // OEM Greek (Modern)
case 10000: return 'MAC'; break; // Apple Roman case 874:
case 10006: return 'MACGREEK'; break; // Macintosh Greek return 'CP874'; // ANSI Thai
case 10007: return 'MACCYRILLIC'; break; // Macintosh Cyrillic case 932:
case 10008: return 'CP936'; break; // Macintosh - Simplified Chinese (GB 2312) return 'CP932'; // ANSI Japanese Shift-JIS
case 10029: return 'MACCENTRALEUROPE'; break; // Macintosh Central Europe case 936:
case 10079: return 'MACICELAND'; break; // Macintosh Icelandic return 'CP936'; // ANSI Chinese Simplified GBK
case 10081: return 'MACTURKISH'; break; // Macintosh Turkish case 949:
case 32768: return 'MAC'; break; // Apple Roman return 'CP949'; // ANSI Korean (Wansung)
case 32769: throw new PHPExcel_Exception('Code page 32769 not supported.'); case 950:
break; // ANSI Latin I (BIFF2-BIFF3) return 'CP950'; // ANSI Chinese Traditional BIG5
case 65000: return 'UTF-7'; break; // Unicode (UTF-7) case 1200:
case 65001: return 'UTF-8'; break; // Unicode (UTF-8) return 'UTF-16LE'; // UTF-16 (BIFF8)
case 1250:
return 'CP1250'; // ANSI Latin II (Central European)
case 1251:
return 'CP1251'; // ANSI Cyrillic
case 0:
// CodePage is not always correctly set when the xls file was saved by Apple's Numbers program
case 1252:
return 'CP1252'; // ANSI Latin I (BIFF4-BIFF7)
case 1253:
return 'CP1253'; // ANSI Greek
case 1254:
return 'CP1254'; // ANSI Turkish
case 1255:
return 'CP1255'; // ANSI Hebrew
case 1256:
return 'CP1256'; // ANSI Arabic
case 1257:
return 'CP1257'; // ANSI Baltic
case 1258:
return 'CP1258'; // ANSI Vietnamese
case 1361:
return 'CP1361'; // ANSI Korean (Johab)
case 10000:
return 'MAC'; // Apple Roman
case 10001:
return 'CP932'; // Macintosh Japanese
case 10002:
return 'CP950'; // Macintosh Chinese Traditional
case 10003:
return 'CP1361'; // Macintosh Korean
case 10004:
return 'MACARABIC'; // Apple Arabic
case 10005:
return 'MACHEBREW'; // Apple Hebrew
case 10006:
return 'MACGREEK'; // Macintosh Greek
case 10007:
return 'MACCYRILLIC'; // Macintosh Cyrillic
case 10008:
return 'CP936'; // Macintosh - Simplified Chinese (GB 2312)
case 10010:
return 'MACROMANIA'; // Macintosh Romania
case 10017:
return 'MACUKRAINE'; // Macintosh Ukraine
case 10021:
return 'MACTHAI'; // Macintosh Thai
case 10029:
return 'MACCENTRALEUROPE'; // Macintosh Central Europe
case 10079:
return 'MACICELAND'; // Macintosh Icelandic
case 10081:
return 'MACTURKISH'; // Macintosh Turkish
case 10082:
return 'MACCROATIAN'; // Macintosh Croatian
case 21010:
return 'UTF-16LE'; // UTF-16 (BIFF8) This isn't correct, but some Excel writer libraries erroneously use Codepage 21010 for UTF-16LE
case 32768:
return 'MAC'; // Apple Roman
case 32769:
throw new PHPExcel_Exception('Code page 32769 not supported.'); // ANSI Latin I (BIFF2-BIFF3)
case 65000:
return 'UTF-7'; // Unicode (UTF-7)
case 65001:
return 'UTF-8'; // Unicode (UTF-8)
} }
throw new PHPExcel_Exception('Unknown codepage: ' . $codePage); throw new PHPExcel_Exception('Unknown codepage: ' . $codePage);
} }
} }

View File

@@ -1,9 +1,9 @@
<?php <?php
/** /**
* PHPExcel * PHPExcel_Shared_Date
* *
* Copyright (c) 2006 - 2014 PHPExcel * Copyright (c) 2006 - 2015 PHPExcel
* *
* This library is free software; you can redistribute it and/or * This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public * modify it under the terms of the GNU Lesser General Public
@@ -21,18 +21,9 @@
* *
* @category PHPExcel * @category PHPExcel
* @package PHPExcel_Shared * @package PHPExcel_Shared
* @copyright Copyright (c) 2006 - 2014 PHPExcel (http://www.codeplex.com/PHPExcel) * @copyright Copyright (c) 2006 - 2015 PHPExcel (http://www.codeplex.com/PHPExcel)
* @license http://www.gnu.org/licenses/old-licenses/lgpl-2.1.txt LGPL * @license http://www.gnu.org/licenses/old-licenses/lgpl-2.1.txt LGPL
* @version 1.8.0, 2014-03-02 * @version ##VERSION##, ##DATE##
*/
/**
* PHPExcel_Shared_Date
*
* @category PHPExcel
* @package PHPExcel_Shared
* @copyright Copyright (c) 2006 - 2014 PHPExcel (http://www.codeplex.com/PHPExcel)
*/ */
class PHPExcel_Shared_Date class PHPExcel_Shared_Date
{ {
@@ -47,7 +38,8 @@ class PHPExcel_Shared_Date
* @public * @public
* @var string[] * @var string[]
*/ */
public static $_monthNames = array( 'Jan' => 'January', public static $monthNames = array(
'Jan' => 'January',
'Feb' => 'February', 'Feb' => 'February',
'Mar' => 'March', 'Mar' => 'March',
'Apr' => 'April', 'Apr' => 'April',
@@ -68,7 +60,8 @@ class PHPExcel_Shared_Date
* @public * @public
* @var string[] * @var string[]
*/ */
public static $_numberSuffixes = array( 'st', public static $numberSuffixes = array(
'st',
'nd', 'nd',
'rd', 'rd',
'th', 'th',
@@ -80,7 +73,7 @@ class PHPExcel_Shared_Date
* @private * @private
* @var int * @var int
*/ */
protected static $_excelBaseDate = self::CALENDAR_WINDOWS_1900; protected static $excelBaseDate = self::CALENDAR_WINDOWS_1900;
/** /**
* Set the Excel calendar (Windows 1900 or Mac 1904) * Set the Excel calendar (Windows 1900 or Mac 1904)
@@ -88,14 +81,15 @@ class PHPExcel_Shared_Date
* @param integer $baseDate Excel base date (1900 or 1904) * @param integer $baseDate Excel base date (1900 or 1904)
* @return boolean Success or failure * @return boolean Success or failure
*/ */
public static function setExcelCalendar($baseDate) { public static function setExcelCalendar($baseDate)
{
if (($baseDate == self::CALENDAR_WINDOWS_1900) || if (($baseDate == self::CALENDAR_WINDOWS_1900) ||
($baseDate == self::CALENDAR_MAC_1904)) { ($baseDate == self::CALENDAR_MAC_1904)) {
self::$_excelBaseDate = $baseDate; self::$excelBaseDate = $baseDate;
return TRUE; return true;
}
return false;
} }
return FALSE;
} // function setExcelCalendar()
/** /**
@@ -103,34 +97,36 @@ class PHPExcel_Shared_Date
* *
* @return integer Excel base date (1900 or 1904) * @return integer Excel base date (1900 or 1904)
*/ */
public static function getExcelCalendar() { public static function getExcelCalendar()
return self::$_excelBaseDate; {
} // function getExcelCalendar() return self::$excelBaseDate;
}
/** /**
* Convert a date from Excel to PHP * Convert a date from Excel to PHP
* *
* @param long $dateValue Excel date/time value * @param integer $dateValue Excel date/time value
* @param boolean $adjustToTimezone Flag indicating whether $dateValue should be treated as * @param boolean $adjustToTimezone Flag indicating whether $dateValue should be treated as
* a UST timestamp, or adjusted to UST * a UST timestamp, or adjusted to UST
* @param string $timezone The timezone for finding the adjustment from UST * @param string $timezone The timezone for finding the adjustment from UST
* @return long PHP serialized date/time * @return integer PHP serialized date/time
*/ */
public static function ExcelToPHP($dateValue = 0, $adjustToTimezone = FALSE, $timezone = NULL) { public static function ExcelToPHP($dateValue = 0, $adjustToTimezone = false, $timezone = null)
if (self::$_excelBaseDate == self::CALENDAR_WINDOWS_1900) { {
$my_excelBaseDate = 25569; if (self::$excelBaseDate == self::CALENDAR_WINDOWS_1900) {
$myexcelBaseDate = 25569;
// Adjust for the spurious 29-Feb-1900 (Day 60) // Adjust for the spurious 29-Feb-1900 (Day 60)
if ($dateValue < 60) { if ($dateValue < 60) {
--$my_excelBaseDate; --$myexcelBaseDate;
} }
} else { } else {
$my_excelBaseDate = 24107; $myexcelBaseDate = 24107;
} }
// Perform conversion // Perform conversion
if ($dateValue >= 1) { if ($dateValue >= 1) {
$utcDays = $dateValue - $my_excelBaseDate; $utcDays = $dateValue - $myexcelBaseDate;
$returnValue = round($utcDays * 86400); $returnValue = round($utcDays * 86400);
if (($returnValue <= PHP_INT_MAX) && ($returnValue >= -PHP_INT_MAX)) { if (($returnValue <= PHP_INT_MAX) && ($returnValue >= -PHP_INT_MAX)) {
$returnValue = (integer) $returnValue; $returnValue = (integer) $returnValue;
@@ -146,18 +142,18 @@ class PHPExcel_Shared_Date
PHPExcel_Shared_TimeZone::getTimezoneAdjustment($timezone, $returnValue) : PHPExcel_Shared_TimeZone::getTimezoneAdjustment($timezone, $returnValue) :
0; 0;
// Return
return $returnValue + $timezoneAdjustment; return $returnValue + $timezoneAdjustment;
} // function ExcelToPHP() }
/** /**
* Convert a date from Excel to a PHP Date/Time object * Convert a date from Excel to a PHP Date/Time object
* *
* @param integer $dateValue Excel date/time value * @param integer $dateValue Excel date/time value
* @return integer PHP date/time object * @return DateTime PHP date/time object
*/ */
public static function ExcelToPHPObject($dateValue = 0) { public static function ExcelToPHPObject($dateValue = 0)
{
$dateTime = self::ExcelToPHP($dateValue); $dateTime = self::ExcelToPHP($dateValue);
$days = floor($dateTime / 86400); $days = floor($dateTime / 86400);
$time = round((($dateTime / 86400) - $days) * 86400); $time = round((($dateTime / 86400) - $days) * 86400);
@@ -166,10 +162,10 @@ class PHPExcel_Shared_Date
$seconds = round($time) - ($hours * 3600) - ($minutes * 60); $seconds = round($time) - ($hours * 3600) - ($minutes * 60);
$dateObj = date_create('1-Jan-1970+'.$days.' days'); $dateObj = date_create('1-Jan-1970+'.$days.' days');
$dateObj->setTime($hours,$minutes,$seconds); $dateObj->setTime($hours, $minutes, $seconds);
return $dateObj; return $dateObj;
} // function ExcelToPHPObject() }
/** /**
@@ -182,48 +178,48 @@ class PHPExcel_Shared_Date
* @return mixed Excel date/time value * @return mixed Excel date/time value
* or boolean FALSE on failure * or boolean FALSE on failure
*/ */
public static function PHPToExcel($dateValue = 0, $adjustToTimezone = FALSE, $timezone = NULL) { public static function PHPToExcel($dateValue = 0, $adjustToTimezone = false, $timezone = null)
{
$saveTimeZone = date_default_timezone_get(); $saveTimeZone = date_default_timezone_get();
date_default_timezone_set('UTC'); date_default_timezone_set('UTC');
$retValue = FALSE; $retValue = false;
if ((is_object($dateValue)) && ($dateValue instanceof DateTime)) { if ((is_object($dateValue)) && ($dateValue instanceof DateTime)) {
$retValue = self::FormattedPHPToExcel( $dateValue->format('Y'), $dateValue->format('m'), $dateValue->format('d'), $retValue = self::FormattedPHPToExcel($dateValue->format('Y'), $dateValue->format('m'), $dateValue->format('d'), $dateValue->format('H'), $dateValue->format('i'), $dateValue->format('s'));
$dateValue->format('H'), $dateValue->format('i'), $dateValue->format('s')
);
} elseif (is_numeric($dateValue)) { } elseif (is_numeric($dateValue)) {
$retValue = self::FormattedPHPToExcel( date('Y',$dateValue), date('m',$dateValue), date('d',$dateValue), $retValue = self::FormattedPHPToExcel(date('Y', $dateValue), date('m', $dateValue), date('d', $dateValue), date('H', $dateValue), date('i', $dateValue), date('s', $dateValue));
date('H',$dateValue), date('i',$dateValue), date('s',$dateValue)
);
} }
date_default_timezone_set($saveTimeZone); date_default_timezone_set($saveTimeZone);
return $retValue; return $retValue;
} // function PHPToExcel() }
/** /**
* FormattedPHPToExcel * FormattedPHPToExcel
* *
* @param long $year * @param integer $year
* @param long $month * @param integer $month
* @param long $day * @param integer $day
* @param long $hours * @param integer $hours
* @param long $minutes * @param integer $minutes
* @param long $seconds * @param integer $seconds
* @return long Excel date/time value * @return integer Excel date/time value
*/ */
public static function FormattedPHPToExcel($year, $month, $day, $hours=0, $minutes=0, $seconds=0) { public static function FormattedPHPToExcel($year, $month, $day, $hours = 0, $minutes = 0, $seconds = 0)
if (self::$_excelBaseDate == self::CALENDAR_WINDOWS_1900) { {
if (self::$excelBaseDate == self::CALENDAR_WINDOWS_1900) {
// //
// Fudge factor for the erroneous fact that the year 1900 is treated as a Leap Year in MS Excel // Fudge factor for the erroneous fact that the year 1900 is treated as a Leap Year in MS Excel
// This affects every date following 28th February 1900 // This affects every date following 28th February 1900
// //
$excel1900isLeapYear = TRUE; $excel1900isLeapYear = true;
if (($year == 1900) && ($month <= 2)) { $excel1900isLeapYear = FALSE; } if (($year == 1900) && ($month <= 2)) {
$my_excelBaseDate = 2415020; $excel1900isLeapYear = false;
}
$myexcelBaseDate = 2415020;
} else { } else {
$my_excelBaseDate = 2416481; $myexcelBaseDate = 2416481;
$excel1900isLeapYear = FALSE; $excel1900isLeapYear = false;
} }
// Julian base date Adjustment // Julian base date Adjustment
@@ -235,14 +231,14 @@ class PHPExcel_Shared_Date
} }
// Calculate the Julian Date, then subtract the Excel base date (JD 2415020 = 31-Dec-1899 Giving Excel Date of 0) // Calculate the Julian Date, then subtract the Excel base date (JD 2415020 = 31-Dec-1899 Giving Excel Date of 0)
$century = substr($year,0,2); $century = substr($year, 0, 2);
$decade = substr($year,2,2); $decade = substr($year, 2, 2);
$excelDate = floor((146097 * $century) / 4) + floor((1461 * $decade) / 4) + floor((153 * $month + 2) / 5) + $day + 1721119 - $my_excelBaseDate + $excel1900isLeapYear; $excelDate = floor((146097 * $century) / 4) + floor((1461 * $decade) / 4) + floor((153 * $month + 2) / 5) + $day + 1721119 - $myexcelBaseDate + $excel1900isLeapYear;
$excelTime = (($hours * 3600) + ($minutes * 60) + $seconds) / 86400; $excelTime = (($hours * 3600) + ($minutes * 60) + $seconds) / 86400;
return (float) $excelDate + $excelTime; return (float) $excelDate + $excelTime;
} // function FormattedPHPToExcel() }
/** /**
@@ -251,13 +247,14 @@ class PHPExcel_Shared_Date
* @param PHPExcel_Cell $pCell * @param PHPExcel_Cell $pCell
* @return boolean * @return boolean
*/ */
public static function isDateTime(PHPExcel_Cell $pCell) { public static function isDateTime(PHPExcel_Cell $pCell)
{
return self::isDateTimeFormat( return self::isDateTimeFormat(
$pCell->getWorksheet()->getStyle( $pCell->getWorksheet()->getStyle(
$pCell->getCoordinate() $pCell->getCoordinate()
)->getNumberFormat() )->getNumberFormat()
); );
} // function isDateTime() }
/** /**
@@ -266,9 +263,10 @@ class PHPExcel_Shared_Date
* @param PHPExcel_Style_NumberFormat $pFormat * @param PHPExcel_Style_NumberFormat $pFormat
* @return boolean * @return boolean
*/ */
public static function isDateTimeFormat(PHPExcel_Style_NumberFormat $pFormat) { public static function isDateTimeFormat(PHPExcel_Style_NumberFormat $pFormat)
{
return self::isDateTimeFormatCode($pFormat->getFormatCode()); return self::isDateTimeFormatCode($pFormat->getFormatCode());
} // function isDateTimeFormat() }
private static $possibleDateFormatCharacters = 'eymdHs'; private static $possibleDateFormatCharacters = 'eymdHs';
@@ -279,13 +277,17 @@ class PHPExcel_Shared_Date
* @param string $pFormatCode * @param string $pFormatCode
* @return boolean * @return boolean
*/ */
public static function isDateTimeFormatCode($pFormatCode = '') { public static function isDateTimeFormatCode($pFormatCode = '')
if (strtolower($pFormatCode) === strtolower(PHPExcel_Style_NumberFormat::FORMAT_GENERAL)) {
if (strtolower($pFormatCode) === strtolower(PHPExcel_Style_NumberFormat::FORMAT_GENERAL)) {
// "General" contains an epoch letter 'e', so we trap for it explicitly here (case-insensitive check) // "General" contains an epoch letter 'e', so we trap for it explicitly here (case-insensitive check)
return FALSE; return false;
if (preg_match('/[0#]E[+-]0/i', $pFormatCode)) }
if (preg_match('/[0#]E[+-]0/i', $pFormatCode)) {
// Scientific format // Scientific format
return FALSE; return false;
}
// Switch on formatcode // Switch on formatcode
switch ($pFormatCode) { switch ($pFormatCode) {
// Explicitly defined date formats // Explicitly defined date formats
@@ -311,34 +313,34 @@ class PHPExcel_Shared_Date
case PHPExcel_Style_NumberFormat::FORMAT_DATE_XLSX16: case PHPExcel_Style_NumberFormat::FORMAT_DATE_XLSX16:
case PHPExcel_Style_NumberFormat::FORMAT_DATE_XLSX17: case PHPExcel_Style_NumberFormat::FORMAT_DATE_XLSX17:
case PHPExcel_Style_NumberFormat::FORMAT_DATE_XLSX22: case PHPExcel_Style_NumberFormat::FORMAT_DATE_XLSX22:
return TRUE; return true;
} }
// Typically number, currency or accounting (or occasionally fraction) formats // Typically number, currency or accounting (or occasionally fraction) formats
if ((substr($pFormatCode,0,1) == '_') || (substr($pFormatCode,0,2) == '0 ')) { if ((substr($pFormatCode, 0, 1) == '_') || (substr($pFormatCode, 0, 2) == '0 ')) {
return FALSE; return false;
} }
// Try checking for any of the date formatting characters that don't appear within square braces // Try checking for any of the date formatting characters that don't appear within square braces
if (preg_match('/(^|\])[^\[]*['.self::$possibleDateFormatCharacters.']/i',$pFormatCode)) { if (preg_match('/(^|\])[^\[]*['.self::$possibleDateFormatCharacters.']/i', $pFormatCode)) {
// We might also have a format mask containing quoted strings... // We might also have a format mask containing quoted strings...
// we don't want to test for any of our characters within the quoted blocks // we don't want to test for any of our characters within the quoted blocks
if (strpos($pFormatCode,'"') !== FALSE) { if (strpos($pFormatCode, '"') !== false) {
$segMatcher = FALSE; $segMatcher = false;
foreach(explode('"',$pFormatCode) as $subVal) { foreach (explode('"', $pFormatCode) as $subVal) {
// Only test in alternate array entries (the non-quoted blocks) // Only test in alternate array entries (the non-quoted blocks)
if (($segMatcher = !$segMatcher) && if (($segMatcher = !$segMatcher) &&
(preg_match('/(^|\])[^\[]*['.self::$possibleDateFormatCharacters.']/i',$subVal))) { (preg_match('/(^|\])[^\[]*['.self::$possibleDateFormatCharacters.']/i', $subVal))) {
return TRUE; return true;
} }
} }
return FALSE; return false;
} }
return TRUE; return true;
} }
// No date... // No date...
return FALSE; return false;
} // function isDateTimeFormatCode() }
/** /**
@@ -347,33 +349,41 @@ class PHPExcel_Shared_Date
* @param string $dateValue Examples: '2009-12-31', '2009-12-31 15:59', '2009-12-31 15:59:10' * @param string $dateValue Examples: '2009-12-31', '2009-12-31 15:59', '2009-12-31 15:59:10'
* @return float|FALSE Excel date/time serial value * @return float|FALSE Excel date/time serial value
*/ */
public static function stringToExcel($dateValue = '') { public static function stringToExcel($dateValue = '')
if (strlen($dateValue) < 2) {
return FALSE; if (strlen($dateValue) < 2) {
if (!preg_match('/^(\d{1,4}[ \.\/\-][A-Z]{3,9}([ \.\/\-]\d{1,4})?|[A-Z]{3,9}[ \.\/\-]\d{1,4}([ \.\/\-]\d{1,4})?|\d{1,4}[ \.\/\-]\d{1,4}([ \.\/\-]\d{1,4})?)( \d{1,2}:\d{1,2}(:\d{1,2})?)?$/iu', $dateValue)) return false;
return FALSE; }
if (!preg_match('/^(\d{1,4}[ \.\/\-][A-Z]{3,9}([ \.\/\-]\d{1,4})?|[A-Z]{3,9}[ \.\/\-]\d{1,4}([ \.\/\-]\d{1,4})?|\d{1,4}[ \.\/\-]\d{1,4}([ \.\/\-]\d{1,4})?)( \d{1,2}:\d{1,2}(:\d{1,2})?)?$/iu', $dateValue)) {
return false;
}
$dateValueNew = PHPExcel_Calculation_DateTime::DATEVALUE($dateValue); $dateValueNew = PHPExcel_Calculation_DateTime::DATEVALUE($dateValue);
if ($dateValueNew === PHPExcel_Calculation_Functions::VALUE()) { if ($dateValueNew === PHPExcel_Calculation_Functions::VALUE()) {
return FALSE; return false;
} else { }
if (strpos($dateValue, ':') !== FALSE) {
if (strpos($dateValue, ':') !== false) {
$timeValue = PHPExcel_Calculation_DateTime::TIMEVALUE($dateValue); $timeValue = PHPExcel_Calculation_DateTime::TIMEVALUE($dateValue);
if ($timeValue === PHPExcel_Calculation_Functions::VALUE()) { if ($timeValue === PHPExcel_Calculation_Functions::VALUE()) {
return FALSE; return false;
} }
$dateValueNew += $timeValue; $dateValueNew += $timeValue;
} }
return $dateValueNew; return $dateValueNew;
} }
/**
} * Converts a month name (either a long or a short name) to a month number
*
public static function monthStringToNumber($month) { * @param string $month Month name or abbreviation
* @return integer|string Month number (1 - 12), or the original string argument if it isn't a valid month name
*/
public static function monthStringToNumber($month)
{
$monthIndex = 1; $monthIndex = 1;
foreach(self::$_monthNames as $shortMonthName => $longMonthName) { foreach (self::$monthNames as $shortMonthName => $longMonthName) {
if (($month === $longMonthName) || ($month === $shortMonthName)) { if (($month === $longMonthName) || ($month === $shortMonthName)) {
return $monthIndex; return $monthIndex;
} }
@@ -382,12 +392,18 @@ class PHPExcel_Shared_Date
return $month; return $month;
} }
public static function dayStringToNumber($day) { /**
$strippedDayValue = (str_replace(self::$_numberSuffixes,'',$day)); * Strips an ordinal froma numeric value
*
* @param string $day Day number with an ordinal
* @return integer|string The integer value with any ordinal stripped, or the original string argument if it isn't a valid numeric
*/
public static function dayStringToNumber($day)
{
$strippedDayValue = (str_replace(self::$numberSuffixes, '', $day));
if (is_numeric($strippedDayValue)) { if (is_numeric($strippedDayValue)) {
return $strippedDayValue; return (integer) $strippedDayValue;
} }
return $day; return $day;
} }
} }

View File

@@ -2,7 +2,7 @@
/** /**
* PHPExcel * PHPExcel
* *
* Copyright (c) 2006 - 2014 PHPExcel * Copyright (c) 2006 - 2015 PHPExcel
* *
* This library is free software; you can redistribute it and/or * This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public * modify it under the terms of the GNU Lesser General Public
@@ -20,9 +20,9 @@
* *
* @category PHPExcel * @category PHPExcel
* @package PHPExcel_Shared * @package PHPExcel_Shared
* @copyright Copyright (c) 2006 - 2014 PHPExcel (http://www.codeplex.com/PHPExcel) * @copyright Copyright (c) 2006 - 2015 PHPExcel (http://www.codeplex.com/PHPExcel)
* @license http://www.gnu.org/licenses/old-licenses/lgpl-2.1.txt LGPL * @license http://www.gnu.org/licenses/old-licenses/lgpl-2.1.txt LGPL
* @version 1.8.0, 2014-03-02 * @version ##VERSION##, ##DATE##
*/ */
@@ -31,7 +31,7 @@
* *
* @category PHPExcel * @category PHPExcel
* @package PHPExcel_Shared * @package PHPExcel_Shared
* @copyright Copyright (c) 2006 - 2014 PHPExcel (http://www.codeplex.com/PHPExcel) * @copyright Copyright (c) 2006 - 2015 PHPExcel (http://www.codeplex.com/PHPExcel)
*/ */
class PHPExcel_Shared_Drawing class PHPExcel_Shared_Drawing
{ {
@@ -41,7 +41,8 @@ class PHPExcel_Shared_Drawing
* @param int $pValue Value in pixels * @param int $pValue Value in pixels
* @return int Value in EMU * @return int Value in EMU
*/ */
public static function pixelsToEMU($pValue = 0) { public static function pixelsToEMU($pValue = 0)
{
return round($pValue * 9525); return round($pValue * 9525);
} }
@@ -51,7 +52,8 @@ class PHPExcel_Shared_Drawing
* @param int $pValue Value in EMU * @param int $pValue Value in EMU
* @return int Value in pixels * @return int Value in pixels
*/ */
public static function EMUToPixels($pValue = 0) { public static function EMUToPixels($pValue = 0)
{
if ($pValue != 0) { if ($pValue != 0) {
return round($pValue / 9525); return round($pValue / 9525);
} else { } else {
@@ -68,22 +70,19 @@ class PHPExcel_Shared_Drawing
* @param PHPExcel_Style_Font $pDefaultFont Default font of the workbook * @param PHPExcel_Style_Font $pDefaultFont Default font of the workbook
* @return int Value in cell dimension * @return int Value in cell dimension
*/ */
public static function pixelsToCellDimension($pValue = 0, PHPExcel_Style_Font $pDefaultFont) { public static function pixelsToCellDimension($pValue = 0, PHPExcel_Style_Font $pDefaultFont)
{
// Font name and size // Font name and size
$name = $pDefaultFont->getName(); $name = $pDefaultFont->getName();
$size = $pDefaultFont->getSize(); $size = $pDefaultFont->getSize();
if (isset(PHPExcel_Shared_Font::$defaultColumnWidths[$name][$size])) { if (isset(PHPExcel_Shared_Font::$defaultColumnWidths[$name][$size])) {
// Exact width can be determined // Exact width can be determined
$colWidth = $pValue $colWidth = $pValue * PHPExcel_Shared_Font::$defaultColumnWidths[$name][$size]['width'] / PHPExcel_Shared_Font::$defaultColumnWidths[$name][$size]['px'];
* PHPExcel_Shared_Font::$defaultColumnWidths[$name][$size]['width']
/ PHPExcel_Shared_Font::$defaultColumnWidths[$name][$size]['px'];
} else { } else {
// We don't have data for this particular font and size, use approximation by // We don't have data for this particular font and size, use approximation by
// extrapolating from Calibri 11 // extrapolating from Calibri 11
$colWidth = $pValue * 11 $colWidth = $pValue * 11 * PHPExcel_Shared_Font::$defaultColumnWidths['Calibri'][11]['width'] / PHPExcel_Shared_Font::$defaultColumnWidths['Calibri'][11]['px'] / $size;
* PHPExcel_Shared_Font::$defaultColumnWidths['Calibri'][11]['width']
/ PHPExcel_Shared_Font::$defaultColumnWidths['Calibri'][11]['px'] / $size;
} }
return $colWidth; return $colWidth;
@@ -96,23 +95,19 @@ class PHPExcel_Shared_Drawing
* @param PHPExcel_Style_Font $pDefaultFont Default font of the workbook * @param PHPExcel_Style_Font $pDefaultFont Default font of the workbook
* @return int Value in pixels * @return int Value in pixels
*/ */
public static function cellDimensionToPixels($pValue = 0, PHPExcel_Style_Font $pDefaultFont) { public static function cellDimensionToPixels($pValue = 0, PHPExcel_Style_Font $pDefaultFont)
{
// Font name and size // Font name and size
$name = $pDefaultFont->getName(); $name = $pDefaultFont->getName();
$size = $pDefaultFont->getSize(); $size = $pDefaultFont->getSize();
if (isset(PHPExcel_Shared_Font::$defaultColumnWidths[$name][$size])) { if (isset(PHPExcel_Shared_Font::$defaultColumnWidths[$name][$size])) {
// Exact width can be determined // Exact width can be determined
$colWidth = $pValue $colWidth = $pValue * PHPExcel_Shared_Font::$defaultColumnWidths[$name][$size]['px'] / PHPExcel_Shared_Font::$defaultColumnWidths[$name][$size]['width'];
* PHPExcel_Shared_Font::$defaultColumnWidths[$name][$size]['px']
/ PHPExcel_Shared_Font::$defaultColumnWidths[$name][$size]['width'];
} else { } else {
// We don't have data for this particular font and size, use approximation by // We don't have data for this particular font and size, use approximation by
// extrapolating from Calibri 11 // extrapolating from Calibri 11
$colWidth = $pValue * $size $colWidth = $pValue * $size * PHPExcel_Shared_Font::$defaultColumnWidths['Calibri'][11]['px'] / PHPExcel_Shared_Font::$defaultColumnWidths['Calibri'][11]['width'] / 11;
* PHPExcel_Shared_Font::$defaultColumnWidths['Calibri'][11]['px']
/ PHPExcel_Shared_Font::$defaultColumnWidths['Calibri'][11]['width'] / 11;
} }
// Round pixels to closest integer // Round pixels to closest integer
@@ -127,7 +122,8 @@ class PHPExcel_Shared_Drawing
* @param int $pValue Value in pixels * @param int $pValue Value in pixels
* @return int Value in points * @return int Value in points
*/ */
public static function pixelsToPoints($pValue = 0) { public static function pixelsToPoints($pValue = 0)
{
return $pValue * 0.67777777; return $pValue * 0.67777777;
} }
@@ -137,7 +133,8 @@ class PHPExcel_Shared_Drawing
* @param int $pValue Value in points * @param int $pValue Value in points
* @return int Value in pixels * @return int Value in pixels
*/ */
public static function pointsToPixels($pValue = 0) { public static function pointsToPixels($pValue = 0)
{
if ($pValue != 0) { if ($pValue != 0) {
return (int) ceil($pValue * 1.333333333); return (int) ceil($pValue * 1.333333333);
} else { } else {
@@ -151,7 +148,8 @@ class PHPExcel_Shared_Drawing
* @param int $pValue Degrees * @param int $pValue Degrees
* @return int Angle * @return int Angle
*/ */
public static function degreesToAngle($pValue = 0) { public static function degreesToAngle($pValue = 0)
{
return (int)round($pValue * 60000); return (int)round($pValue * 60000);
} }
@@ -161,7 +159,8 @@ class PHPExcel_Shared_Drawing
* @param int $pValue Angle * @param int $pValue Angle
* @return int Degrees * @return int Degrees
*/ */
public static function angleToDegrees($pValue = 0) { public static function angleToDegrees($pValue = 0)
{
if ($pValue != 0) { if ($pValue != 0) {
return round($pValue / 60000); return round($pValue / 60000);
} else { } else {
@@ -179,21 +178,21 @@ class PHPExcel_Shared_Drawing
public static function imagecreatefrombmp($p_sFile) public static function imagecreatefrombmp($p_sFile)
{ {
// Load the image into a string // Load the image into a string
$file = fopen($p_sFile,"rb"); $file = fopen($p_sFile, "rb");
$read = fread($file,10); $read = fread($file, 10);
while(!feof($file)&&($read<>"")) while (!feof($file) && ($read<>"")) {
$read .= fread($file,1024); $read .= fread($file, 1024);
}
$temp = unpack("H*",$read); $temp = unpack("H*", $read);
$hex = $temp[1]; $hex = $temp[1];
$header = substr($hex,0,108); $header = substr($hex, 0, 108);
// Process the header // Process the header
// Structure: http://www.fastgraph.com/help/bmp_header_format.html // Structure: http://www.fastgraph.com/help/bmp_header_format.html
if (substr($header,0,4)=="424d") if (substr($header, 0, 4)=="424d") {
{
// Cut it in parts of 2 bytes // Cut it in parts of 2 bytes
$header_parts = str_split($header,2); $header_parts = str_split($header, 2);
// Get the width 4 bytes // Get the width 4 bytes
$width = hexdec($header_parts[19].$header_parts[18]); $width = hexdec($header_parts[19].$header_parts[18]);
@@ -210,10 +209,10 @@ class PHPExcel_Shared_Drawing
$y = 1; $y = 1;
// Create newimage // Create newimage
$image = imagecreatetruecolor($width,$height); $image = imagecreatetruecolor($width, $height);
// Grab the body from the image // Grab the body from the image
$body = substr($hex,108); $body = substr($hex, 108);
// Calculate if padding at the end-line is needed // Calculate if padding at the end-line is needed
// Divided by two to keep overview. // Divided by two to keep overview.
@@ -226,15 +225,14 @@ class PHPExcel_Shared_Drawing
// Using a for-loop with index-calculation instaid of str_split to avoid large memory consumption // Using a for-loop with index-calculation instaid of str_split to avoid large memory consumption
// Calculate the next DWORD-position in the body // Calculate the next DWORD-position in the body
for ($i=0;$i<$body_size;$i+=3) for ($i = 0; $i < $body_size; $i += 3) {
{
// Calculate line-ending and padding // Calculate line-ending and padding
if ($x>=$width) if ($x >= $width) {
{
// If padding needed, ignore image-padding // If padding needed, ignore image-padding
// Shift i to the ending of the current 32-bit-block // Shift i to the ending of the current 32-bit-block
if ($usePadding) if ($usePadding) {
$i += $width%4; $i += $width%4;
}
// Reset horizontal position // Reset horizontal position
$x = 0; $x = 0;
@@ -243,20 +241,21 @@ class PHPExcel_Shared_Drawing
$y++; $y++;
// Reached the image-height? Break the for-loop // Reached the image-height? Break the for-loop
if ($y>$height) if ($y > $height) {
break; break;
} }
}
// Calculation of the RGB-pixel (defined as BGR in image-data) // Calculation of the RGB-pixel (defined as BGR in image-data)
// Define $i_pos as absolute position in the body // Define $i_pos as absolute position in the body
$i_pos = $i*2; $i_pos = $i * 2;
$r = hexdec($body[$i_pos+4].$body[$i_pos+5]); $r = hexdec($body[$i_pos+4].$body[$i_pos+5]);
$g = hexdec($body[$i_pos+2].$body[$i_pos+3]); $g = hexdec($body[$i_pos+2].$body[$i_pos+3]);
$b = hexdec($body[$i_pos].$body[$i_pos+1]); $b = hexdec($body[$i_pos].$body[$i_pos+1]);
// Calculate and draw the pixel // Calculate and draw the pixel
$color = imagecolorallocate($image,$r,$g,$b); $color = imagecolorallocate($image, $r, $g, $b);
imagesetpixel($image,$x,$height-$y,$color); imagesetpixel($image, $x, $height-$y, $color);
// Raise the horizontal position // Raise the horizontal position
$x++; $x++;
@@ -268,5 +267,4 @@ class PHPExcel_Shared_Drawing
// Return image-object // Return image-object
return $image; return $image;
} }
} }

View File

@@ -1,8 +1,9 @@
<?php <?php
/** /**
* PHPExcel * PHPExcel_Shared_Escher
* *
* Copyright (c) 2006 - 2014 PHPExcel * Copyright (c) 2006 - 2015 PHPExcel
* *
* This library is free software; you can redistribute it and/or * This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public * modify it under the terms of the GNU Lesser General Public
@@ -20,17 +21,9 @@
* *
* @category PHPExcel * @category PHPExcel
* @package PHPExcel_Shared_Escher * @package PHPExcel_Shared_Escher
* @copyright Copyright (c) 2006 - 2014 PHPExcel (http://www.codeplex.com/PHPExcel) * @copyright Copyright (c) 2006 - 2015 PHPExcel (http://www.codeplex.com/PHPExcel)
* @license http://www.gnu.org/licenses/old-licenses/lgpl-2.1.txt LGPL * @license http://www.gnu.org/licenses/old-licenses/lgpl-2.1.txt LGPL
* @version 1.8.0, 2014-03-02 * @version ##VERSION##, ##DATE##
*/
/**
* PHPExcel_Shared_Escher
*
* @category PHPExcel
* @package PHPExcel_Shared_Escher
* @copyright Copyright (c) 2006 - 2014 PHPExcel (http://www.codeplex.com/PHPExcel)
*/ */
class PHPExcel_Shared_Escher class PHPExcel_Shared_Escher
{ {
@@ -39,14 +32,14 @@ class PHPExcel_Shared_Escher
* *
* @var PHPExcel_Shared_Escher_DggContainer * @var PHPExcel_Shared_Escher_DggContainer
*/ */
private $_dggContainer; private $dggContainer;
/** /**
* Drawing Container * Drawing Container
* *
* @var PHPExcel_Shared_Escher_DgContainer * @var PHPExcel_Shared_Escher_DgContainer
*/ */
private $_dgContainer; private $dgContainer;
/** /**
* Get Drawing Group Container * Get Drawing Group Container
@@ -55,7 +48,7 @@ class PHPExcel_Shared_Escher
*/ */
public function getDggContainer() public function getDggContainer()
{ {
return $this->_dggContainer; return $this->dggContainer;
} }
/** /**
@@ -65,7 +58,7 @@ class PHPExcel_Shared_Escher
*/ */
public function setDggContainer($dggContainer) public function setDggContainer($dggContainer)
{ {
return $this->_dggContainer = $dggContainer; return $this->dggContainer = $dggContainer;
} }
/** /**
@@ -75,7 +68,7 @@ class PHPExcel_Shared_Escher
*/ */
public function getDgContainer() public function getDgContainer()
{ {
return $this->_dgContainer; return $this->dgContainer;
} }
/** /**
@@ -85,7 +78,6 @@ class PHPExcel_Shared_Escher
*/ */
public function setDgContainer($dgContainer) public function setDgContainer($dgContainer)
{ {
return $this->_dgContainer = $dgContainer; return $this->dgContainer = $dgContainer;
} }
} }

View File

@@ -1,8 +1,9 @@
<?php <?php
/** /**
* PHPExcel * PHPExcel_Shared_Escher_DgContainer
* *
* Copyright (c) 2006 - 2014 PHPExcel * Copyright (c) 2006 - 2015 PHPExcel
* *
* This library is free software; you can redistribute it and/or * This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public * modify it under the terms of the GNU Lesser General Public
@@ -20,17 +21,9 @@
* *
* @category PHPExcel * @category PHPExcel
* @package PHPExcel_Shared_Escher * @package PHPExcel_Shared_Escher
* @copyright Copyright (c) 2006 - 2014 PHPExcel (http://www.codeplex.com/PHPExcel) * @copyright Copyright (c) 2006 - 2015 PHPExcel (http://www.codeplex.com/PHPExcel)
* @license http://www.gnu.org/licenses/old-licenses/lgpl-2.1.txt LGPL * @license http://www.gnu.org/licenses/old-licenses/lgpl-2.1.txt LGPL
* @version 1.8.0, 2014-03-02 * @version ##VERSION##, ##DATE##
*/
/**
* PHPExcel_Shared_Escher_DgContainer
*
* @category PHPExcel
* @package PHPExcel_Shared_Escher
* @copyright Copyright (c) 2006 - 2014 PHPExcel (http://www.codeplex.com/PHPExcel)
*/ */
class PHPExcel_Shared_Escher_DgContainer class PHPExcel_Shared_Escher_DgContainer
{ {
@@ -39,45 +32,44 @@ class PHPExcel_Shared_Escher_DgContainer
* *
* @var int * @var int
*/ */
private $_dgId; private $dgId;
/** /**
* Last shape index in this drawing * Last shape index in this drawing
* *
* @var int * @var int
*/ */
private $_lastSpId; private $lastSpId;
private $_spgrContainer = null; private $spgrContainer = null;
public function getDgId() public function getDgId()
{ {
return $this->_dgId; return $this->dgId;
} }
public function setDgId($value) public function setDgId($value)
{ {
$this->_dgId = $value; $this->dgId = $value;
} }
public function getLastSpId() public function getLastSpId()
{ {
return $this->_lastSpId; return $this->lastSpId;
} }
public function setLastSpId($value) public function setLastSpId($value)
{ {
$this->_lastSpId = $value; $this->lastSpId = $value;
} }
public function getSpgrContainer() public function getSpgrContainer()
{ {
return $this->_spgrContainer; return $this->spgrContainer;
} }
public function setSpgrContainer($spgrContainer) public function setSpgrContainer($spgrContainer)
{ {
return $this->_spgrContainer = $spgrContainer; return $this->spgrContainer = $spgrContainer;
} }
} }

View File

@@ -1,8 +1,9 @@
<?php <?php
/** /**
* PHPExcel * PHPExcel_Shared_Escher_DgContainer_SpgrContainer
* *
* Copyright (c) 2006 - 2014 PHPExcel * Copyright (c) 2006 - 2015 PHPExcel
* *
* This library is free software; you can redistribute it and/or * This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public * modify it under the terms of the GNU Lesser General Public
@@ -20,17 +21,9 @@
* *
* @category PHPExcel * @category PHPExcel
* @package PHPExcel_Shared_Escher * @package PHPExcel_Shared_Escher
* @copyright Copyright (c) 2006 - 2014 PHPExcel (http://www.codeplex.com/PHPExcel) * @copyright Copyright (c) 2006 - 2015 PHPExcel (http://www.codeplex.com/PHPExcel)
* @license http://www.gnu.org/licenses/old-licenses/lgpl-2.1.txt LGPL * @license http://www.gnu.org/licenses/old-licenses/lgpl-2.1.txt LGPL
* @version 1.8.0, 2014-03-02 * @version ##VERSION##, ##DATE##
*/
/**
* PHPExcel_Shared_Escher_DgContainer_SpgrContainer
*
* @category PHPExcel
* @package PHPExcel_Shared_Escher
* @copyright Copyright (c) 2006 - 2014 PHPExcel (http://www.codeplex.com/PHPExcel)
*/ */
class PHPExcel_Shared_Escher_DgContainer_SpgrContainer class PHPExcel_Shared_Escher_DgContainer_SpgrContainer
{ {
@@ -39,14 +32,14 @@ class PHPExcel_Shared_Escher_DgContainer_SpgrContainer
* *
* @var PHPExcel_Shared_Escher_DgContainer_SpgrContainer * @var PHPExcel_Shared_Escher_DgContainer_SpgrContainer
*/ */
private $_parent; private $parent;
/** /**
* Shape Container collection * Shape Container collection
* *
* @var array * @var array
*/ */
private $_children = array(); private $children = array();
/** /**
* Set parent Shape Group Container * Set parent Shape Group Container
@@ -55,7 +48,7 @@ class PHPExcel_Shared_Escher_DgContainer_SpgrContainer
*/ */
public function setParent($parent) public function setParent($parent)
{ {
$this->_parent = $parent; $this->parent = $parent;
} }
/** /**
@@ -65,7 +58,7 @@ class PHPExcel_Shared_Escher_DgContainer_SpgrContainer
*/ */
public function getParent() public function getParent()
{ {
return $this->_parent; return $this->parent;
} }
/** /**
@@ -75,7 +68,7 @@ class PHPExcel_Shared_Escher_DgContainer_SpgrContainer
*/ */
public function addChild($child) public function addChild($child)
{ {
$this->_children[] = $child; $this->children[] = $child;
$child->setParent($this); $child->setParent($this);
} }
@@ -84,7 +77,7 @@ class PHPExcel_Shared_Escher_DgContainer_SpgrContainer
*/ */
public function getChildren() public function getChildren()
{ {
return $this->_children; return $this->children;
} }
/** /**
@@ -96,7 +89,7 @@ class PHPExcel_Shared_Escher_DgContainer_SpgrContainer
{ {
$allSpContainers = array(); $allSpContainers = array();
foreach ($this->_children as $child) { foreach ($this->children as $child) {
if ($child instanceof PHPExcel_Shared_Escher_DgContainer_SpgrContainer) { if ($child instanceof PHPExcel_Shared_Escher_DgContainer_SpgrContainer) {
$allSpContainers = array_merge($allSpContainers, $child->getAllSpContainers()); $allSpContainers = array_merge($allSpContainers, $child->getAllSpContainers());
} else { } else {

View File

@@ -1,8 +1,9 @@
<?php <?php
/** /**
* PHPExcel * PHPExcel_Shared_Escher_DgContainer_SpgrContainer_SpContainer
* *
* Copyright (c) 2006 - 2014 PHPExcel * Copyright (c) 2006 - 2015 PHPExcel
* *
* This library is free software; you can redistribute it and/or * This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public * modify it under the terms of the GNU Lesser General Public
@@ -20,17 +21,9 @@
* *
* @category PHPExcel * @category PHPExcel
* @package PHPExcel_Shared_Escher * @package PHPExcel_Shared_Escher
* @copyright Copyright (c) 2006 - 2014 PHPExcel (http://www.codeplex.com/PHPExcel) * @copyright Copyright (c) 2006 - 2015 PHPExcel (http://www.codeplex.com/PHPExcel)
* @license http://www.gnu.org/licenses/old-licenses/lgpl-2.1.txt LGPL * @license http://www.gnu.org/licenses/old-licenses/lgpl-2.1.txt LGPL
* @version 1.8.0, 2014-03-02 * @version ##VERSION##, ##DATE##
*/
/**
* PHPExcel_Shared_Escher_DgContainer_SpgrContainer_SpContainer
*
* @category PHPExcel
* @package PHPExcel_Shared_Escher
* @copyright Copyright (c) 2006 - 2014 PHPExcel (http://www.codeplex.com/PHPExcel)
*/ */
class PHPExcel_Shared_Escher_DgContainer_SpgrContainer_SpContainer class PHPExcel_Shared_Escher_DgContainer_SpgrContainer_SpContainer
{ {
@@ -39,84 +32,84 @@ class PHPExcel_Shared_Escher_DgContainer_SpgrContainer_SpContainer
* *
* @var PHPExcel_Shared_Escher_DgContainer_SpgrContainer * @var PHPExcel_Shared_Escher_DgContainer_SpgrContainer
*/ */
private $_parent; private $parent;
/** /**
* Is this a group shape? * Is this a group shape?
* *
* @var boolean * @var boolean
*/ */
private $_spgr = false; private $spgr = false;
/** /**
* Shape type * Shape type
* *
* @var int * @var int
*/ */
private $_spType; private $spType;
/** /**
* Shape flag * Shape flag
* *
* @var int * @var int
*/ */
private $_spFlag; private $spFlag;
/** /**
* Shape index (usually group shape has index 0, and the rest: 1,2,3...) * Shape index (usually group shape has index 0, and the rest: 1,2,3...)
* *
* @var boolean * @var boolean
*/ */
private $_spId; private $spId;
/** /**
* Array of options * Array of options
* *
* @var array * @var array
*/ */
private $_OPT; private $OPT;
/** /**
* Cell coordinates of upper-left corner of shape, e.g. 'A1' * Cell coordinates of upper-left corner of shape, e.g. 'A1'
* *
* @var string * @var string
*/ */
private $_startCoordinates; private $startCoordinates;
/** /**
* Horizontal offset of upper-left corner of shape measured in 1/1024 of column width * Horizontal offset of upper-left corner of shape measured in 1/1024 of column width
* *
* @var int * @var int
*/ */
private $_startOffsetX; private $startOffsetX;
/** /**
* Vertical offset of upper-left corner of shape measured in 1/256 of row height * Vertical offset of upper-left corner of shape measured in 1/256 of row height
* *
* @var int * @var int
*/ */
private $_startOffsetY; private $startOffsetY;
/** /**
* Cell coordinates of bottom-right corner of shape, e.g. 'B2' * Cell coordinates of bottom-right corner of shape, e.g. 'B2'
* *
* @var string * @var string
*/ */
private $_endCoordinates; private $endCoordinates;
/** /**
* Horizontal offset of bottom-right corner of shape measured in 1/1024 of column width * Horizontal offset of bottom-right corner of shape measured in 1/1024 of column width
* *
* @var int * @var int
*/ */
private $_endOffsetX; private $endOffsetX;
/** /**
* Vertical offset of bottom-right corner of shape measured in 1/256 of row height * Vertical offset of bottom-right corner of shape measured in 1/256 of row height
* *
* @var int * @var int
*/ */
private $_endOffsetY; private $endOffsetY;
/** /**
* Set parent Shape Group Container * Set parent Shape Group Container
@@ -125,7 +118,7 @@ class PHPExcel_Shared_Escher_DgContainer_SpgrContainer_SpContainer
*/ */
public function setParent($parent) public function setParent($parent)
{ {
$this->_parent = $parent; $this->parent = $parent;
} }
/** /**
@@ -135,7 +128,7 @@ class PHPExcel_Shared_Escher_DgContainer_SpgrContainer_SpContainer
*/ */
public function getParent() public function getParent()
{ {
return $this->_parent; return $this->parent;
} }
/** /**
@@ -145,7 +138,7 @@ class PHPExcel_Shared_Escher_DgContainer_SpgrContainer_SpContainer
*/ */
public function setSpgr($value = false) public function setSpgr($value = false)
{ {
$this->_spgr = $value; $this->spgr = $value;
} }
/** /**
@@ -155,7 +148,7 @@ class PHPExcel_Shared_Escher_DgContainer_SpgrContainer_SpContainer
*/ */
public function getSpgr() public function getSpgr()
{ {
return $this->_spgr; return $this->spgr;
} }
/** /**
@@ -165,7 +158,7 @@ class PHPExcel_Shared_Escher_DgContainer_SpgrContainer_SpContainer
*/ */
public function setSpType($value) public function setSpType($value)
{ {
$this->_spType = $value; $this->spType = $value;
} }
/** /**
@@ -175,7 +168,7 @@ class PHPExcel_Shared_Escher_DgContainer_SpgrContainer_SpContainer
*/ */
public function getSpType() public function getSpType()
{ {
return $this->_spType; return $this->spType;
} }
/** /**
@@ -185,7 +178,7 @@ class PHPExcel_Shared_Escher_DgContainer_SpgrContainer_SpContainer
*/ */
public function setSpFlag($value) public function setSpFlag($value)
{ {
$this->_spFlag = $value; $this->spFlag = $value;
} }
/** /**
@@ -195,7 +188,7 @@ class PHPExcel_Shared_Escher_DgContainer_SpgrContainer_SpContainer
*/ */
public function getSpFlag() public function getSpFlag()
{ {
return $this->_spFlag; return $this->spFlag;
} }
/** /**
@@ -205,7 +198,7 @@ class PHPExcel_Shared_Escher_DgContainer_SpgrContainer_SpContainer
*/ */
public function setSpId($value) public function setSpId($value)
{ {
$this->_spId = $value; $this->spId = $value;
} }
/** /**
@@ -215,7 +208,7 @@ class PHPExcel_Shared_Escher_DgContainer_SpgrContainer_SpContainer
*/ */
public function getSpId() public function getSpId()
{ {
return $this->_spId; return $this->spId;
} }
/** /**
@@ -226,7 +219,7 @@ class PHPExcel_Shared_Escher_DgContainer_SpgrContainer_SpContainer
*/ */
public function setOPT($property, $value) public function setOPT($property, $value)
{ {
$this->_OPT[$property] = $value; $this->OPT[$property] = $value;
} }
/** /**
@@ -237,8 +230,8 @@ class PHPExcel_Shared_Escher_DgContainer_SpgrContainer_SpContainer
*/ */
public function getOPT($property) public function getOPT($property)
{ {
if (isset($this->_OPT[$property])) { if (isset($this->OPT[$property])) {
return $this->_OPT[$property]; return $this->OPT[$property];
} }
return null; return null;
} }
@@ -250,7 +243,7 @@ class PHPExcel_Shared_Escher_DgContainer_SpgrContainer_SpContainer
*/ */
public function getOPTCollection() public function getOPTCollection()
{ {
return $this->_OPT; return $this->OPT;
} }
/** /**
@@ -260,7 +253,7 @@ class PHPExcel_Shared_Escher_DgContainer_SpgrContainer_SpContainer
*/ */
public function setStartCoordinates($value = 'A1') public function setStartCoordinates($value = 'A1')
{ {
$this->_startCoordinates = $value; $this->startCoordinates = $value;
} }
/** /**
@@ -270,7 +263,7 @@ class PHPExcel_Shared_Escher_DgContainer_SpgrContainer_SpContainer
*/ */
public function getStartCoordinates() public function getStartCoordinates()
{ {
return $this->_startCoordinates; return $this->startCoordinates;
} }
/** /**
@@ -280,7 +273,7 @@ class PHPExcel_Shared_Escher_DgContainer_SpgrContainer_SpContainer
*/ */
public function setStartOffsetX($startOffsetX = 0) public function setStartOffsetX($startOffsetX = 0)
{ {
$this->_startOffsetX = $startOffsetX; $this->startOffsetX = $startOffsetX;
} }
/** /**
@@ -290,7 +283,7 @@ class PHPExcel_Shared_Escher_DgContainer_SpgrContainer_SpContainer
*/ */
public function getStartOffsetX() public function getStartOffsetX()
{ {
return $this->_startOffsetX; return $this->startOffsetX;
} }
/** /**
@@ -300,7 +293,7 @@ class PHPExcel_Shared_Escher_DgContainer_SpgrContainer_SpContainer
*/ */
public function setStartOffsetY($startOffsetY = 0) public function setStartOffsetY($startOffsetY = 0)
{ {
$this->_startOffsetY = $startOffsetY; $this->startOffsetY = $startOffsetY;
} }
/** /**
@@ -310,7 +303,7 @@ class PHPExcel_Shared_Escher_DgContainer_SpgrContainer_SpContainer
*/ */
public function getStartOffsetY() public function getStartOffsetY()
{ {
return $this->_startOffsetY; return $this->startOffsetY;
} }
/** /**
@@ -320,7 +313,7 @@ class PHPExcel_Shared_Escher_DgContainer_SpgrContainer_SpContainer
*/ */
public function setEndCoordinates($value = 'A1') public function setEndCoordinates($value = 'A1')
{ {
$this->_endCoordinates = $value; $this->endCoordinates = $value;
} }
/** /**
@@ -330,7 +323,7 @@ class PHPExcel_Shared_Escher_DgContainer_SpgrContainer_SpContainer
*/ */
public function getEndCoordinates() public function getEndCoordinates()
{ {
return $this->_endCoordinates; return $this->endCoordinates;
} }
/** /**
@@ -340,7 +333,7 @@ class PHPExcel_Shared_Escher_DgContainer_SpgrContainer_SpContainer
*/ */
public function setEndOffsetX($endOffsetX = 0) public function setEndOffsetX($endOffsetX = 0)
{ {
$this->_endOffsetX = $endOffsetX; $this->endOffsetX = $endOffsetX;
} }
/** /**
@@ -350,7 +343,7 @@ class PHPExcel_Shared_Escher_DgContainer_SpgrContainer_SpContainer
*/ */
public function getEndOffsetX() public function getEndOffsetX()
{ {
return $this->_endOffsetX; return $this->endOffsetX;
} }
/** /**
@@ -360,7 +353,7 @@ class PHPExcel_Shared_Escher_DgContainer_SpgrContainer_SpContainer
*/ */
public function setEndOffsetY($endOffsetY = 0) public function setEndOffsetY($endOffsetY = 0)
{ {
$this->_endOffsetY = $endOffsetY; $this->endOffsetY = $endOffsetY;
} }
/** /**
@@ -370,7 +363,7 @@ class PHPExcel_Shared_Escher_DgContainer_SpgrContainer_SpContainer
*/ */
public function getEndOffsetY() public function getEndOffsetY()
{ {
return $this->_endOffsetY; return $this->endOffsetY;
} }
/** /**

View File

@@ -1,8 +1,9 @@
<?php <?php
/** /**
* PHPExcel * PHPExcel_Shared_Escher_DggContainer
* *
* Copyright (c) 2006 - 2014 PHPExcel * Copyright (c) 2006 - 2015 PHPExcel
* *
* This library is free software; you can redistribute it and/or * This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public * modify it under the terms of the GNU Lesser General Public
@@ -20,17 +21,9 @@
* *
* @category PHPExcel * @category PHPExcel
* @package PHPExcel_Shared_Escher * @package PHPExcel_Shared_Escher
* @copyright Copyright (c) 2006 - 2014 PHPExcel (http://www.codeplex.com/PHPExcel) * @copyright Copyright (c) 2006 - 2015 PHPExcel (http://www.codeplex.com/PHPExcel)
* @license http://www.gnu.org/licenses/old-licenses/lgpl-2.1.txt LGPL * @license http://www.gnu.org/licenses/old-licenses/lgpl-2.1.txt LGPL
* @version 1.8.0, 2014-03-02 * @version ##VERSION##, ##DATE##
*/
/**
* PHPExcel_Shared_Escher_DggContainer
*
* @category PHPExcel
* @package PHPExcel_Shared_Escher
* @copyright Copyright (c) 2006 - 2014 PHPExcel (http://www.codeplex.com/PHPExcel)
*/ */
class PHPExcel_Shared_Escher_DggContainer class PHPExcel_Shared_Escher_DggContainer
{ {
@@ -39,42 +32,42 @@ class PHPExcel_Shared_Escher_DggContainer
* *
* @var int * @var int
*/ */
private $_spIdMax; private $spIdMax;
/** /**
* Total number of drawings saved * Total number of drawings saved
* *
* @var int * @var int
*/ */
private $_cDgSaved; private $cDgSaved;
/** /**
* Total number of shapes saved (including group shapes) * Total number of shapes saved (including group shapes)
* *
* @var int * @var int
*/ */
private $_cSpSaved; private $cSpSaved;
/** /**
* BLIP Store Container * BLIP Store Container
* *
* @var PHPExcel_Shared_Escher_DggContainer_BstoreContainer * @var PHPExcel_Shared_Escher_DggContainer_BstoreContainer
*/ */
private $_bstoreContainer; private $bstoreContainer;
/** /**
* Array of options for the drawing group * Array of options for the drawing group
* *
* @var array * @var array
*/ */
private $_OPT = array(); private $OPT = array();
/** /**
* Array of identifier clusters containg information about the maximum shape identifiers * Array of identifier clusters containg information about the maximum shape identifiers
* *
* @var array * @var array
*/ */
private $_IDCLs = array(); private $IDCLs = array();
/** /**
* Get maximum shape index of all shapes in all drawings (plus one) * Get maximum shape index of all shapes in all drawings (plus one)
@@ -83,7 +76,7 @@ class PHPExcel_Shared_Escher_DggContainer
*/ */
public function getSpIdMax() public function getSpIdMax()
{ {
return $this->_spIdMax; return $this->spIdMax;
} }
/** /**
@@ -93,7 +86,7 @@ class PHPExcel_Shared_Escher_DggContainer
*/ */
public function setSpIdMax($value) public function setSpIdMax($value)
{ {
$this->_spIdMax = $value; $this->spIdMax = $value;
} }
/** /**
@@ -103,7 +96,7 @@ class PHPExcel_Shared_Escher_DggContainer
*/ */
public function getCDgSaved() public function getCDgSaved()
{ {
return $this->_cDgSaved; return $this->cDgSaved;
} }
/** /**
@@ -113,7 +106,7 @@ class PHPExcel_Shared_Escher_DggContainer
*/ */
public function setCDgSaved($value) public function setCDgSaved($value)
{ {
$this->_cDgSaved = $value; $this->cDgSaved = $value;
} }
/** /**
@@ -123,7 +116,7 @@ class PHPExcel_Shared_Escher_DggContainer
*/ */
public function getCSpSaved() public function getCSpSaved()
{ {
return $this->_cSpSaved; return $this->cSpSaved;
} }
/** /**
@@ -133,7 +126,7 @@ class PHPExcel_Shared_Escher_DggContainer
*/ */
public function setCSpSaved($value) public function setCSpSaved($value)
{ {
$this->_cSpSaved = $value; $this->cSpSaved = $value;
} }
/** /**
@@ -143,7 +136,7 @@ class PHPExcel_Shared_Escher_DggContainer
*/ */
public function getBstoreContainer() public function getBstoreContainer()
{ {
return $this->_bstoreContainer; return $this->bstoreContainer;
} }
/** /**
@@ -153,7 +146,7 @@ class PHPExcel_Shared_Escher_DggContainer
*/ */
public function setBstoreContainer($bstoreContainer) public function setBstoreContainer($bstoreContainer)
{ {
$this->_bstoreContainer = $bstoreContainer; $this->bstoreContainer = $bstoreContainer;
} }
/** /**
@@ -164,7 +157,7 @@ class PHPExcel_Shared_Escher_DggContainer
*/ */
public function setOPT($property, $value) public function setOPT($property, $value)
{ {
$this->_OPT[$property] = $value; $this->OPT[$property] = $value;
} }
/** /**
@@ -175,8 +168,8 @@ class PHPExcel_Shared_Escher_DggContainer
*/ */
public function getOPT($property) public function getOPT($property)
{ {
if (isset($this->_OPT[$property])) { if (isset($this->OPT[$property])) {
return $this->_OPT[$property]; return $this->OPT[$property];
} }
return null; return null;
} }
@@ -188,7 +181,7 @@ class PHPExcel_Shared_Escher_DggContainer
*/ */
public function getIDCLs() public function getIDCLs()
{ {
return $this->_IDCLs; return $this->IDCLs;
} }
/** /**
@@ -198,6 +191,6 @@ class PHPExcel_Shared_Escher_DggContainer
*/ */
public function setIDCLs($pValue) public function setIDCLs($pValue)
{ {
$this->_IDCLs = $pValue; $this->IDCLs = $pValue;
} }
} }

View File

@@ -1,8 +1,9 @@
<?php <?php
/** /**
* PHPExcel * PHPExcel_Shared_Escher_DggContainer_BstoreContainer
* *
* Copyright (c) 2006 - 2014 PHPExcel * Copyright (c) 2006 - 2015 PHPExcel
* *
* This library is free software; you can redistribute it and/or * This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public * modify it under the terms of the GNU Lesser General Public
@@ -20,17 +21,9 @@
* *
* @category PHPExcel * @category PHPExcel
* @package PHPExcel_Shared_Escher * @package PHPExcel_Shared_Escher
* @copyright Copyright (c) 2006 - 2014 PHPExcel (http://www.codeplex.com/PHPExcel) * @copyright Copyright (c) 2006 - 2015 PHPExcel (http://www.codeplex.com/PHPExcel)
* @license http://www.gnu.org/licenses/old-licenses/lgpl-2.1.txt LGPL * @license http://www.gnu.org/licenses/old-licenses/lgpl-2.1.txt LGPL
* @version 1.8.0, 2014-03-02 * @version ##VERSION##, ##DATE##
*/
/**
* PHPExcel_Shared_Escher_DggContainer_BstoreContainer
*
* @category PHPExcel
* @package PHPExcel_Shared_Escher
* @copyright Copyright (c) 2006 - 2014 PHPExcel (http://www.codeplex.com/PHPExcel)
*/ */
class PHPExcel_Shared_Escher_DggContainer_BstoreContainer class PHPExcel_Shared_Escher_DggContainer_BstoreContainer
{ {
@@ -39,7 +32,7 @@ class PHPExcel_Shared_Escher_DggContainer_BstoreContainer
* *
* @var array * @var array
*/ */
private $_BSECollection = array(); private $BSECollection = array();
/** /**
* Add a BLIP Store Entry * Add a BLIP Store Entry
@@ -48,7 +41,7 @@ class PHPExcel_Shared_Escher_DggContainer_BstoreContainer
*/ */
public function addBSE($BSE) public function addBSE($BSE)
{ {
$this->_BSECollection[] = $BSE; $this->BSECollection[] = $BSE;
$BSE->setParent($this); $BSE->setParent($this);
} }
@@ -59,7 +52,6 @@ class PHPExcel_Shared_Escher_DggContainer_BstoreContainer
*/ */
public function getBSECollection() public function getBSECollection()
{ {
return $this->_BSECollection; return $this->BSECollection;
} }
} }

Some files were not shown because too many files have changed in this diff Show More