Merge branch 'QA_3_3'
This commit is contained in:
@@ -115,6 +115,7 @@
|
||||
|
||||
3.3.8.0 (not yet released)
|
||||
- bug #3059311 [import] BIGINT field type added to table analysis
|
||||
- [core] Update library PHPExcel to version 1.7.4
|
||||
|
||||
3.3.7.0 (2010-09-07)
|
||||
- patch #3050492 [PDF scratchboard] Cannot drag table box to the edge after
|
||||
|
@@ -22,7 +22,7 @@
|
||||
* @package PHPExcel
|
||||
* @copyright Copyright (c) 2006 - 2010 PHPExcel (http://www.codeplex.com/PHPExcel)
|
||||
* @license http://www.gnu.org/licenses/old-licenses/lgpl-2.1.txt LGPL
|
||||
* @version 1.7.3c, 2010-06-01
|
||||
* @version 1.7.4, 2010-08-26
|
||||
*/
|
||||
|
||||
|
||||
@@ -434,7 +434,7 @@ class PHPExcel
|
||||
|
||||
// update the cellXfs
|
||||
foreach ($pSheet->getCellCollection(false) as $cellID) {
|
||||
$cell = $sheet->getCell($cellID);
|
||||
$cell = $pSheet->getCell($cellID);
|
||||
$cell->setXfIndex( $cell->getXfIndex() + $countCellXfs );
|
||||
}
|
||||
|
||||
|
@@ -22,7 +22,7 @@
|
||||
* @package PHPExcel
|
||||
* @copyright Copyright (c) 2006 - 2010 PHPExcel (http://www.codeplex.com/PHPExcel)
|
||||
* @license http://www.gnu.org/licenses/old-licenses/lgpl-2.1.txt LGPL
|
||||
* @version 1.7.3c, 2010-06-01
|
||||
* @version 1.7.4, 2010-08-26
|
||||
*/
|
||||
|
||||
class PHPExcel_Autoloader
|
||||
|
@@ -22,7 +22,7 @@
|
||||
* @package PHPExcel_CachedObjectStorage
|
||||
* @copyright Copyright (c) 2006 - 2010 PHPExcel (http://www.codeplex.com/PHPExcel)
|
||||
* @license http://www.gnu.org/licenses/old-licenses/lgpl-2.1.txt LGPL
|
||||
* @version 1.7.3c, 2010-06-01
|
||||
* @version 1.7.4, 2010-08-26
|
||||
*/
|
||||
|
||||
|
||||
@@ -45,7 +45,7 @@ class PHPExcel_CachedObjectStorage_APC extends PHPExcel_CachedObjectStorage_Cach
|
||||
|
||||
if (!apc_store($this->_cachePrefix.$this->_currentObjectID.'.cache',serialize($this->_currentObject),$this->_cacheTime)) {
|
||||
$this->__destruct();
|
||||
throw new Exception('Failed to store cell in APC');
|
||||
throw new Exception('Failed to store cell '.$cellID.' in APC');
|
||||
}
|
||||
$this->_currentObjectID = $this->_currentObject = null;
|
||||
} // function _storeData()
|
||||
@@ -90,7 +90,7 @@ class PHPExcel_CachedObjectStorage_APC extends PHPExcel_CachedObjectStorage_Cach
|
||||
if ($success === false) {
|
||||
// Entry no longer exists in APC, so clear it from the cache array
|
||||
parent::deleteCacheData($pCoord);
|
||||
throw new Exception('Cell entry no longer exists in APC');
|
||||
throw new Exception('Cell entry '.$cellID.' no longer exists in APC');
|
||||
}
|
||||
return true;
|
||||
}
|
||||
@@ -117,7 +117,7 @@ class PHPExcel_CachedObjectStorage_APC extends PHPExcel_CachedObjectStorage_Cach
|
||||
if ($obj === false) {
|
||||
// Entry no longer exists in APC, so clear it from the cache array
|
||||
parent::deleteCacheData($pCoord);
|
||||
throw new Exception('Cell entry no longer exists in APC');
|
||||
throw new Exception('Cell entry '.$cellID.' no longer exists in APC');
|
||||
}
|
||||
} else {
|
||||
// Return null if requested entry doesn't exist in cache
|
||||
@@ -150,6 +150,35 @@ class PHPExcel_CachedObjectStorage_APC extends PHPExcel_CachedObjectStorage_Cach
|
||||
} // function deleteCacheData()
|
||||
|
||||
|
||||
/**
|
||||
* Clone the cell collection
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function copyCellCollection(PHPExcel_Worksheet $parent) {
|
||||
parent::copyCellCollection($parent);
|
||||
// Get a new id for the new file name
|
||||
$baseUnique = $this->_getUniqueID();
|
||||
$newCachePrefix = substr(md5($baseUnique),0,8).'.';
|
||||
$cacheList = $this->getCellList();
|
||||
foreach($cacheList as $cellID) {
|
||||
if ($cellID != $this->_currentObjectID) {
|
||||
$obj = apc_fetch($this->_cachePrefix.$cellID.'.cache');
|
||||
if ($obj === false) {
|
||||
// Entry no longer exists in APC, so clear it from the cache array
|
||||
parent::deleteCacheData($cellID);
|
||||
throw new Exception('Cell entry '.$cellID.' no longer exists in APC');
|
||||
}
|
||||
if (!apc_store($newCachePrefix.$cellID.'.cache',$obj,$this->_cacheTime)) {
|
||||
$this->__destruct();
|
||||
throw new Exception('Failed to store cell '.$cellID.' in APC');
|
||||
}
|
||||
}
|
||||
}
|
||||
$this->_cachePrefix = $newCachePrefix;
|
||||
} // function copyCellCollection()
|
||||
|
||||
|
||||
public function unsetWorksheetCells() {
|
||||
if(!is_null($this->_currentObject)) {
|
||||
$this->_currentObject->detach();
|
||||
@@ -170,12 +199,8 @@ class PHPExcel_CachedObjectStorage_APC extends PHPExcel_CachedObjectStorage_Cach
|
||||
$cacheTime = (isset($arguments['cacheTime'])) ? $arguments['cacheTime'] : 600;
|
||||
|
||||
if (is_null($this->_cachePrefix)) {
|
||||
if (function_exists('posix_getpid')) {
|
||||
$baseUnique = posix_getpid();
|
||||
} else {
|
||||
$baseUnique = mt_rand();
|
||||
}
|
||||
$this->_cachePrefix = substr(md5(uniqid($baseUnique,true)),0,8).'.';
|
||||
$baseUnique = $this->_getUniqueID();
|
||||
$this->_cachePrefix = substr(md5($baseUnique),0,8).'.';
|
||||
$this->_cacheTime = $cacheTime;
|
||||
|
||||
parent::__construct($parent);
|
||||
|
@@ -22,7 +22,7 @@
|
||||
* @package PHPExcel_CachedObjectStorage
|
||||
* @copyright Copyright (c) 2006 - 2010 PHPExcel (http://www.codeplex.com/PHPExcel)
|
||||
* @license http://www.gnu.org/licenses/old-licenses/lgpl-2.1.txt LGPL
|
||||
* @version 1.7.3c, 2010-06-01
|
||||
* @version 1.7.4, 2010-08-26
|
||||
*/
|
||||
|
||||
|
||||
@@ -116,7 +116,7 @@ class PHPExcel_CachedObjectStorage_CacheBase {
|
||||
$this->_currentObjectID = $this->_currentObject = null;
|
||||
}
|
||||
|
||||
if (isset($this->_cellCache[$pCoord])) {
|
||||
if (is_object($this->_cellCache[$pCoord])) {
|
||||
$this->_cellCache[$pCoord]->detach();
|
||||
unset($this->_cellCache[$pCoord]);
|
||||
}
|
||||
@@ -141,13 +141,34 @@ class PHPExcel_CachedObjectStorage_CacheBase {
|
||||
public function getSortedCellList() {
|
||||
$sortKeys = array();
|
||||
foreach ($this->_cellCache as $coord => $value) {
|
||||
preg_match('/^(\w+)(\d+)$/U',$coord,$matches);
|
||||
list(,$colNum,$rowNum) = $matches;
|
||||
$sortKeys[$coord] = str_pad($rowNum . str_pad($colNum,3,'@',STR_PAD_LEFT),12,'0',STR_PAD_LEFT);
|
||||
list($colNum,$rowNum) = sscanf($coord,'%[A-Z]%d');
|
||||
$sortKeys[sprintf('%09d%3s',$rowNum,$colNum)] = $coord;
|
||||
}
|
||||
asort($sortKeys);
|
||||
ksort($sortKeys);
|
||||
|
||||
return array_keys($sortKeys);
|
||||
return array_values($sortKeys);
|
||||
} // function sortCellList()
|
||||
|
||||
|
||||
protected function _getUniqueID() {
|
||||
if (function_exists('posix_getpid')) {
|
||||
$baseUnique = posix_getpid();
|
||||
} else {
|
||||
$baseUnique = mt_rand();
|
||||
}
|
||||
return uniqid($baseUnique,true);
|
||||
}
|
||||
|
||||
/**
|
||||
* Clone the cell collection
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function copyCellCollection(PHPExcel_Worksheet $parent) {
|
||||
$this->_parent = $parent;
|
||||
if ((!is_null($this->_currentObject)) && (is_object($this->_currentObject))) {
|
||||
$this->_currentObject->attach($parent);
|
||||
}
|
||||
} // function copyCellCollection()
|
||||
|
||||
}
|
||||
|
@@ -22,7 +22,7 @@
|
||||
* @package PHPExcel_CachedObjectStorage
|
||||
* @copyright Copyright (c) 2006 - 2010 PHPExcel (http://www.codeplex.com/PHPExcel)
|
||||
* @license http://www.gnu.org/licenses/old-licenses/lgpl-2.1.txt LGPL
|
||||
* @version 1.7.3c, 2010-06-01
|
||||
* @version 1.7.4, 2010-08-26
|
||||
*/
|
||||
|
||||
|
||||
@@ -103,6 +103,24 @@ class PHPExcel_CachedObjectStorage_DiscISAM extends PHPExcel_CachedObjectStorage
|
||||
} // function getCacheData()
|
||||
|
||||
|
||||
/**
|
||||
* Clone the cell collection
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function copyCellCollection(PHPExcel_Worksheet $parent) {
|
||||
parent::copyCellCollection($parent);
|
||||
// Get a new id for the new file name
|
||||
$baseUnique = $this->_getUniqueID();
|
||||
$newFileName = sys_get_temp_dir().'/PHPExcel.'.$baseUnique.'.cache';
|
||||
// Copy the existing cell cache file
|
||||
copy ($this->_fileName,$newFileName);
|
||||
$this->_fileName = $newFileName;
|
||||
// Open the copied cell cache file
|
||||
$this->_fileHandle = fopen($this->_fileName,'a+');
|
||||
} // function copyCellCollection()
|
||||
|
||||
|
||||
public function unsetWorksheetCells() {
|
||||
if(!is_null($this->_currentObject)) {
|
||||
$this->_currentObject->detach();
|
||||
@@ -121,12 +139,8 @@ class PHPExcel_CachedObjectStorage_DiscISAM extends PHPExcel_CachedObjectStorage
|
||||
public function __construct(PHPExcel_Worksheet $parent) {
|
||||
parent::__construct($parent);
|
||||
if (is_null($this->_fileHandle)) {
|
||||
if (function_exists('posix_getpid')) {
|
||||
$baseUnique = posix_getpid();
|
||||
} else {
|
||||
$baseUnique = mt_rand();
|
||||
}
|
||||
$this->_fileName = sys_get_temp_dir().'/PHPExcel.'.uniqid($baseUnique,true).'.cache';
|
||||
$baseUnique = $this->_getUniqueID();
|
||||
$this->_fileName = sys_get_temp_dir().'/PHPExcel.'.$baseUnique.'.cache';
|
||||
$this->_fileHandle = fopen($this->_fileName,'a+');
|
||||
}
|
||||
} // function __construct()
|
||||
|
@@ -22,7 +22,7 @@
|
||||
* @package PHPExcel_CachedObjectStorage
|
||||
* @copyright Copyright (c) 2006 - 2010 PHPExcel (http://www.codeplex.com/PHPExcel)
|
||||
* @license http://www.gnu.org/licenses/old-licenses/lgpl-2.1.txt LGPL
|
||||
* @version 1.7.3c, 2010-06-01
|
||||
* @version 1.7.4, 2010-08-26
|
||||
*/
|
||||
|
||||
|
||||
@@ -94,4 +94,11 @@ interface PHPExcel_CachedObjectStorage_ICache
|
||||
*/
|
||||
public function getSortedCellList();
|
||||
|
||||
/**
|
||||
* Clone the cell collection
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function copyCellCollection(PHPExcel_Worksheet $parent);
|
||||
|
||||
}
|
||||
|
@@ -22,7 +22,7 @@
|
||||
* @package PHPExcel_CachedObjectStorage
|
||||
* @copyright Copyright (c) 2006 - 2010 PHPExcel (http://www.codeplex.com/PHPExcel)
|
||||
* @license http://www.gnu.org/licenses/old-licenses/lgpl-2.1.txt LGPL
|
||||
* @version 1.7.3c, 2010-06-01
|
||||
* @version 1.7.4, 2010-08-26
|
||||
*/
|
||||
|
||||
|
||||
@@ -49,7 +49,7 @@ class PHPExcel_CachedObjectStorage_Memcache extends PHPExcel_CachedObjectStorage
|
||||
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)) {
|
||||
$this->__destruct();
|
||||
throw new Exception('Failed to store cell in Memcache');
|
||||
throw new Exception('Failed to store cell '.$cellID.' in MemCache');
|
||||
}
|
||||
}
|
||||
$this->_currentObjectID = $this->_currentObject = null;
|
||||
@@ -90,12 +90,12 @@ class PHPExcel_CachedObjectStorage_Memcache extends PHPExcel_CachedObjectStorage
|
||||
if ($this->_currentObjectID == $pCoord) {
|
||||
return true;
|
||||
}
|
||||
// Check if the requested entry still exists in apc
|
||||
// Check if the requested entry still exists in Memcache
|
||||
$success = $this->_memcache->get($this->_cachePrefix.$pCoord.'.cache');
|
||||
if ($success === false) {
|
||||
// Entry no longer exists in Memcache, so clear it from the cache array
|
||||
parent::deleteCacheData($pCoord);
|
||||
throw new Exception('Cell entry no longer exists in Memcache');
|
||||
throw new Exception('Cell entry '.$cellID.' no longer exists in MemCache');
|
||||
}
|
||||
return true;
|
||||
}
|
||||
@@ -122,7 +122,7 @@ class PHPExcel_CachedObjectStorage_Memcache extends PHPExcel_CachedObjectStorage
|
||||
if ($obj === false) {
|
||||
// Entry no longer exists in Memcache, so clear it from the cache array
|
||||
parent::deleteCacheData($pCoord);
|
||||
throw new Exception('Cell entry no longer exists in Memcache');
|
||||
throw new Exception('Cell entry '.$cellID.' no longer exists in MemCache');
|
||||
}
|
||||
} else {
|
||||
// Return null if requested entry doesn't exist in cache
|
||||
@@ -155,6 +155,35 @@ class PHPExcel_CachedObjectStorage_Memcache extends PHPExcel_CachedObjectStorage
|
||||
} // function deleteCacheData()
|
||||
|
||||
|
||||
/**
|
||||
* Clone the cell collection
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function copyCellCollection(PHPExcel_Worksheet $parent) {
|
||||
parent::copyCellCollection($parent);
|
||||
// Get a new id for the new file name
|
||||
$baseUnique = $this->_getUniqueID();
|
||||
$newCachePrefix = substr(md5($baseUnique),0,8).'.';
|
||||
$cacheList = $this->getCellList();
|
||||
foreach($cacheList as $cellID) {
|
||||
if ($cellID != $this->_currentObjectID) {
|
||||
$obj = $this->_memcache->get($this->_cachePrefix.$cellID.'.cache');
|
||||
if ($obj === false) {
|
||||
// Entry no longer exists in Memcache, so clear it from the cache array
|
||||
parent::deleteCacheData($cellID);
|
||||
throw new Exception('Cell entry '.$cellID.' no longer exists in MemCache');
|
||||
}
|
||||
if (!$this->_memcache->add($newCachePrefix.$cellID.'.cache',$obj,NULL,$this->_cacheTime)) {
|
||||
$this->__destruct();
|
||||
throw new Exception('Failed to store cell '.$cellID.' in MemCache');
|
||||
}
|
||||
}
|
||||
}
|
||||
$this->_cachePrefix = $newCachePrefix;
|
||||
} // function copyCellCollection()
|
||||
|
||||
|
||||
public function unsetWorksheetCells() {
|
||||
if(!is_null($this->_currentObject)) {
|
||||
$this->_currentObject->detach();
|
||||
@@ -177,17 +206,13 @@ class PHPExcel_CachedObjectStorage_Memcache extends PHPExcel_CachedObjectStorage
|
||||
$cacheTime = (isset($arguments['cacheTime'])) ? $arguments['cacheTime'] : 600;
|
||||
|
||||
if (is_null($this->_cachePrefix)) {
|
||||
if (function_exists('posix_getpid')) {
|
||||
$baseUnique = posix_getpid();
|
||||
} else {
|
||||
$baseUnique = mt_rand();
|
||||
}
|
||||
$this->_cachePrefix = substr(md5(uniqid($baseUnique,true)),0,8).'.';
|
||||
$baseUnique = $this->_getUniqueID();
|
||||
$this->_cachePrefix = substr(md5($baseUnique),0,8).'.';
|
||||
|
||||
// Set a new Memcache object and connect to the Memcache server
|
||||
$this->_memcache = new Memcache();
|
||||
if (!$this->_memcache->addServer($memcacheServer, $memcachePort, false, 50, 5, 5, true, array($this, 'failureCallback')) {
|
||||
throw new Exception('Could not connect to Memcache server at '.$memcacheServer.':'.$memcachePort);
|
||||
if (!$this->_memcache->addServer($memcacheServer, $memcachePort, false, 50, 5, 5, true, array($this, 'failureCallback'))) {
|
||||
throw new Exception('Could not connect to MemCache server at '.$memcacheServer.':'.$memcachePort);
|
||||
}
|
||||
$this->_cacheTime = $cacheTime;
|
||||
|
||||
@@ -197,7 +222,7 @@ class PHPExcel_CachedObjectStorage_Memcache extends PHPExcel_CachedObjectStorage
|
||||
|
||||
|
||||
public function failureCallback($host, $port) {
|
||||
throw new Exception('memcache '.$host.':'.$port' failed');
|
||||
throw new Exception('memcache '.$host.':'.$port.' failed');
|
||||
}
|
||||
|
||||
|
||||
|
@@ -22,7 +22,7 @@
|
||||
* @package PHPExcel_CachedObjectStorage
|
||||
* @copyright Copyright (c) 2006 - 2010 PHPExcel (http://www.codeplex.com/PHPExcel)
|
||||
* @license http://www.gnu.org/licenses/old-licenses/lgpl-2.1.txt LGPL
|
||||
* @version 1.7.3c, 2010-06-01
|
||||
* @version 1.7.4, 2010-08-26
|
||||
*/
|
||||
|
||||
|
||||
|
@@ -22,7 +22,7 @@
|
||||
* @package PHPExcel_CachedObjectStorage
|
||||
* @copyright Copyright (c) 2006 - 2010 PHPExcel (http://www.codeplex.com/PHPExcel)
|
||||
* @license http://www.gnu.org/licenses/old-licenses/lgpl-2.1.txt LGPL
|
||||
* @version 1.7.3c, 2010-06-01
|
||||
* @version 1.7.4, 2010-08-26
|
||||
*/
|
||||
|
||||
|
||||
|
@@ -22,7 +22,7 @@
|
||||
* @package PHPExcel_CachedObjectStorage
|
||||
* @copyright Copyright (c) 2006 - 2010 PHPExcel (http://www.codeplex.com/PHPExcel)
|
||||
* @license http://www.gnu.org/licenses/old-licenses/lgpl-2.1.txt LGPL
|
||||
* @version 1.7.3c, 2010-06-01
|
||||
* @version 1.7.4, 2010-08-26
|
||||
*/
|
||||
|
||||
|
||||
|
@@ -22,7 +22,7 @@
|
||||
* @package PHPExcel_CachedObjectStorage
|
||||
* @copyright Copyright (c) 2006 - 2010 PHPExcel (http://www.codeplex.com/PHPExcel)
|
||||
* @license http://www.gnu.org/licenses/old-licenses/lgpl-2.1.txt LGPL
|
||||
* @version 1.7.3c, 2010-06-01
|
||||
* @version 1.7.4, 2010-08-26
|
||||
*/
|
||||
|
||||
|
||||
@@ -38,6 +38,8 @@ class PHPExcel_CachedObjectStorage_PHPTemp extends PHPExcel_CachedObjectStorage_
|
||||
private $_fileHandle = null;
|
||||
|
||||
|
||||
private $_memoryCacheSize = null;
|
||||
|
||||
private function _storeData() {
|
||||
$this->_currentObject->detach();
|
||||
|
||||
@@ -102,6 +104,24 @@ class PHPExcel_CachedObjectStorage_PHPTemp extends PHPExcel_CachedObjectStorage_
|
||||
} // function getCacheData()
|
||||
|
||||
|
||||
/**
|
||||
* Clone the cell collection
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function copyCellCollection(PHPExcel_Worksheet $parent) {
|
||||
parent::copyCellCollection($parent);
|
||||
// Open a new stream for the cell cache data
|
||||
$newFileHandle = fopen('php://temp/maxmemory:'.$this->_memoryCacheSize,'a+');
|
||||
// Copy the existing cell cache data to the new stream
|
||||
fseek($this->_fileHandle,0);
|
||||
while (!feof($this->_fileHandle)) {
|
||||
fwrite($newFileHandle,fread($this->_fileHandle, 1024));
|
||||
}
|
||||
$this->_fileHandle = $newFileHandle;
|
||||
} // function copyCellCollection()
|
||||
|
||||
|
||||
public function unsetWorksheetCells() {
|
||||
if(!is_null($this->_currentObject)) {
|
||||
$this->_currentObject->detach();
|
||||
@@ -118,11 +138,11 @@ class PHPExcel_CachedObjectStorage_PHPTemp extends PHPExcel_CachedObjectStorage_
|
||||
|
||||
|
||||
public function __construct(PHPExcel_Worksheet $parent, $memoryCacheSize = '1MB') {
|
||||
$memoryCacheSize = (isset($arguments['memoryCacheSize'])) ? $arguments['memoryCacheSize'] : '1MB';
|
||||
$this->_memoryCacheSize = (isset($arguments['memoryCacheSize'])) ? $arguments['memoryCacheSize'] : '1MB';
|
||||
|
||||
parent::__construct($parent);
|
||||
if (is_null($this->_fileHandle)) {
|
||||
$this->_fileHandle = fopen('php://temp/maxmemory:'.$memoryCacheSize,'a+');
|
||||
$this->_fileHandle = fopen('php://temp/maxmemory:'.$this->_memoryCacheSize,'a+');
|
||||
}
|
||||
} // function __construct()
|
||||
|
||||
|
@@ -22,7 +22,7 @@
|
||||
* @package PHPExcel_CachedObjectStorage
|
||||
* @copyright Copyright (c) 2006 - 2010 PHPExcel (http://www.codeplex.com/PHPExcel)
|
||||
* @license http://www.gnu.org/licenses/old-licenses/lgpl-2.1.txt LGPL
|
||||
* @version 1.7.3c, 2010-06-01
|
||||
* @version 1.7.4, 2010-08-26
|
||||
*/
|
||||
|
||||
|
||||
@@ -45,9 +45,15 @@ class PHPExcel_CachedObjectStorage_Wincache extends PHPExcel_CachedObjectStorage
|
||||
|
||||
$obj = serialize($this->_currentObject);
|
||||
if (wincache_ucache_exists($this->_cachePrefix.$this->_currentObjectID.'.cache')) {
|
||||
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();
|
||||
throw new Exception('Failed to store cell '.$cellID.' in WinCache');
|
||||
}
|
||||
} else {
|
||||
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();
|
||||
throw new Exception('Failed to store cell '.$cellID.' in WinCache');
|
||||
}
|
||||
}
|
||||
|
||||
$this->_currentObjectID = $this->_currentObject = null;
|
||||
@@ -93,7 +99,7 @@ class PHPExcel_CachedObjectStorage_Wincache extends PHPExcel_CachedObjectStorage
|
||||
if ($success === false) {
|
||||
// Entry no longer exists in Wincache, so clear it from the cache array
|
||||
parent::deleteCacheData($pCoord);
|
||||
throw new Exception('Cell entry no longer exists in Wincache');
|
||||
throw new Exception('Cell entry '.$cellID.' no longer exists in WinCache');
|
||||
}
|
||||
return true;
|
||||
}
|
||||
@@ -120,9 +126,9 @@ class PHPExcel_CachedObjectStorage_Wincache extends PHPExcel_CachedObjectStorage
|
||||
$success = false;
|
||||
$obj = wincache_ucache_get($this->_cachePrefix.$pCoord.'.cache', $success);
|
||||
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);
|
||||
throw new Exception('Cell entry no longer exists in Wincache');
|
||||
throw new Exception('Cell entry '.$cellID.' no longer exists in WinCache');
|
||||
}
|
||||
} else {
|
||||
// Return null if requested entry doesn't exist in cache
|
||||
@@ -155,13 +161,43 @@ class PHPExcel_CachedObjectStorage_Wincache extends PHPExcel_CachedObjectStorage
|
||||
} // function deleteCacheData()
|
||||
|
||||
|
||||
/**
|
||||
* Clone the cell collection
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function copyCellCollection(PHPExcel_Worksheet $parent) {
|
||||
parent::copyCellCollection($parent);
|
||||
// Get a new id for the new file name
|
||||
$baseUnique = $this->_getUniqueID();
|
||||
$newCachePrefix = substr(md5($baseUnique),0,8).'.';
|
||||
$cacheList = $this->getCellList();
|
||||
foreach($cacheList as $cellID) {
|
||||
if ($cellID != $this->_currentObjectID) {
|
||||
$success = false;
|
||||
$obj = wincache_ucache_get($this->_cachePrefix.$cellID.'.cache', $success);
|
||||
if ($success === false) {
|
||||
// Entry no longer exists in WinCache, so clear it from the cache array
|
||||
parent::deleteCacheData($cellID);
|
||||
throw new Exception('Cell entry '.$cellID.' no longer exists in Wincache');
|
||||
}
|
||||
if (!wincache_ucache_add($newCachePrefix.$cellID.'.cache', $obj, $this->_cacheTime)) {
|
||||
$this->__destruct();
|
||||
throw new Exception('Failed to store cell '.$cellID.' in Wincache');
|
||||
}
|
||||
}
|
||||
}
|
||||
$this->_cachePrefix = $newCachePrefix;
|
||||
} // function copyCellCollection()
|
||||
|
||||
|
||||
public function unsetWorksheetCells() {
|
||||
if(!is_null($this->_currentObject)) {
|
||||
$this->_currentObject->detach();
|
||||
$this->_currentObject = $this->_currentObjectID = null;
|
||||
}
|
||||
|
||||
// Flush the Wincache cache
|
||||
// Flush the WinCache cache
|
||||
$this->__destruct();
|
||||
|
||||
$this->_cellCache = array();
|
||||
@@ -175,12 +211,8 @@ class PHPExcel_CachedObjectStorage_Wincache extends PHPExcel_CachedObjectStorage
|
||||
$cacheTime = (isset($arguments['cacheTime'])) ? $arguments['cacheTime'] : 600;
|
||||
|
||||
if (is_null($this->_cachePrefix)) {
|
||||
if (function_exists('posix_getpid')) {
|
||||
$baseUnique = posix_getpid();
|
||||
} else {
|
||||
$baseUnique = mt_rand();
|
||||
}
|
||||
$this->_cachePrefix = substr(md5(uniqid($baseUnique,true)),0,8).'.';
|
||||
$baseUnique = $this->_getUniqueID();
|
||||
$this->_cachePrefix = substr(md5($baseUnique),0,8).'.';
|
||||
$this->_cacheTime = $cacheTime;
|
||||
|
||||
parent::__construct($parent);
|
||||
|
@@ -22,7 +22,7 @@
|
||||
* @package PHPExcel_Calculation
|
||||
* @copyright Copyright (c) 2006 - 2010 PHPExcel (http://www.codeplex.com/PHPExcel)
|
||||
* @license http://www.gnu.org/licenses/old-licenses/lgpl-2.1.txt LGPL
|
||||
* @version 1.7.3c, 2010-06-01
|
||||
* @version 1.7.4, 2010-08-26
|
||||
*/
|
||||
|
||||
|
||||
@@ -2248,7 +2248,7 @@ class PHPExcel_Calculation {
|
||||
}
|
||||
$this->debugLogStack[] = $wsTitle.'!'.$cellID;
|
||||
// Parse the formula onto the token stack and calculate the value
|
||||
$cellValue = $this->_processTokenStack($this->_parseFormula($formula), $cellID, $pCell);
|
||||
$cellValue = $this->_processTokenStack($this->_parseFormula($formula, $pCell), $cellID, $pCell);
|
||||
array_pop($this->debugLogStack);
|
||||
|
||||
// Save to calculation cache
|
||||
@@ -2462,31 +2462,24 @@ class PHPExcel_Calculation {
|
||||
$value = array_pop($testArray);
|
||||
}
|
||||
|
||||
switch (gettype($value)) {
|
||||
case 'double' :
|
||||
case 'float' :
|
||||
$typeString = 'a floating point number';
|
||||
break;
|
||||
case 'integer' :
|
||||
$typeString = 'an integer number';
|
||||
break;
|
||||
case 'boolean' :
|
||||
$typeString = 'a boolean';
|
||||
break;
|
||||
case 'array' :
|
||||
$typeString = 'a matrix';
|
||||
break;
|
||||
case 'string' :
|
||||
if ($value == '') {
|
||||
return 'an empty string';
|
||||
} elseif ($value{0} == '#') {
|
||||
return 'a '.$value.' error';
|
||||
} else {
|
||||
$typeString = 'a string';
|
||||
}
|
||||
break;
|
||||
case 'NULL' :
|
||||
return 'a null value';
|
||||
if (is_null($value)) {
|
||||
return 'a null value';
|
||||
} elseif (is_float($value)) {
|
||||
$typeString = 'a floating point number';
|
||||
} elseif(is_int($value)) {
|
||||
$typeString = 'an integer number';
|
||||
} elseif(is_bool($value)) {
|
||||
$typeString = 'a boolean';
|
||||
} elseif(is_array($value)) {
|
||||
$typeString = 'a matrix';
|
||||
} else {
|
||||
if ($value == '') {
|
||||
return 'an empty string';
|
||||
} elseif ($value{0} == '#') {
|
||||
return 'a '.$value.' error';
|
||||
} else {
|
||||
$typeString = 'a string';
|
||||
}
|
||||
}
|
||||
return $typeString.' with a value of '.self::_showValue($value);
|
||||
} // function _showTypeDetails()
|
||||
@@ -2548,11 +2541,15 @@ class PHPExcel_Calculation {
|
||||
|
||||
|
||||
// Convert infix to postfix notation
|
||||
private function _parseFormula($formula) {
|
||||
private function _parseFormula($formula, PHPExcel_Cell $pCell = null) {
|
||||
if (($formula = self::_convertMatrixReferences(trim($formula))) === false) {
|
||||
return false;
|
||||
}
|
||||
|
||||
// If we're using cell caching, then $pCell may well be flushed back to the cache (which detaches the parent worksheet),
|
||||
// so we store the parent worksheet so that we can re-attach it when necessary
|
||||
$pCellParent = (!is_null($pCell)) ? $pCell->getParent() : null;
|
||||
|
||||
// Binary Operators
|
||||
// These operators always work on two values
|
||||
// Array key is the operator, the value indicates whether this is a left or right associative operator
|
||||
@@ -2774,12 +2771,56 @@ class PHPExcel_Calculation {
|
||||
// echo 'Element '.$val.' is a Cell reference<br />';
|
||||
// Watch for this case-change when modifying to allow cell references in different worksheets...
|
||||
// Should only be applied to the actual cell column, not the worksheet name
|
||||
|
||||
// If the last entry on the stack was a : operator, then we have a cell range reference
|
||||
$testPrevOp = $stack->last(1);
|
||||
if ($testPrevOp['value'] == ':') {
|
||||
// If we have a worksheet reference, then we're playing with a 3D reference
|
||||
if ($matches[2] == '') {
|
||||
// Otherwise, we 'inherit' the worksheet reference from the start cell reference
|
||||
// The start of the cell range reference should be the last entry in $output
|
||||
$startCellRef = $output[count($output)-1]['value'];
|
||||
preg_match('/^'.self::CALCULATION_REGEXP_CELLREF.'$/i', $startCellRef, $startMatches);
|
||||
if ($startMatches[2] > '') {
|
||||
$val = $startMatches[2].'!'.$val;
|
||||
}
|
||||
}
|
||||
}
|
||||
$cellRef = strtoupper($val);
|
||||
// $output[] = $cellRef;
|
||||
|
||||
$output[] = array('type' => 'Cell Reference', 'value' => $val, 'reference' => $cellRef);
|
||||
// $expectingOperator = false;
|
||||
} else { // it's a variable, constant, string, number or boolean
|
||||
// echo 'Element is a Variable, Constant, String, Number or Boolean<br />';
|
||||
// If the last entry on the stack was a : operator, then we may have a row or column range reference
|
||||
$testPrevOp = $stack->last(1);
|
||||
if ($testPrevOp['value'] == ':') {
|
||||
$startRowColRef = $output[count($output)-1]['value'];
|
||||
$rangeWS1 = '';
|
||||
if (strpos('!',$startRowColRef) !== false) {
|
||||
list($rangeWS1,$startRowColRef) = explode('!',$startRowColRef);
|
||||
}
|
||||
if ($rangeWS1 != '') $rangeWS1 .= '!';
|
||||
$rangeWS2 = $rangeWS1;
|
||||
if (strpos('!',$val) !== false) {
|
||||
list($rangeWS2,$val) = explode('!',$val);
|
||||
}
|
||||
if ($rangeWS2 != '') $rangeWS2 .= '!';
|
||||
if ((is_integer($startRowColRef)) && (ctype_digit($val)) &&
|
||||
($startRowColRef <= 1048576) && ($val <= 1048576)) {
|
||||
// Row range
|
||||
$endRowColRef = (!is_null($pCellParent)) ? $pCellParent->getHighestColumn() : 'XFD'; // Max 16,384 columns for Excel2007
|
||||
$output[count($output)-1]['value'] = $rangeWS1.'A'.$startRowColRef;
|
||||
$val = $rangeWS2.$endRowColRef.$val;
|
||||
} elseif ((ctype_alpha($startRowColRef)) && (ctype_alpha($val)) &&
|
||||
(strlen($startRowColRef) <= 3) && (strlen($val) <= 3)) {
|
||||
// Column range
|
||||
$endRowColRef = (!is_null($pCellParent)) ? $pCellParent->getHighestRow() : 1048576; // Max 1,048,576 rows for Excel2007
|
||||
$output[count($output)-1]['value'] = $rangeWS1.strtoupper($startRowColRef).'1';
|
||||
$val = $rangeWS2.$val.$endRowColRef;
|
||||
}
|
||||
}
|
||||
|
||||
$localeConstant = false;
|
||||
if ($opCharacter == '"') {
|
||||
// echo 'Element is a String<br />';
|
||||
@@ -2808,6 +2849,8 @@ class PHPExcel_Calculation {
|
||||
}
|
||||
$index += $length;
|
||||
|
||||
} elseif ($opCharacter == '$') { // absolute row or column range
|
||||
$index++;
|
||||
} elseif ($opCharacter == ')') { // miscellaneous error checking
|
||||
if ($expectingOperand) {
|
||||
$output[] = array('type' => 'Null Value', 'value' => self::$_ExcelConstants['NULL'], 'reference' => NULL);
|
||||
@@ -3067,7 +3110,7 @@ class PHPExcel_Calculation {
|
||||
return $this->_raiseFormulaError('Unable to access Cell Reference');
|
||||
}
|
||||
$this->_writeDebug('Evaluation Result for cells '.$cellRef.' in worksheet '.$matches[2].' is '.self::_showTypeDetails($cellValue));
|
||||
$cellRef = $matches[2].'!'.$cellRef;
|
||||
// $cellRef = $matches[2].'!'.$cellRef;
|
||||
} else {
|
||||
// echo '$cellRef='.$cellRef.' in current worksheet<br />';
|
||||
$this->_writeDebug('Evaluating Cell Range '.$cellRef.' in current worksheet');
|
||||
@@ -3101,7 +3144,7 @@ class PHPExcel_Calculation {
|
||||
return $this->_raiseFormulaError('Unable to access Cell Reference');
|
||||
}
|
||||
$this->_writeDebug('Evaluation Result for cell '.$cellRef.' in worksheet '.$matches[2].' is '.self::_showTypeDetails($cellValue));
|
||||
$cellRef = $matches[2].'!'.$cellRef;
|
||||
// $cellRef = $matches[2].'!'.$cellRef;
|
||||
} else {
|
||||
// echo '$cellRef='.$cellRef.' in current worksheet<br />';
|
||||
$this->_writeDebug('Evaluating Cell '.$cellRef.' in current worksheet');
|
||||
|
@@ -22,7 +22,7 @@
|
||||
* @package PHPExcel_Calculation
|
||||
* @copyright Copyright (c) 2006 - 2010 PHPExcel (http://www.codeplex.com/PHPExcel)
|
||||
* @license http://www.gnu.org/licenses/old-licenses/lgpl-2.1.txt LGPL
|
||||
* @version 1.7.3c, 2010-06-01
|
||||
* @version 1.7.4, 2010-08-26
|
||||
*/
|
||||
|
||||
|
||||
|
@@ -22,7 +22,7 @@
|
||||
* @package PHPExcel_Calculation
|
||||
* @copyright Copyright (c) 2006 - 2010 PHPExcel (http://www.codeplex.com/PHPExcel)
|
||||
* @license http://www.gnu.org/licenses/old-licenses/lgpl-2.1.txt LGPL
|
||||
* @version 1.7.3c, 2010-06-01
|
||||
* @version 1.7.4, 2010-08-26
|
||||
*/
|
||||
|
||||
/**
|
||||
|
@@ -22,7 +22,7 @@
|
||||
* @package PHPExcel_Calculation
|
||||
* @copyright Copyright (c) 2006 - 2010 PHPExcel (http://www.codeplex.com/PHPExcel)
|
||||
* @license http://www.gnu.org/licenses/old-licenses/lgpl-2.1.txt LGPL
|
||||
* @version 1.7.3c, 2010-06-01
|
||||
* @version 1.7.4, 2010-08-26
|
||||
*/
|
||||
|
||||
|
||||
|
@@ -22,7 +22,7 @@
|
||||
* @package PHPExcel_Calculation
|
||||
* @copyright Copyright (c) 2006 - 2010 PHPExcel (http://www.codeplex.com/PHPExcel)
|
||||
* @license http://www.gnu.org/licenses/old-licenses/lgpl-2.1.txt LGPL
|
||||
* @version 1.7.3c, 2010-06-01
|
||||
* @version 1.7.4, 2010-08-26
|
||||
*/
|
||||
|
||||
|
||||
|
@@ -22,7 +22,7 @@
|
||||
* @package PHPExcel_Calculation
|
||||
* @copyright Copyright (c) 2006 - 2010 PHPExcel (http://www.codeplex.com/PHPExcel)
|
||||
* @license http://www.gnu.org/licenses/old-licenses/lgpl-2.1.txt LGPL
|
||||
* @version 1.7.3c, 2010-06-01
|
||||
* @version 1.7.4, 2010-08-26
|
||||
*/
|
||||
|
||||
|
||||
|
@@ -22,7 +22,7 @@
|
||||
* @package PHPExcel_Calculation
|
||||
* @copyright Copyright (c) 2006 - 2010 PHPExcel (http://www.codeplex.com/PHPExcel)
|
||||
* @license http://www.gnu.org/licenses/old-licenses/lgpl-2.1.txt LGPL
|
||||
* @version 1.7.3c, 2010-06-01
|
||||
* @version 1.7.4, 2010-08-26
|
||||
*/
|
||||
|
||||
|
||||
@@ -1885,7 +1885,7 @@ class PHPExcel_Calculation_Functions {
|
||||
}
|
||||
|
||||
// Return
|
||||
if (($aCount > 0) && ($returnValue > 0)) {
|
||||
if (($aCount > 0) && ($returnValue >= 0)) {
|
||||
return sqrt($returnValue / $aCount);
|
||||
}
|
||||
}
|
||||
@@ -1937,7 +1937,7 @@ class PHPExcel_Calculation_Functions {
|
||||
}
|
||||
|
||||
// Return
|
||||
if (($aCount > 0) && ($returnValue > 0)) {
|
||||
if (($aCount > 0) && ($returnValue >= 0)) {
|
||||
return sqrt($returnValue / $aCount);
|
||||
}
|
||||
}
|
||||
@@ -1984,7 +1984,7 @@ class PHPExcel_Calculation_Functions {
|
||||
}
|
||||
|
||||
// Return
|
||||
if (($aCount > 0) && ($returnValue > 0)) {
|
||||
if (($aCount > 0) && ($returnValue >= 0)) {
|
||||
return sqrt($returnValue / $aCount);
|
||||
}
|
||||
}
|
||||
@@ -2036,7 +2036,7 @@ class PHPExcel_Calculation_Functions {
|
||||
}
|
||||
|
||||
// Return
|
||||
if (($aCount > 0) && ($returnValue > 0)) {
|
||||
if (($aCount > 0) && ($returnValue >= 0)) {
|
||||
return sqrt($returnValue / $aCount);
|
||||
}
|
||||
}
|
||||
@@ -5691,7 +5691,7 @@ class PHPExcel_Calculation_Functions {
|
||||
* @return string Version information
|
||||
*/
|
||||
public static function VERSION() {
|
||||
return 'PHPExcel 1.7.3c, 2010-06-01';
|
||||
return 'PHPExcel 1.7.4, 2010-08-26';
|
||||
} // function VERSION()
|
||||
|
||||
|
||||
@@ -11139,112 +11139,101 @@ class PHPExcel_Calculation_Functions {
|
||||
* @return integer The relative position of the found item
|
||||
*/
|
||||
public static function MATCH($lookup_value, $lookup_array, $match_type=1) {
|
||||
|
||||
// flatten the lookup_array
|
||||
$lookup_array = self::flattenArray($lookup_array);
|
||||
|
||||
// flatten lookup_value since it may be a cell reference to a value or the value itself
|
||||
$lookup_value = self::flattenSingleValue($lookup_value);
|
||||
|
||||
// MATCH is not case sensitive
|
||||
$match_type = (is_null($match_type)) ? 1 : (int) self::flattenSingleValue($match_type);
|
||||
// MATCH is not case sensitive
|
||||
$lookup_value = strtolower($lookup_value);
|
||||
|
||||
/*
|
||||
echo "--------------------<br>looking for $lookup_value in <br>";
|
||||
print_r($lookup_array);
|
||||
echo "<br>";
|
||||
//return 1;
|
||||
/**/
|
||||
|
||||
// **
|
||||
// check inputs
|
||||
// **
|
||||
// lookup_value type has to be number, text, or logical values
|
||||
if (!is_numeric($lookup_value) && !is_string($lookup_value) && !is_bool($lookup_value)){
|
||||
// error: lookup_array should contain only number, text, or logical values
|
||||
//echo "error: lookup_array should contain only number, text, or logical values<br>";
|
||||
// lookup_value type has to be number, text, or logical values
|
||||
if ((!is_numeric($lookup_value)) && (!is_string($lookup_value)) && (!is_bool($lookup_value))) {
|
||||
return self::$_errorCodes['na'];
|
||||
}
|
||||
|
||||
// match_type is 0, 1 or -1
|
||||
if ($match_type!==0 && $match_type!==-1 && $match_type!==1){
|
||||
// error: wrong value for match_type
|
||||
//echo "error: wrong value for match_type<br>";
|
||||
// match_type is 0, 1 or -1
|
||||
if (($match_type !== 0) && ($match_type !== -1) && ($match_type !== 1)) {
|
||||
return self::$_errorCodes['na'];
|
||||
}
|
||||
|
||||
// lookup_array should not be empty
|
||||
if (sizeof($lookup_array)<=0){
|
||||
// error: empty range
|
||||
//echo "error: empty range ".sizeof($lookup_array)."<br>";
|
||||
// lookup_array should not be empty
|
||||
$lookupArraySize = count($lookup_array);
|
||||
if ($lookupArraySize <= 0) {
|
||||
return self::$_errorCodes['na'];
|
||||
}
|
||||
|
||||
// lookup_array should contain only number, text, or logical values
|
||||
for ($i=0;$i<sizeof($lookup_array);++$i){
|
||||
// check the type of the value
|
||||
if (!is_numeric($lookup_array[$i]) && !is_string($lookup_array[$i]) && !is_bool($lookup_array[$i])){
|
||||
// error: lookup_array should contain only number, text, or logical values
|
||||
//echo "error: lookup_array should contain only number, text, or logical values<br>";
|
||||
// lookup_array should contain only number, text, or logical values, or empty (null) cells
|
||||
foreach($lookup_array as $i => $lookupArrayValue) {
|
||||
// check the type of the value
|
||||
if ((!is_numeric($lookupArrayValue)) && (!is_string($lookupArrayValue)) &&
|
||||
(!is_bool($lookupArrayValue)) && (!is_null($lookupArrayValue))) {
|
||||
return self::$_errorCodes['na'];
|
||||
}
|
||||
// convert tpo lowercase
|
||||
if (is_string($lookup_array[$i]))
|
||||
$lookup_array[$i] = strtolower($lookup_array[$i]);
|
||||
// convert strings to lowercase for case-insensitive testing
|
||||
if (is_string($lookupArrayValue)) {
|
||||
$lookup_array[$i] = strtolower($lookupArrayValue);
|
||||
}
|
||||
if ((is_null($lookupArrayValue)) && (($match_type == 1) || ($match_type == -1))) {
|
||||
$lookup_array = array_slice($lookup_array,0,$i-1);
|
||||
}
|
||||
}
|
||||
|
||||
// if match_type is 1 or -1, the list has to be ordered
|
||||
if($match_type==1 || $match_type==-1){
|
||||
// **
|
||||
// iniitialization
|
||||
// store the last value
|
||||
$iLastValue=$lookup_array[0];
|
||||
// **
|
||||
// loop on the cells
|
||||
for ($i=0;$i<sizeof($lookup_array);++$i){
|
||||
// check ascending order
|
||||
if(($match_type==1 && $lookup_array[$i]<$iLastValue)
|
||||
// OR check descending order
|
||||
|| ($match_type==-1 && $lookup_array[$i]>$iLastValue)){
|
||||
// error: list is not ordered correctly
|
||||
//echo "error: list is not ordered correctly<br>";
|
||||
return self::$_errorCodes['na'];
|
||||
}
|
||||
}
|
||||
if ($match_type == 1) {
|
||||
asort($lookup_array);
|
||||
$keySet = array_keys($lookup_array);
|
||||
} elseif($match_type == -1) {
|
||||
arsort($lookup_array);
|
||||
$keySet = array_keys($lookup_array);
|
||||
}
|
||||
|
||||
// **
|
||||
// find the match
|
||||
// **
|
||||
// loop on the cells
|
||||
for ($i=0; $i < sizeof($lookup_array); ++$i){
|
||||
// if match_type is 0 <=> find the first value that is exactly equal to lookup_value
|
||||
if ($match_type==0 && $lookup_array[$i]==$lookup_value){
|
||||
// this is the exact match
|
||||
return $i+1;
|
||||
}
|
||||
// if match_type is -1 <=> find the smallest value that is greater than or equal to lookup_value
|
||||
if ($match_type==-1 && $lookup_array[$i] < $lookup_value){
|
||||
if ($i<1){
|
||||
// var_dump($lookup_array);
|
||||
// echo '<br />';
|
||||
foreach($lookup_array as $i => $lookupArrayValue) {
|
||||
if (($match_type == 0) && ($lookupArrayValue == $lookup_value)) {
|
||||
// exact match
|
||||
return ++$i;
|
||||
} elseif (($match_type == -1) && ($lookupArrayValue <= $lookup_value)) {
|
||||
// echo '$i = '.$i.' => ';
|
||||
// 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 ($i < 1){
|
||||
// 1st cell was allready smaller than the lookup_value
|
||||
break;
|
||||
}
|
||||
else
|
||||
} else {
|
||||
// the previous cell was the match
|
||||
return $i;
|
||||
}
|
||||
// if match_type is 1 <=> find the largest value that is less than or equal to lookup_value
|
||||
if ($match_type==1 && $lookup_array[$i] > $lookup_value){
|
||||
if ($i<1){
|
||||
return $keySet[$i-1]+1;
|
||||
}
|
||||
} elseif (($match_type == 1) && ($lookupArrayValue >= $lookup_value)) {
|
||||
// echo '$i = '.$i.' => ';
|
||||
// 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 ($i < 1){
|
||||
// 1st cell was allready bigger than the lookup_value
|
||||
break;
|
||||
}
|
||||
else
|
||||
} else {
|
||||
// the previous cell was the match
|
||||
return $i;
|
||||
return $keySet[$i-1]+1;
|
||||
}
|
||||
}
|
||||
}
|
||||
// unsuccessful in finding a match, return #N/A error value
|
||||
//echo "unsuccessful in finding a match<br>";
|
||||
|
||||
// unsuccessful in finding a match, return #N/A error value
|
||||
return self::$_errorCodes['na'];
|
||||
} // function MATCH()
|
||||
|
||||
@@ -11378,25 +11367,19 @@ class PHPExcel_Calculation_Functions {
|
||||
}
|
||||
$value = self::flattenSingleValue($value);
|
||||
|
||||
switch (gettype($value)) {
|
||||
case 'double' :
|
||||
case 'float' :
|
||||
case 'integer' :
|
||||
if ((is_float($value)) || (is_int($value))) {
|
||||
return 1;
|
||||
break;
|
||||
case 'boolean' :
|
||||
} elseif(is_bool($value)) {
|
||||
return 4;
|
||||
break;
|
||||
case 'array' :
|
||||
} elseif(is_array($value)) {
|
||||
return 64;
|
||||
break;
|
||||
case 'string' :
|
||||
// Errors
|
||||
if ((strlen($value) > 0) && ($value{0} == '#')) {
|
||||
return 16;
|
||||
}
|
||||
return 2;
|
||||
break;
|
||||
} elseif(is_string($value)) {
|
||||
// Errors
|
||||
if ((strlen($value) > 0) && ($value{0} == '#')) {
|
||||
return 16;
|
||||
}
|
||||
return 2;
|
||||
}
|
||||
return 0;
|
||||
} // function TYPE()
|
||||
|
@@ -22,7 +22,7 @@
|
||||
* @package PHPExcel_Cell
|
||||
* @copyright Copyright (c) 2006 - 2010 PHPExcel (http://www.codeplex.com/PHPExcel)
|
||||
* @license http://www.gnu.org/licenses/old-licenses/lgpl-2.1.txt LGPL
|
||||
* @version 1.7.3c, 2010-06-01
|
||||
* @version 1.7.4, 2010-08-26
|
||||
*/
|
||||
|
||||
|
||||
@@ -91,6 +91,13 @@ class PHPExcel_Cell
|
||||
*/
|
||||
private $_xfIndex;
|
||||
|
||||
/**
|
||||
* Attributes of the formula
|
||||
*
|
||||
*
|
||||
*/
|
||||
private $_formulaAttributes;
|
||||
|
||||
|
||||
/**
|
||||
* Send notification to the cache controller
|
||||
@@ -98,6 +105,7 @@ class PHPExcel_Cell
|
||||
**/
|
||||
public function notifyCacheController() {
|
||||
$this->_parent->getCellCacheController()->updateCacheData($this);
|
||||
return $this;
|
||||
}
|
||||
|
||||
public function detach() {
|
||||
@@ -112,11 +120,11 @@ class PHPExcel_Cell
|
||||
/**
|
||||
* Create a new Cell
|
||||
*
|
||||
* @param string $pColumn
|
||||
* @param int $pRow
|
||||
* @param mixed $pValue
|
||||
* @param string $pDataType
|
||||
* @param PHPExcel_Worksheet $pSheet
|
||||
* @param string $pColumn
|
||||
* @param int $pRow
|
||||
* @param mixed $pValue
|
||||
* @param string $pDataType
|
||||
* @param PHPExcel_Worksheet $pSheet
|
||||
* @throws Exception
|
||||
*/
|
||||
public function __construct($pColumn = 'A', $pRow = 1, $pValue = null, $pDataType = null, PHPExcel_Worksheet $pSheet = null)
|
||||
@@ -189,7 +197,7 @@ class PHPExcel_Cell
|
||||
*
|
||||
* This clears the cell formula.
|
||||
*
|
||||
* @param mixed $pValue Value
|
||||
* @param mixed $pValue Value
|
||||
* @return PHPExcel_Cell
|
||||
*/
|
||||
public function setValue($pValue = null)
|
||||
@@ -203,7 +211,7 @@ class PHPExcel_Cell
|
||||
/**
|
||||
* Set cell value (with explicit data type given)
|
||||
*
|
||||
* @param mixed $pValue Value
|
||||
* @param mixed $pValue Value
|
||||
* @param string $pDataType Explicit data type
|
||||
* @return PHPExcel_Cell
|
||||
* @throws Exception
|
||||
@@ -242,8 +250,7 @@ class PHPExcel_Cell
|
||||
// set the datatype
|
||||
$this->_dataType = $pDataType;
|
||||
|
||||
$this->notifyCacheController();
|
||||
return $this;
|
||||
return $this->notifyCacheController();
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -254,7 +261,7 @@ class PHPExcel_Cell
|
||||
public function getCalculatedValue($resetLog=true)
|
||||
{
|
||||
// echo 'Cell '.$this->getCoordinate().' value is a '.$this->_dataType.' with a value of '.$this->getValue().'<br />';
|
||||
if (!is_null($this->_calculatedValue) && $this->_dataType == PHPExcel_Cell_DataType::TYPE_FORMULA) {
|
||||
if ($this->_dataType == PHPExcel_Cell_DataType::TYPE_FORMULA) {
|
||||
try {
|
||||
// echo 'Cell value for '.$this->getCoordinate().' is a formula: Calculating value<br />';
|
||||
$result = PHPExcel_Calculation::getInstance()->calculateCellValue($this,$resetLog);
|
||||
@@ -262,28 +269,23 @@ class PHPExcel_Cell
|
||||
} catch ( Exception $ex ) {
|
||||
// echo 'Calculation Exception: '.$ex->getMessage().'<br />';
|
||||
$result = '#N/A';
|
||||
throw(new Exception($ex->getMessage()));
|
||||
throw(new Exception($this->getParent()->getTitle().'!'.$this->getCoordinate().' -> '.$ex->getMessage()));
|
||||
}
|
||||
|
||||
if ((is_string($result)) && ($result == '#Not Yet Implemented')) {
|
||||
if ($result === '#Not Yet Implemented') {
|
||||
// echo 'Returning fallback value of '.$this->_calculatedValue.' for cell '.$this->getCoordinate().'<br />';
|
||||
return $this->_calculatedValue; // Fallback if calculation engine does not support the formula.
|
||||
} else {
|
||||
// echo 'Returning calculated value of '.$result.' for cell '.$this->getCoordinate().'<br />';
|
||||
return $result;
|
||||
}
|
||||
// echo 'Returning calculated value of '.$result.' for cell '.$this->getCoordinate().'<br />';
|
||||
return $result;
|
||||
}
|
||||
|
||||
if (is_null($this->_value)) {
|
||||
// echo 'Cell '.$this->getCoordinate().' has no value, formula or otherwise<br />';
|
||||
return null;
|
||||
} else if ($this->_dataType != PHPExcel_Cell_DataType::TYPE_FORMULA) {
|
||||
// echo 'Cell value for '.$this->getCoordinate().' is not a formula: Returning data value of '.$this->_value.'<br />';
|
||||
return $this->_value;
|
||||
} else {
|
||||
// echo 'Cell value is a formula: Calculating value<br />';
|
||||
return PHPExcel_Calculation::getInstance()->calculateCellValue($this,$resetLog);
|
||||
}
|
||||
// echo 'Cell value for '.$this->getCoordinate().' is not a formula: Returning data value of '.$this->_value.'<br />';
|
||||
return $this->_value;
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -298,8 +300,7 @@ class PHPExcel_Cell
|
||||
$this->_calculatedValue = $pValue;
|
||||
}
|
||||
|
||||
$this->notifyCacheController();
|
||||
return $this;
|
||||
return $this->notifyCacheController();
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -332,8 +333,7 @@ class PHPExcel_Cell
|
||||
{
|
||||
$this->_dataType = $pDataType;
|
||||
|
||||
$this->notifyCacheController();
|
||||
return $this;
|
||||
return $this->notifyCacheController();
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -361,15 +361,14 @@ class PHPExcel_Cell
|
||||
throw new Exception('Cannot get data validation for cell that is not bound to a worksheet');
|
||||
}
|
||||
|
||||
$dataValidation = $this->_parent->getDataValidation($this->getCoordinate());
|
||||
return $dataValidation;
|
||||
return $this->_parent->getDataValidation($this->getCoordinate());
|
||||
}
|
||||
|
||||
/**
|
||||
* Set Data validation
|
||||
*
|
||||
* @param PHPExcel_Cell_DataValidation $pDataValidation
|
||||
* @throws Exception
|
||||
* @param PHPExcel_Cell_DataValidation $pDataValidation
|
||||
* @throws Exception
|
||||
* @return PHPExcel_Cell
|
||||
*/
|
||||
public function setDataValidation(PHPExcel_Cell_DataValidation $pDataValidation = null)
|
||||
@@ -380,45 +379,43 @@ class PHPExcel_Cell
|
||||
|
||||
$this->_parent->setDataValidation($this->getCoordinate(), $pDataValidation);
|
||||
|
||||
$this->notifyCacheController();
|
||||
return $this;
|
||||
return $this->notifyCacheController();
|
||||
}
|
||||
|
||||
/**
|
||||
* Has Hyperlink
|
||||
*
|
||||
* @return boolean
|
||||
*/
|
||||
public function hasHyperlink()
|
||||
{
|
||||
/**
|
||||
* Has Hyperlink
|
||||
*
|
||||
* @return boolean
|
||||
*/
|
||||
public function hasHyperlink()
|
||||
{
|
||||
if (!isset($this->_parent)) {
|
||||
throw new Exception('Cannot check for hyperlink when cell is not bound to a worksheet');
|
||||
}
|
||||
|
||||
return $this->_parent->hyperlinkExists($this->getCoordinate());
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Get Hyperlink
|
||||
*
|
||||
* @throws Exception
|
||||
* @return PHPExcel_Cell_Hyperlink
|
||||
*/
|
||||
public function getHyperlink()
|
||||
{
|
||||
/**
|
||||
* Get Hyperlink
|
||||
*
|
||||
* @throws Exception
|
||||
* @return PHPExcel_Cell_Hyperlink
|
||||
*/
|
||||
public function getHyperlink()
|
||||
{
|
||||
if (!isset($this->_parent)) {
|
||||
throw new Exception('Cannot get hyperlink for cell that is not bound to a worksheet');
|
||||
}
|
||||
|
||||
$hyperlink = $this->_parent->getHyperlink($this->getCoordinate());
|
||||
return $hyperlink;
|
||||
}
|
||||
return $this->_parent->getHyperlink($this->getCoordinate());
|
||||
}
|
||||
|
||||
/**
|
||||
* Set Hyperlink
|
||||
*
|
||||
* @param PHPExcel_Cell_Hyperlink $pHyperlink
|
||||
* @throws Exception
|
||||
* @param PHPExcel_Cell_Hyperlink $pHyperlink
|
||||
* @throws Exception
|
||||
* @return PHPExcel_Cell
|
||||
*/
|
||||
public function setHyperlink(PHPExcel_Cell_Hyperlink $pHyperlink = null)
|
||||
@@ -429,9 +426,8 @@ class PHPExcel_Cell
|
||||
|
||||
$this->_parent->setHyperlink($this->getCoordinate(), $pHyperlink);
|
||||
|
||||
$this->notifyCacheController();
|
||||
return $this;
|
||||
}
|
||||
return $this->notifyCacheController();
|
||||
}
|
||||
|
||||
/**
|
||||
* Get parent
|
||||
@@ -451,94 +447,63 @@ class PHPExcel_Cell
|
||||
public function rebindParent(PHPExcel_Worksheet $parent) {
|
||||
$this->_parent = $parent;
|
||||
|
||||
$this->notifyCacheController();
|
||||
return $this;
|
||||
return $this->notifyCacheController();
|
||||
}
|
||||
|
||||
/**
|
||||
* Is cell in a specific range?
|
||||
*
|
||||
* @param string $pRange Cell range (e.g. A1:A1)
|
||||
* @return boolean
|
||||
* @param string $pRange Cell range (e.g. A1:A1)
|
||||
* @return boolean
|
||||
*/
|
||||
public function isInRange($pRange = 'A1:A1')
|
||||
{
|
||||
// Uppercase coordinate
|
||||
$pRange = strtoupper($pRange);
|
||||
list($rangeStart,$rangeEnd) = PHPExcel_Cell::rangeBoundaries($pRange);
|
||||
|
||||
// Extract range
|
||||
$rangeA = '';
|
||||
$rangeB = '';
|
||||
if (strpos($pRange, ':') === false) {
|
||||
$rangeA = $pRange;
|
||||
$rangeB = $pRange;
|
||||
} else {
|
||||
list($rangeA, $rangeB) = explode(':', $pRange);
|
||||
}
|
||||
|
||||
// Calculate range outer borders
|
||||
$rangeStart = PHPExcel_Cell::coordinateFromString($rangeA);
|
||||
$rangeEnd = PHPExcel_Cell::coordinateFromString($rangeB);
|
||||
|
||||
// Translate column into index
|
||||
$rangeStart[0] = PHPExcel_Cell::columnIndexFromString($rangeStart[0]) - 1;
|
||||
$rangeEnd[0] = PHPExcel_Cell::columnIndexFromString($rangeEnd[0]) - 1;
|
||||
|
||||
// Translate properties
|
||||
$myColumn = PHPExcel_Cell::columnIndexFromString($this->getColumn()) - 1;
|
||||
$myRow = $this->getRow();
|
||||
// Translate properties
|
||||
$myColumn = PHPExcel_Cell::columnIndexFromString($this->getColumn()) - 1;
|
||||
$myRow = $this->getRow();
|
||||
|
||||
// Verify if cell is in range
|
||||
return (
|
||||
($rangeStart[0] <= $myColumn && $rangeEnd[0] >= $myColumn) &&
|
||||
($rangeStart[1] <= $myRow && $rangeEnd[1] >= $myRow)
|
||||
);
|
||||
return (($rangeStart[0] <= $myColumn) && ($rangeEnd[0] >= $myColumn) &&
|
||||
($rangeStart[1] <= $myRow) && ($rangeEnd[1] >= $myRow)
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* Coordinate from string
|
||||
*
|
||||
* @param string $pCoordinateString
|
||||
* @return array Array containing column and row (indexes 0 and 1)
|
||||
* @param string $pCoordinateString
|
||||
* @return array Array containing column and row (indexes 0 and 1)
|
||||
* @throws Exception
|
||||
*/
|
||||
public static function coordinateFromString($pCoordinateString = 'A1')
|
||||
{
|
||||
if (strpos($pCoordinateString,':') !== false) {
|
||||
throw new Exception('Cell coordinate string can not be a range of cells.');
|
||||
|
||||
} else if ($pCoordinateString == '') {
|
||||
throw new Exception('Cell coordinate can not be zero-length string.');
|
||||
|
||||
} else if (preg_match("/([$]?[A-Z]+)([$]?\d+)/", $pCoordinateString, $matches)) {
|
||||
list(, $column, $row) = $matches;
|
||||
return array($column, $row);
|
||||
|
||||
} else {
|
||||
throw new Exception('Invalid cell coordinate.');
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Make string coordinate absolute
|
||||
*
|
||||
* @param string $pCoordinateString
|
||||
* @return string Absolute coordinate
|
||||
* @param string $pCoordinateString
|
||||
* @return string Absolute coordinate
|
||||
* @throws Exception
|
||||
*/
|
||||
public static function absoluteCoordinate($pCoordinateString = 'A1')
|
||||
{
|
||||
if (strpos($pCoordinateString,':') === false && strpos($pCoordinateString,',') === false) {
|
||||
// Return value
|
||||
$returnValue = '';
|
||||
|
||||
// Create absolute coordinate
|
||||
list($column, $row) = PHPExcel_Cell::coordinateFromString($pCoordinateString);
|
||||
$returnValue = '$' . $column . '$' . $row;
|
||||
|
||||
// Return
|
||||
return $returnValue;
|
||||
return '$' . $column . '$' . $row;
|
||||
} else {
|
||||
throw new Exception("Coordinate string should not be a cell range.");
|
||||
}
|
||||
@@ -547,8 +512,8 @@ class PHPExcel_Cell
|
||||
/**
|
||||
* Split range into coordinate strings
|
||||
*
|
||||
* @param string $pRange
|
||||
* @return array Array containg one or more arrays containing one or two coordinate strings
|
||||
* @param string $pRange
|
||||
* @return array Array containg one or more arrays containing one or two coordinate strings
|
||||
*/
|
||||
public static function splitRange($pRange = 'A1:A1')
|
||||
{
|
||||
@@ -562,7 +527,7 @@ class PHPExcel_Cell
|
||||
/**
|
||||
* Build range from coordinate strings
|
||||
*
|
||||
* @param array $pRange Array containg one or more arrays containing one or two coordinate strings
|
||||
* @param array $pRange Array containg one or more arrays containing one or two coordinate strings
|
||||
* @return string String representation of $pRange
|
||||
* @throws Exception
|
||||
*/
|
||||
@@ -584,67 +549,76 @@ class PHPExcel_Cell
|
||||
}
|
||||
|
||||
/**
|
||||
* Calculate range dimension
|
||||
* Calculate range boundaries
|
||||
*
|
||||
* @param string $pRange Cell range (e.g. A1:A1)
|
||||
* @return array Range dimension (width, height)
|
||||
* @param string $pRange Cell range (e.g. A1:A1)
|
||||
* @return array Range coordinates (Start Cell, End Cell) where Start Cell and End Cell are arrays (Column Number, Row Number)
|
||||
*/
|
||||
public static function rangeDimension($pRange = 'A1:A1')
|
||||
public static function rangeBoundaries($pRange = 'A1:A1')
|
||||
{
|
||||
// Uppercase coordinate
|
||||
$pRange = strtoupper($pRange);
|
||||
|
||||
// Extract range
|
||||
$rangeA = '';
|
||||
$rangeB = '';
|
||||
if (strpos($pRange, ':') === false) {
|
||||
$rangeA = $pRange;
|
||||
$rangeB = $pRange;
|
||||
} else {
|
||||
list($rangeA, $rangeB) = explode(':', $pRange);
|
||||
}
|
||||
// Extract range
|
||||
if (strpos($pRange, ':') === false) {
|
||||
$rangeA = $rangeB = $pRange;
|
||||
} else {
|
||||
list($rangeA, $rangeB) = explode(':', $pRange);
|
||||
}
|
||||
|
||||
// Calculate range outer borders
|
||||
$rangeStart = PHPExcel_Cell::coordinateFromString($rangeA);
|
||||
$rangeEnd = PHPExcel_Cell::coordinateFromString($rangeB);
|
||||
// Calculate range outer borders
|
||||
$rangeStart = PHPExcel_Cell::coordinateFromString($rangeA);
|
||||
$rangeEnd = PHPExcel_Cell::coordinateFromString($rangeB);
|
||||
|
||||
// Translate column into index
|
||||
$rangeStart[0] = PHPExcel_Cell::columnIndexFromString($rangeStart[0]);
|
||||
$rangeEnd[0] = PHPExcel_Cell::columnIndexFromString($rangeEnd[0]);
|
||||
// Translate column into index
|
||||
$rangeStart[0] = PHPExcel_Cell::columnIndexFromString($rangeStart[0]);
|
||||
$rangeEnd[0] = PHPExcel_Cell::columnIndexFromString($rangeEnd[0]);
|
||||
|
||||
return array( ($rangeEnd[0] - $rangeStart[0] + 1), ($rangeEnd[1] - $rangeStart[1] + 1) );
|
||||
return array($rangeStart, $rangeEnd);
|
||||
}
|
||||
|
||||
/**
|
||||
* Calculate range dimension
|
||||
*
|
||||
* @param string $pRange Cell range (e.g. A1:A1)
|
||||
* @return array Range dimension (width, height)
|
||||
*/
|
||||
public static function rangeDimension($pRange = 'A1:A1')
|
||||
{
|
||||
// Calculate range outer borders
|
||||
list($rangeStart,$rangeEnd) = PHPExcel_Cell::rangeBoundaries($pRange);
|
||||
|
||||
return array( ($rangeEnd[0] - $rangeStart[0] + 1), ($rangeEnd[1] - $rangeStart[1] + 1) );
|
||||
}
|
||||
|
||||
/**
|
||||
* Calculate range boundaries
|
||||
*
|
||||
* @param string $pRange Cell range (e.g. A1:A1)
|
||||
* @return array Range boundaries (staring Column, starting Row, Final Column, Final Row)
|
||||
* @param string $pRange Cell range (e.g. A1:A1)
|
||||
* @return array Range boundaries (staring Column, starting Row, Final Column, Final Row)
|
||||
*/
|
||||
public static function getRangeBoundaries($pRange = 'A1:A1')
|
||||
{
|
||||
// Uppercase coordinate
|
||||
$pRange = strtoupper($pRange);
|
||||
|
||||
// Extract range
|
||||
$rangeA = '';
|
||||
$rangeB = '';
|
||||
if (strpos($pRange, ':') === false) {
|
||||
$rangeA = $pRange;
|
||||
$rangeB = $pRange;
|
||||
} else {
|
||||
list($rangeA, $rangeB) = explode(':', $pRange);
|
||||
}
|
||||
// Extract range
|
||||
if (strpos($pRange, ':') === false) {
|
||||
$rangeA = $pRange;
|
||||
$rangeB = $pRange;
|
||||
} else {
|
||||
list($rangeA, $rangeB) = explode(':', $pRange);
|
||||
}
|
||||
|
||||
return array( self::coordinateFromString($rangeA), self::coordinateFromString($rangeB));
|
||||
return array( self::coordinateFromString($rangeA), self::coordinateFromString($rangeB));
|
||||
}
|
||||
|
||||
/**
|
||||
* Column index from string
|
||||
*
|
||||
* @param string $pString
|
||||
* @return int Column index (base 1 !!!)
|
||||
* @throws Exception
|
||||
* @param string $pString
|
||||
* @return int Column index (base 1 !!!)
|
||||
* @throws Exception
|
||||
*/
|
||||
public static function columnIndexFromString($pString = 'A')
|
||||
{
|
||||
@@ -684,14 +658,14 @@ class PHPExcel_Cell
|
||||
if ($pColumnIndex < 26) {
|
||||
return chr(65 + $pColumnIndex);
|
||||
}
|
||||
return PHPExcel_Cell::stringFromColumnIndex((int)($pColumnIndex / 26) -1).chr(65 + $pColumnIndex%26) ;
|
||||
return PHPExcel_Cell::stringFromColumnIndex((int)($pColumnIndex / 26) -1).chr(65 + $pColumnIndex%26) ;
|
||||
}
|
||||
|
||||
/**
|
||||
* Extract all cell references in range
|
||||
*
|
||||
* @param string $pRange Range (e.g. A1 or A1:A10 or A1:A10 A100:A1000)
|
||||
* @return array Array containing single cell references
|
||||
* @param string $pRange Range (e.g. A1 or A1:A10 or A1:A10 A100:A1000)
|
||||
* @return array Array containing single cell references
|
||||
*/
|
||||
public static function extractAllCellReferencesInRange($pRange = 'A1') {
|
||||
// Returnvalue
|
||||
@@ -731,17 +705,17 @@ class PHPExcel_Cell
|
||||
$rangeStart = $rangeEnd = '';
|
||||
$startingCol = $startingRow = $endingCol = $endingRow = 0;
|
||||
|
||||
list($rangeStart, $rangeEnd) = $range[$i];
|
||||
list($rangeStart, $rangeEnd) = $range[$i];
|
||||
list($startingCol, $startingRow) = PHPExcel_Cell::coordinateFromString($rangeStart);
|
||||
list($endingCol, $endingRow) = PHPExcel_Cell::coordinateFromString($rangeEnd);
|
||||
list($endingCol, $endingRow) = PHPExcel_Cell::coordinateFromString($rangeEnd);
|
||||
|
||||
// Conversions...
|
||||
$startingCol = PHPExcel_Cell::columnIndexFromString($startingCol);
|
||||
$endingCol = PHPExcel_Cell::columnIndexFromString($endingCol);
|
||||
$startingCol = PHPExcel_Cell::columnIndexFromString($startingCol);
|
||||
$endingCol = PHPExcel_Cell::columnIndexFromString($endingCol);
|
||||
|
||||
// Current data
|
||||
$currentCol = --$startingCol;
|
||||
$currentRow = $startingRow;
|
||||
$currentCol = --$startingCol;
|
||||
$currentRow = $startingRow;
|
||||
|
||||
// Loop cells
|
||||
while ($currentCol < $endingCol) {
|
||||
@@ -763,9 +737,9 @@ class PHPExcel_Cell
|
||||
/**
|
||||
* Compare 2 cells
|
||||
*
|
||||
* @param PHPExcel_Cell $a Cell a
|
||||
* @param PHPExcel_Cell $a Cell b
|
||||
* @return int Result of comparison (always -1 or 1, never zero!)
|
||||
* @param PHPExcel_Cell $a Cell a
|
||||
* @param PHPExcel_Cell $a Cell b
|
||||
* @return int Result of comparison (always -1 or 1, never zero!)
|
||||
*/
|
||||
public static function compareCells(PHPExcel_Cell $a, PHPExcel_Cell $b)
|
||||
{
|
||||
@@ -813,7 +787,7 @@ class PHPExcel_Cell
|
||||
public function __clone() {
|
||||
$vars = get_object_vars($this);
|
||||
foreach ($vars as $key => $value) {
|
||||
if (is_object($value)) {
|
||||
if ((is_object($value)) && ($key != '_parent')) {
|
||||
$this->$key = clone $value;
|
||||
} else {
|
||||
$this->$key = $value;
|
||||
@@ -841,8 +815,20 @@ class PHPExcel_Cell
|
||||
{
|
||||
$this->_xfIndex = $pValue;
|
||||
|
||||
$this->notifyCacheController();
|
||||
return $this->notifyCacheController();
|
||||
}
|
||||
|
||||
|
||||
public function setFormulaAttributes($pAttributes)
|
||||
{
|
||||
$this->_formulaAttributes = $pAttributes;
|
||||
return $this;
|
||||
}
|
||||
|
||||
public function getFormulaAttributes()
|
||||
{
|
||||
return $this->_formulaAttributes;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
@@ -22,7 +22,7 @@
|
||||
* @package PHPExcel_Cell
|
||||
* @copyright Copyright (c) 2006 - 2010 PHPExcel (http://www.codeplex.com/PHPExcel)
|
||||
* @license http://www.gnu.org/licenses/old-licenses/lgpl-2.1.txt LGPL
|
||||
* @version 1.7.3c, 2010-06-01
|
||||
* @version 1.7.4, 2010-08-26
|
||||
*/
|
||||
|
||||
|
||||
|
@@ -22,7 +22,7 @@
|
||||
* @package PHPExcel_Cell
|
||||
* @copyright Copyright (c) 2006 - 2010 PHPExcel (http://www.codeplex.com/PHPExcel)
|
||||
* @license http://www.gnu.org/licenses/old-licenses/lgpl-2.1.txt LGPL
|
||||
* @version 1.7.3c, 2010-06-01
|
||||
* @version 1.7.4, 2010-08-26
|
||||
*/
|
||||
|
||||
|
||||
|
@@ -22,7 +22,7 @@
|
||||
* @package PHPExcel_Cell
|
||||
* @copyright Copyright (c) 2006 - 2010 PHPExcel (http://www.codeplex.com/PHPExcel)
|
||||
* @license http://www.gnu.org/licenses/old-licenses/lgpl-2.1.txt LGPL
|
||||
* @version 1.7.3c, 2010-06-01
|
||||
* @version 1.7.4, 2010-08-26
|
||||
*/
|
||||
|
||||
|
||||
|
@@ -22,7 +22,7 @@
|
||||
* @package PHPExcel_Cell
|
||||
* @copyright Copyright (c) 2006 - 2010 PHPExcel (http://www.codeplex.com/PHPExcel)
|
||||
* @license http://www.gnu.org/licenses/old-licenses/lgpl-2.1.txt LGPL
|
||||
* @version 1.7.3c, 2010-06-01
|
||||
* @version 1.7.4, 2010-08-26
|
||||
*/
|
||||
|
||||
|
||||
|
@@ -22,7 +22,7 @@
|
||||
* @package PHPExcel_Cell
|
||||
* @copyright Copyright (c) 2006 - 2010 PHPExcel (http://www.codeplex.com/PHPExcel)
|
||||
* @license http://www.gnu.org/licenses/old-licenses/lgpl-2.1.txt LGPL
|
||||
* @version 1.7.3c, 2010-06-01
|
||||
* @version 1.7.4, 2010-08-26
|
||||
*/
|
||||
|
||||
|
||||
|
@@ -22,7 +22,7 @@
|
||||
* @package PHPExcel_Cell
|
||||
* @copyright Copyright (c) 2006 - 2010 PHPExcel (http://www.codeplex.com/PHPExcel)
|
||||
* @license http://www.gnu.org/licenses/old-licenses/lgpl-2.1.txt LGPL
|
||||
* @version 1.7.3c, 2010-06-01
|
||||
* @version 1.7.4, 2010-08-26
|
||||
*/
|
||||
|
||||
|
||||
|
@@ -22,7 +22,7 @@
|
||||
* @package PHPExcel
|
||||
* @copyright Copyright (c) 2006 - 2010 PHPExcel (http://www.codeplex.com/PHPExcel)
|
||||
* @license http://www.gnu.org/licenses/old-licenses/lgpl-2.1.txt LGPL
|
||||
* @version 1.7.3c, 2010-06-01
|
||||
* @version 1.7.4, 2010-08-26
|
||||
*/
|
||||
|
||||
|
||||
|
@@ -8,12 +8,12 @@
|
||||
* 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
|
||||
@@ -22,7 +22,7 @@
|
||||
* @package PHPExcel
|
||||
* @copyright Copyright (c) 2006 - 2010 PHPExcel (http://www.codeplex.com/PHPExcel)
|
||||
* @license http://www.gnu.org/licenses/old-licenses/lgpl-2.1.txt LGPL
|
||||
* @version 1.7.3c, 2010-06-01
|
||||
* @version 1.7.4, 2010-08-26
|
||||
*/
|
||||
|
||||
|
||||
@@ -41,70 +41,70 @@ class PHPExcel_DocumentProperties
|
||||
* @var string
|
||||
*/
|
||||
private $_creator;
|
||||
|
||||
|
||||
/**
|
||||
* LastModifiedBy
|
||||
*
|
||||
* @var string
|
||||
*/
|
||||
private $_lastModifiedBy;
|
||||
|
||||
|
||||
/**
|
||||
* Created
|
||||
*
|
||||
* @var datetime
|
||||
*/
|
||||
private $_created;
|
||||
|
||||
|
||||
/**
|
||||
* Modified
|
||||
*
|
||||
* @var datetime
|
||||
*/
|
||||
private $_modified;
|
||||
|
||||
|
||||
/**
|
||||
* Title
|
||||
*
|
||||
* @var string
|
||||
*/
|
||||
private $_title;
|
||||
|
||||
|
||||
/**
|
||||
* Description
|
||||
*
|
||||
* @var string
|
||||
*/
|
||||
private $_description;
|
||||
|
||||
|
||||
/**
|
||||
* Subject
|
||||
*
|
||||
* @var string
|
||||
*/
|
||||
private $_subject;
|
||||
|
||||
|
||||
/**
|
||||
* Keywords
|
||||
*
|
||||
* @var string
|
||||
*/
|
||||
private $_keywords;
|
||||
|
||||
|
||||
/**
|
||||
* Category
|
||||
*
|
||||
* @var string
|
||||
*/
|
||||
private $_category;
|
||||
|
||||
|
||||
/**
|
||||
* Company
|
||||
*
|
||||
*
|
||||
* @var string
|
||||
*/
|
||||
private $_company;
|
||||
|
||||
|
||||
/**
|
||||
* Create a new PHPExcel_DocumentProperties
|
||||
*/
|
||||
@@ -120,9 +120,10 @@ class PHPExcel_DocumentProperties
|
||||
$this->_description = '';
|
||||
$this->_keywords = '';
|
||||
$this->_category = '';
|
||||
$this->_manager = '';
|
||||
$this->_company = 'Microsoft Corporation';
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Get Creator
|
||||
*
|
||||
@@ -131,7 +132,7 @@ class PHPExcel_DocumentProperties
|
||||
public function getCreator() {
|
||||
return $this->_creator;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Set Creator
|
||||
*
|
||||
@@ -142,7 +143,7 @@ class PHPExcel_DocumentProperties
|
||||
$this->_creator = $pValue;
|
||||
return $this;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Get Last Modified By
|
||||
*
|
||||
@@ -151,7 +152,7 @@ class PHPExcel_DocumentProperties
|
||||
public function getLastModifiedBy() {
|
||||
return $this->_lastModifiedBy;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Set Last Modified By
|
||||
*
|
||||
@@ -162,7 +163,7 @@ class PHPExcel_DocumentProperties
|
||||
$this->_lastModifiedBy = $pValue;
|
||||
return $this;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Get Created
|
||||
*
|
||||
@@ -171,7 +172,7 @@ class PHPExcel_DocumentProperties
|
||||
public function getCreated() {
|
||||
return $this->_created;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Set Created
|
||||
*
|
||||
@@ -185,7 +186,7 @@ class PHPExcel_DocumentProperties
|
||||
$this->_created = $pValue;
|
||||
return $this;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Get Modified
|
||||
*
|
||||
@@ -194,7 +195,7 @@ class PHPExcel_DocumentProperties
|
||||
public function getModified() {
|
||||
return $this->_modified;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Set Modified
|
||||
*
|
||||
@@ -208,7 +209,7 @@ class PHPExcel_DocumentProperties
|
||||
$this->_modified = $pValue;
|
||||
return $this;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Get Title
|
||||
*
|
||||
@@ -217,7 +218,7 @@ class PHPExcel_DocumentProperties
|
||||
public function getTitle() {
|
||||
return $this->_title;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Set Title
|
||||
*
|
||||
@@ -228,7 +229,7 @@ class PHPExcel_DocumentProperties
|
||||
$this->_title = $pValue;
|
||||
return $this;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Get Description
|
||||
*
|
||||
@@ -237,7 +238,7 @@ class PHPExcel_DocumentProperties
|
||||
public function getDescription() {
|
||||
return $this->_description;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Set Description
|
||||
*
|
||||
@@ -248,7 +249,7 @@ class PHPExcel_DocumentProperties
|
||||
$this->_description = $pValue;
|
||||
return $this;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Get Subject
|
||||
*
|
||||
@@ -257,7 +258,7 @@ class PHPExcel_DocumentProperties
|
||||
public function getSubject() {
|
||||
return $this->_subject;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Set Subject
|
||||
*
|
||||
@@ -268,7 +269,7 @@ class PHPExcel_DocumentProperties
|
||||
$this->_subject = $pValue;
|
||||
return $this;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Get Keywords
|
||||
*
|
||||
@@ -277,7 +278,7 @@ class PHPExcel_DocumentProperties
|
||||
public function getKeywords() {
|
||||
return $this->_keywords;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Set Keywords
|
||||
*
|
||||
@@ -288,7 +289,7 @@ class PHPExcel_DocumentProperties
|
||||
$this->_keywords = $pValue;
|
||||
return $this;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Get Category
|
||||
*
|
||||
@@ -297,7 +298,7 @@ class PHPExcel_DocumentProperties
|
||||
public function getCategory() {
|
||||
return $this->_category;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Set Category
|
||||
*
|
||||
@@ -308,7 +309,7 @@ class PHPExcel_DocumentProperties
|
||||
$this->_category = $pValue;
|
||||
return $this;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Get Company
|
||||
*
|
||||
@@ -317,18 +318,38 @@ class PHPExcel_DocumentProperties
|
||||
public function getCompany() {
|
||||
return $this->_company;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Set Company
|
||||
*
|
||||
* @param string $pValue
|
||||
* @return PHPPowerPoint_DocumentProperties
|
||||
* @return PHPExcel_DocumentProperties
|
||||
*/
|
||||
public function setCompany($pValue = '') {
|
||||
$this->_company = $pValue;
|
||||
return $this;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Get Manager
|
||||
*
|
||||
* @return string
|
||||
*/
|
||||
public function getManager() {
|
||||
return $this->_manager;
|
||||
}
|
||||
|
||||
/**
|
||||
* Set Manager
|
||||
*
|
||||
* @param string $pValue
|
||||
* @return PHPExcel_DocumentProperties
|
||||
*/
|
||||
public function setManager($pValue = '') {
|
||||
$this->_manager = $pValue;
|
||||
return $this;
|
||||
}
|
||||
|
||||
/**
|
||||
* Implement PHP __clone to create a deep clone, not just a shallow copy.
|
||||
*/
|
||||
|
@@ -22,7 +22,7 @@
|
||||
* @package PHPExcel
|
||||
* @copyright Copyright (c) 2006 - 2010 PHPExcel (http://www.codeplex.com/PHPExcel)
|
||||
* @license http://www.gnu.org/licenses/old-licenses/lgpl-2.1.txt LGPL
|
||||
* @version 1.7.3c, 2010-06-01
|
||||
* @version 1.7.4, 2010-08-26
|
||||
*/
|
||||
|
||||
|
||||
|
@@ -22,7 +22,7 @@
|
||||
* @package PHPExcel
|
||||
* @copyright Copyright (c) 2006 - 2010 PHPExcel (http://www.codeplex.com/PHPExcel)
|
||||
* @license http://www.gnu.org/licenses/old-licenses/lgpl-2.1.txt LGPL
|
||||
* @version 1.7.3c, 2010-06-01
|
||||
* @version 1.7.4, 2010-08-26
|
||||
*/
|
||||
|
||||
|
||||
|
@@ -20,7 +20,7 @@
|
||||
* @package PHPExcel
|
||||
* @copyright Copyright (c) 2006 - 2010 PHPExcel (http://www.codeplex.com/PHPExcel)
|
||||
* @license http://www.gnu.org/licenses/old-licenses/lgpl-2.1.txt LGPL
|
||||
* @version 1.7.3c, 2010-06-01
|
||||
* @version 1.7.4, 2010-08-26
|
||||
*/
|
||||
|
||||
|
||||
|
@@ -22,7 +22,7 @@
|
||||
* @package PHPExcel
|
||||
* @copyright Copyright (c) 2006 - 2010 PHPExcel (http://www.codeplex.com/PHPExcel)
|
||||
* @license http://www.gnu.org/licenses/old-licenses/lgpl-2.1.txt LGPL
|
||||
* @version 1.7.3c, 2010-06-01
|
||||
* @version 1.7.4, 2010-08-26
|
||||
*/
|
||||
|
||||
|
||||
|
@@ -22,7 +22,7 @@
|
||||
* @package PHPExcel
|
||||
* @copyright Copyright (c) 2006 - 2010 PHPExcel (http://www.codeplex.com/PHPExcel)
|
||||
* @license http://www.gnu.org/licenses/old-licenses/lgpl-2.1.txt LGPL
|
||||
* @version 1.7.3c, 2010-06-01
|
||||
* @version 1.7.4, 2010-08-26
|
||||
*/
|
||||
|
||||
|
||||
|
@@ -22,7 +22,7 @@
|
||||
* @package PHPExcel_Reader
|
||||
* @copyright Copyright (c) 2006 - 2010 PHPExcel (http://www.codeplex.com/PHPExcel)
|
||||
* @license http://www.gnu.org/licenses/old-licenses/lgpl-2.1.txt LGPL
|
||||
* @version 1.7.3c, 2010-06-01
|
||||
* @version 1.7.4, 2010-08-26
|
||||
*/
|
||||
|
||||
|
||||
|
@@ -22,7 +22,7 @@
|
||||
* @package PHPExcel_Reader
|
||||
* @copyright Copyright (c) 2006 - 2010 PHPExcel (http://www.codeplex.com/PHPExcel)
|
||||
* @license http://www.gnu.org/licenses/old-licenses/lgpl-2.1.txt LGPL
|
||||
* @version 1.7.3c, 2010-06-01
|
||||
* @version 1.7.4, 2010-08-26
|
||||
*/
|
||||
|
||||
|
||||
|
@@ -22,7 +22,7 @@
|
||||
* @package PHPExcel_Reader
|
||||
* @copyright Copyright (c) 2006 - 2010 PHPExcel (http://www.codeplex.com/PHPExcel)
|
||||
* @license http://www.gnu.org/licenses/old-licenses/lgpl-2.1.txt LGPL
|
||||
* @version 1.7.3c, 2010-06-01
|
||||
* @version 1.7.4, 2010-08-26
|
||||
*/
|
||||
|
||||
|
||||
@@ -557,6 +557,11 @@ class PHPExcel_Reader_Excel2003XML implements PHPExcel_Reader_IReader
|
||||
$cellDataFormula = '';
|
||||
if (isset($cell_ss['Formula'])) {
|
||||
$cellDataFormula = $cell_ss['Formula'];
|
||||
// added this as a check for array formulas
|
||||
if (isset($cell_ss['ArrayRange'])) {
|
||||
$cellDataCSEFormula = $cell_ss['ArrayRange'];
|
||||
// echo "found an array formula at ".$columnID.$rowID."<br />";
|
||||
}
|
||||
$hasCalculatedValue = true;
|
||||
}
|
||||
if (isset($cell->Data)) {
|
||||
|
@@ -22,7 +22,7 @@
|
||||
* @package PHPExcel_Reader
|
||||
* @copyright Copyright (c) 2006 - 2010 PHPExcel (http://www.codeplex.com/PHPExcel)
|
||||
* @license http://www.gnu.org/licenses/old-licenses/lgpl-2.1.txt LGPL
|
||||
* @version 1.7.3c, 2010-06-01
|
||||
* @version 1.7.4, 2010-08-26
|
||||
*/
|
||||
|
||||
|
||||
@@ -71,6 +71,9 @@ class PHPExcel_Reader_Excel2007 implements PHPExcel_Reader_IReader
|
||||
*/
|
||||
private $_readFilter = null;
|
||||
|
||||
|
||||
private $_referenceHelper = null;
|
||||
|
||||
/**
|
||||
* Read data only?
|
||||
*
|
||||
@@ -150,6 +153,7 @@ class PHPExcel_Reader_Excel2007 implements PHPExcel_Reader_IReader
|
||||
*/
|
||||
public function __construct() {
|
||||
$this->_readFilter = new PHPExcel_Reader_DefaultReadFilter();
|
||||
$this->_referenceHelper = PHPExcel_ReferenceHelper::getInstance();
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -245,12 +249,11 @@ class PHPExcel_Reader_Excel2007 implements PHPExcel_Reader_IReader
|
||||
$difference[0] = PHPExcel_Cell::columnIndexFromString($current[0]) - PHPExcel_Cell::columnIndexFromString($master[0]);
|
||||
$difference[1] = $current[1] - $master[1];
|
||||
|
||||
$helper = PHPExcel_ReferenceHelper::getInstance();
|
||||
$value = $helper->updateFormulaReferences( $sharedFormulas[$instance]['formula'],
|
||||
'A1',
|
||||
$difference[0],
|
||||
$difference[1]
|
||||
);
|
||||
$value = $this->_referenceHelper->updateFormulaReferences( $sharedFormulas[$instance]['formula'],
|
||||
'A1',
|
||||
$difference[0],
|
||||
$difference[1]
|
||||
);
|
||||
// echo 'Adjusted Formula is '.$value.'<br />';
|
||||
}
|
||||
}
|
||||
@@ -311,7 +314,7 @@ class PHPExcel_Reader_Excel2007 implements PHPExcel_Reader_IReader
|
||||
switch ($rel["Type"]) {
|
||||
case "http://schemas.openxmlformats.org/package/2006/relationships/metadata/core-properties":
|
||||
$xmlCore = simplexml_load_string($this->_getFromZipArchive($zip, "{$rel['Target']}"));
|
||||
if ($xmlCore) {
|
||||
if (is_object($xmlCore)) {
|
||||
$xmlCore->registerXPathNamespace("dc", "http://purl.org/dc/elements/1.1/");
|
||||
$xmlCore->registerXPathNamespace("dcterms", "http://purl.org/dc/terms/");
|
||||
$xmlCore->registerXPathNamespace("cp", "http://schemas.openxmlformats.org/package/2006/metadata/core-properties");
|
||||
@@ -328,6 +331,25 @@ class PHPExcel_Reader_Excel2007 implements PHPExcel_Reader_IReader
|
||||
}
|
||||
break;
|
||||
|
||||
case "http://schemas.openxmlformats.org/officeDocument/2006/relationships/extended-properties":
|
||||
$xmlCore = simplexml_load_string($this->_getFromZipArchive($zip, "{$rel['Target']}"));
|
||||
if (is_object($xmlCore)) {
|
||||
$docProps = $excel->getProperties();
|
||||
if (isset($xmlCore->Company))
|
||||
$docProps->setCompany((string) $xmlCore->Company);
|
||||
if (isset($xmlCore->Manager))
|
||||
$docProps->setManager((string) $xmlCore->Manager);
|
||||
}
|
||||
break;
|
||||
|
||||
case "http://schemas.openxmlformats.org/officeDocument/2006/relationships/custom-properties":
|
||||
$xmlCore = simplexml_load_string($this->_getFromZipArchive($zip, "{$rel['Target']}"));
|
||||
if (is_object($xmlCore)) {
|
||||
$xmlCore->registerXPathNamespace("vt", "http://schemas.openxmlformats.org/officeDocument/2006/docPropsVTypes");
|
||||
$docProps = $excel->getProperties();
|
||||
}
|
||||
break;
|
||||
|
||||
case "http://schemas.openxmlformats.org/officeDocument/2006/relationships/officeDocument":
|
||||
$dir = dirname($rel["Target"]);
|
||||
$relsWorkbook = simplexml_load_string($this->_getFromZipArchive($zip, "$dir/_rels/" . basename($rel["Target"]) . ".rels")); //~ http://schemas.openxmlformats.org/package/2006/relationships");
|
||||
@@ -692,6 +714,11 @@ class PHPExcel_Reader_Excel2007 implements PHPExcel_Reader_IReader
|
||||
} else {
|
||||
// Formula
|
||||
$this->_castToFormula($c,$r,$cellDataType,$value,$calculatedValue,$sharedFormulas,'_castToBool');
|
||||
if (isset($c->f['t'])) {
|
||||
$att = array();
|
||||
$att = $c->f;
|
||||
$docSheet->getCell($r)->setFormulaAttributes($att);
|
||||
}
|
||||
// echo '$calculatedValue = '.$calculatedValue.'<br />';
|
||||
}
|
||||
break;
|
||||
@@ -1276,10 +1303,14 @@ class PHPExcel_Reader_Excel2007 implements PHPExcel_Reader_IReader
|
||||
break;
|
||||
|
||||
case '_xlnm.Print_Area':
|
||||
$range = explode('!', $extractedRange);
|
||||
$extractedRange = isset($range[1]) ? $range[1] : $range[0];
|
||||
|
||||
$docSheet->getPageSetup()->setPrintArea($extractedRange);
|
||||
$rangeSets = explode(',', $extractedRange); // FIXME: what if sheetname contains comma?
|
||||
$newRangeSets = array();
|
||||
foreach($rangeSets as $rangeSet) {
|
||||
$range = explode('!', $rangeSet); // FIXME: what if sheetname contains exclamation mark?
|
||||
$rangeSet = isset($range[1]) ? $range[1] : $range[0];
|
||||
$newRangeSets[] = str_replace('$', '', $rangeSet);
|
||||
}
|
||||
$docSheet->getPageSetup()->setPrintArea(implode(',',$newRangeSets));
|
||||
break;
|
||||
|
||||
default:
|
||||
|
@@ -22,7 +22,7 @@
|
||||
* @package PHPExcel_Reader_Excel5
|
||||
* @copyright Copyright (c) 2006 - 2010 PHPExcel (http://www.codeplex.com/PHPExcel)
|
||||
* @license http://www.gnu.org/licenses/old-licenses/lgpl-2.1.txt LGPL
|
||||
* @version 1.7.3c, 2010-06-01
|
||||
* @version 1.7.4, 2010-08-26
|
||||
*/
|
||||
|
||||
// Original file header of ParseXL (used as the base for this class):
|
||||
@@ -834,7 +834,7 @@ class PHPExcel_Reader_Excel5 implements PHPExcel_Reader_IReader
|
||||
// Foo!$C$7:$J$66
|
||||
// Bar!$A$1:$IV$2
|
||||
|
||||
$explodes = explode('!', $range);
|
||||
$explodes = explode('!', $range); // FIXME: what if sheetname contains exclamation mark?
|
||||
$sheetName = $explodes[0];
|
||||
|
||||
if (count($explodes) == 2) {
|
||||
@@ -4202,22 +4202,22 @@ class PHPExcel_Reader_Excel5 implements PHPExcel_Reader_IReader
|
||||
// 1. BITMAPCOREHEADER
|
||||
// offset: 0; size: 4; bcSize, Specifies the number of bytes required by the structure
|
||||
$bcSize = $this->_GetInt4d($iData, 0);
|
||||
var_dump($bcSize);
|
||||
// var_dump($bcSize);
|
||||
|
||||
// offset: 4; size: 2; bcWidth, specifies the width of the bitmap, in pixels
|
||||
$bcWidth = $this->_GetInt2d($iData, 4);
|
||||
var_dump($bcWidth);
|
||||
// var_dump($bcWidth);
|
||||
|
||||
// offset: 6; size: 2; bcHeight, specifies the height of the bitmap, in pixels.
|
||||
$bcHeight = $this->_GetInt2d($iData, 6);
|
||||
var_dump($bcHeight);
|
||||
// var_dump($bcHeight);
|
||||
$ih = imagecreatetruecolor($bcWidth, $bcHeight);
|
||||
|
||||
// offset: 8; size: 2; bcPlanes, specifies the number of planes for the target device. This value must be 1
|
||||
|
||||
// offset: 10; size: 2; bcBitCount specifies the number of bits-per-pixel. This value must be 1, 4, 8, or 24
|
||||
$bcBitCount = $this->_GetInt2d($iData, 10);
|
||||
var_dump($bcBitCount);
|
||||
// var_dump($bcBitCount);
|
||||
|
||||
$rgbString = substr($iData, 12);
|
||||
$rgbTriples = array();
|
||||
@@ -4602,24 +4602,24 @@ class PHPExcel_Reader_Excel5 implements PHPExcel_Reader_IReader
|
||||
case 0x12: $name = 'tUplus'; $size = 1; $data = '+'; break;
|
||||
case 0x13: $name = 'tUminus'; $size = 1; $data = '-'; break;
|
||||
case 0x14: $name = 'tPercent'; $size = 1; $data = '%'; break;
|
||||
case 0x15: // parenthesis
|
||||
case 0x15: // parenthesis
|
||||
$name = 'tParen';
|
||||
$size = 1;
|
||||
$data = null;
|
||||
break;
|
||||
case 0x16: // missing argument
|
||||
case 0x16: // missing argument
|
||||
$name = 'tMissArg';
|
||||
$size = 1;
|
||||
$data = '';
|
||||
break;
|
||||
case 0x17: // string
|
||||
case 0x17: // string
|
||||
$name = 'tStr';
|
||||
// offset: 1; size: var; Unicode string, 8-bit string length
|
||||
$string = $this->_readUnicodeStringShort(substr($formulaData, 1));
|
||||
$size = 1 + $string['size'];
|
||||
$data = $this->_UTF8toExcelDoubleQuoted($string['value']);
|
||||
break;
|
||||
case 0x19: // Special attribute
|
||||
case 0x19: // Special attribute
|
||||
// offset: 1; size: 1; attribute type flags:
|
||||
switch (ord($formulaData[1])) {
|
||||
case 0x01:
|
||||
@@ -4689,39 +4689,42 @@ class PHPExcel_Reader_Excel5 implements PHPExcel_Reader_IReader
|
||||
break;
|
||||
}
|
||||
break;
|
||||
case 0x1C: // error code
|
||||
case 0x1C: // error code
|
||||
// offset: 1; size: 1; error code
|
||||
$name = 'tErr';
|
||||
$size = 2;
|
||||
$data = $this->_mapErrorCode(ord($formulaData[1]));
|
||||
break;
|
||||
case 0x1D: // boolean
|
||||
case 0x1D: // boolean
|
||||
// offset: 1; size: 1; 0 = false, 1 = true;
|
||||
$name = 'tBool';
|
||||
$size = 2;
|
||||
$data = ord($formulaData[1]) ? 'TRUE' : 'FALSE';
|
||||
break;
|
||||
case 0x1E: // integer
|
||||
case 0x1E: // integer
|
||||
// offset: 1; size: 2; unsigned 16-bit integer
|
||||
$name = 'tInt';
|
||||
$size = 3;
|
||||
$data = $this->_GetInt2d($formulaData, 1);
|
||||
break;
|
||||
case 0x1F: // number
|
||||
case 0x1F: // number
|
||||
// offset: 1; size: 8;
|
||||
$name = 'tNum';
|
||||
$size = 9;
|
||||
$data = $this->_extractNumber(substr($formulaData, 1));
|
||||
$data = str_replace(',', '.', (string)$data); // in case non-English locale
|
||||
break;
|
||||
case 0x40: // array constant
|
||||
case 0x60: // array constant
|
||||
case 0x20: // array constant
|
||||
case 0x40:
|
||||
case 0x60:
|
||||
// offset: 1; size: 7; not used
|
||||
$name = 'tArray';
|
||||
$size = 8;
|
||||
$data = null;
|
||||
break;
|
||||
case 0x41: // function with fixed number of arguments
|
||||
case 0x21: // function with fixed number of arguments
|
||||
case 0x41:
|
||||
case 0x61:
|
||||
$name = 'tFunc';
|
||||
$size = 3;
|
||||
// offset: 1; size: 2; index to built-in sheet function
|
||||
@@ -4891,9 +4894,9 @@ class PHPExcel_Reader_Excel5 implements PHPExcel_Reader_IReader
|
||||
}
|
||||
$data = array('function' => $function, 'args' => $args);
|
||||
break;
|
||||
case 0x22: // function with variable number of arguments
|
||||
case 0x42: // function with variable number of arguments
|
||||
case 0x62: // function with variable number of arguments
|
||||
case 0x22: // function with variable number of arguments
|
||||
case 0x42:
|
||||
case 0x62:
|
||||
$name = 'tFuncV';
|
||||
$size = 4;
|
||||
// offset: 1; size: 1; number of arguments
|
||||
@@ -4995,8 +4998,9 @@ class PHPExcel_Reader_Excel5 implements PHPExcel_Reader_IReader
|
||||
}
|
||||
$data = array('function' => $function, 'args' => $args);
|
||||
break;
|
||||
case 0x23: // index to defined name
|
||||
case 0x23: // index to defined name
|
||||
case 0x43:
|
||||
case 0x63:
|
||||
$name = 'tName';
|
||||
$size = 5;
|
||||
// offset: 1; size: 2; one-based index to definedname record
|
||||
@@ -5004,22 +5008,23 @@ class PHPExcel_Reader_Excel5 implements PHPExcel_Reader_IReader
|
||||
// offset: 2; size: 2; not used
|
||||
$data = $this->_definedname[$definedNameIndex]['name'];
|
||||
break;
|
||||
case 0x24: // single cell reference e.g. A5
|
||||
case 0x24: // single cell reference e.g. A5
|
||||
case 0x44:
|
||||
case 0x64:
|
||||
$name = 'tRef';
|
||||
$size = 5;
|
||||
$data = $this->_readBIFF8CellAddress(substr($formulaData, 1, 4));
|
||||
break;
|
||||
case 0x25: // cell range reference to cells in the same sheet
|
||||
case 0x25: // cell range reference to cells in the same sheet (2d)
|
||||
case 0x45:
|
||||
case 0x65:
|
||||
$name = 'tArea';
|
||||
$size = 9;
|
||||
$data = $this->_readBIFF8CellRangeAddress(substr($formulaData, 1, 8));
|
||||
break;
|
||||
case 0x26:
|
||||
case 0x26: // Constant reference sub-expression
|
||||
case 0x46:
|
||||
case 0x66:
|
||||
$name = 'tMemArea';
|
||||
// offset: 1; size: 4; not used
|
||||
// offset: 5; size: 2; size of the following subexpression
|
||||
@@ -5027,7 +5032,9 @@ class PHPExcel_Reader_Excel5 implements PHPExcel_Reader_IReader
|
||||
$size = 7 + $subSize;
|
||||
$data = $this->_getFormulaFromData(substr($formulaData, 7, $subSize));
|
||||
break;
|
||||
case 0x27: // Deleted constant reference sub-expression
|
||||
case 0x47:
|
||||
case 0x67:
|
||||
$name = 'tMemErr';
|
||||
// offset: 1; size: 4; not used
|
||||
// offset: 5; size: 2; size of the following subexpression
|
||||
@@ -5035,16 +5042,17 @@ class PHPExcel_Reader_Excel5 implements PHPExcel_Reader_IReader
|
||||
$size = 7 + $subSize;
|
||||
$data = $this->_getFormulaFromData(substr($formulaData, 7, $subSize));
|
||||
break;
|
||||
case 0x29:
|
||||
case 0x29: // Variable reference sub-expression
|
||||
case 0x49:
|
||||
case 0x69:
|
||||
$name = 'tMemFunc';
|
||||
// offset: 1; size: 2; size of the following subexpression
|
||||
// offset: 1; size: 2; size of the following sub-expression
|
||||
$subSize = $this->_GetInt2d($formulaData, 1);
|
||||
$size = 3 + $subSize;
|
||||
$data = $this->_getFormulaFromData(substr($formulaData, 3, $subSize));
|
||||
break;
|
||||
|
||||
case 0x2C: // Relative reference, used in shared formulas and some other places
|
||||
case 0x2C: // Relative 2d cell reference reference, used in shared formulas and some other places
|
||||
case 0x4C:
|
||||
case 0x6C:
|
||||
$name = 'tRefN';
|
||||
@@ -5052,7 +5060,7 @@ class PHPExcel_Reader_Excel5 implements PHPExcel_Reader_IReader
|
||||
$data = $this->_readBIFF8CellAddressB(substr($formulaData, 1, 4), $baseCell);
|
||||
break;
|
||||
|
||||
case 0x2D:
|
||||
case 0x2D: // Relative 2d range reference
|
||||
case 0x4D:
|
||||
case 0x6D:
|
||||
$name = 'tAreaN';
|
||||
@@ -5060,7 +5068,7 @@ class PHPExcel_Reader_Excel5 implements PHPExcel_Reader_IReader
|
||||
$data = $this->_readBIFF8CellRangeAddressB(substr($formulaData, 1, 8), $baseCell);
|
||||
break;
|
||||
|
||||
case 0x39:
|
||||
case 0x39: // External name
|
||||
case 0x59:
|
||||
case 0x79:
|
||||
$name = 'tNameX';
|
||||
@@ -5073,8 +5081,9 @@ class PHPExcel_Reader_Excel5 implements PHPExcel_Reader_IReader
|
||||
// offset: 5; size: 2; not used
|
||||
break;
|
||||
|
||||
case 0x3A: // 3d reference to cell
|
||||
case 0x3A: // 3d reference to cell
|
||||
case 0x5A:
|
||||
case 0x7A:
|
||||
$name = 'tRef3d';
|
||||
$size = 7;
|
||||
|
||||
@@ -5085,15 +5094,15 @@ class PHPExcel_Reader_Excel5 implements PHPExcel_Reader_IReader
|
||||
$cellAddress = $this->_readBIFF8CellAddress(substr($formulaData, 3, 4));
|
||||
|
||||
$data = "$sheetRange!$cellAddress";
|
||||
|
||||
} catch (Exception $e) {
|
||||
// deleted sheet reference
|
||||
$data = '#REF!';
|
||||
}
|
||||
|
||||
break;
|
||||
case 0x3B: // 3d reference to cell range
|
||||
case 0x3B: // 3d reference to cell range
|
||||
case 0x5B:
|
||||
case 0x7B:
|
||||
$name = 'tArea3d';
|
||||
$size = 11;
|
||||
|
||||
@@ -5104,15 +5113,13 @@ class PHPExcel_Reader_Excel5 implements PHPExcel_Reader_IReader
|
||||
$cellRangeAddress = $this->_readBIFF8CellRangeAddress(substr($formulaData, 3, 8));
|
||||
|
||||
$data = "$sheetRange!$cellRangeAddress";
|
||||
|
||||
} catch (Exception $e) {
|
||||
// deleted sheet reference
|
||||
$data = '#REF!';
|
||||
|
||||
}
|
||||
|
||||
break;
|
||||
// case 0x39: // don't know how to deal with
|
||||
// Unknown cases // don't know how to deal with
|
||||
default:
|
||||
throw new Exception('Unrecognized token ' . sprintf('%02X', $id) . ' in formula');
|
||||
break;
|
||||
|
@@ -22,7 +22,7 @@
|
||||
* @package PHPExcel_Reader_Excel5
|
||||
* @copyright Copyright (c) 2006 - 2010 PHPExcel (http://www.codeplex.com/PHPExcel)
|
||||
* @license http://www.gnu.org/licenses/old-licenses/lgpl-2.1.txt LGPL
|
||||
* @version 1.7.3c, 2010-06-01
|
||||
* @version 1.7.4, 2010-08-26
|
||||
*/
|
||||
|
||||
/**
|
||||
|
@@ -22,7 +22,7 @@
|
||||
* @package PHPExcel_Reader
|
||||
* @copyright Copyright (c) 2006 - 2010 PHPExcel (http://www.codeplex.com/PHPExcel)
|
||||
* @license http://www.gnu.org/licenses/old-licenses/lgpl-2.1.txt LGPL
|
||||
* @version 1.7.3c, 2010-06-01
|
||||
* @version 1.7.4, 2010-08-26
|
||||
*/
|
||||
|
||||
|
||||
|
@@ -22,7 +22,7 @@
|
||||
* @package PHPExcel_Reader
|
||||
* @copyright Copyright (c) 2006 - 2010 PHPExcel (http://www.codeplex.com/PHPExcel)
|
||||
* @license http://www.gnu.org/licenses/old-licenses/lgpl-2.1.txt LGPL
|
||||
* @version 1.7.3c, 2010-06-01
|
||||
* @version 1.7.4, 2010-08-26
|
||||
*/
|
||||
|
||||
|
||||
|
@@ -22,7 +22,7 @@
|
||||
* @package PHPExcel_Reader
|
||||
* @copyright Copyright (c) 2006 - 2010 PHPExcel (http://www.codeplex.com/PHPExcel)
|
||||
* @license http://www.gnu.org/licenses/old-licenses/lgpl-2.1.txt LGPL
|
||||
* @version 1.7.3c, 2010-06-01
|
||||
* @version 1.7.4, 2010-08-26
|
||||
*/
|
||||
|
||||
|
||||
@@ -242,6 +242,9 @@ class PHPExcel_Reader_OOCalc implements PHPExcel_Reader_IReader
|
||||
throw new Exception("Could not open " . $pFilename . " for reading! File does not exist.");
|
||||
}
|
||||
|
||||
$timezoneObj = new DateTimeZone('Europe/London');
|
||||
$GMT = new DateTimeZone('UTC');
|
||||
|
||||
$zip = new ZipArchive;
|
||||
if ($zip->open($pFilename) === true) {
|
||||
// echo '<h1>Meta Information</h1>';
|
||||
@@ -338,6 +341,11 @@ class PHPExcel_Reader_OOCalc implements PHPExcel_Reader_IReader
|
||||
foreach($worksheetData as $key => $rowData) {
|
||||
// echo '<b>'.$key.'</b><br />';
|
||||
switch ($key) {
|
||||
case 'table-header-rows':
|
||||
foreach ($rowData as $key=>$cellData) {
|
||||
$rowData = $cellData;
|
||||
break;
|
||||
}
|
||||
case 'table-row' :
|
||||
$columnID = 'A';
|
||||
foreach($rowData as $key => $cellData) {
|
||||
@@ -387,7 +395,8 @@ class PHPExcel_Reader_OOCalc implements PHPExcel_Reader_IReader
|
||||
break;
|
||||
case 'date' :
|
||||
$type = PHPExcel_Cell_DataType::TYPE_NUMERIC;
|
||||
$dateObj = date_create($cellDataOfficeAttributes['date-value']);
|
||||
$dateObj = new DateTime($cellDataOfficeAttributes['date-value'], $GMT);
|
||||
$dateObj->setTimeZone($timezoneObj);
|
||||
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);
|
||||
if ($dataValue != floor($dataValue)) {
|
||||
@@ -418,7 +427,7 @@ class PHPExcel_Reader_OOCalc implements PHPExcel_Reader_IReader
|
||||
if (($key % 2) == 0) {
|
||||
$value = preg_replace('/\[\.(.*):\.(.*)\]/Ui','$1:$2',$value);
|
||||
$value = preg_replace('/\[\.(.*)\]/Ui','$1',$value);
|
||||
$value = PHPExcel_Calculation::_translateSeparator(';',',',$value);
|
||||
$value = PHPExcel_Calculation::_translateSeparator(';',',',$value,$inBraces);
|
||||
}
|
||||
}
|
||||
unset($value);
|
||||
|
@@ -22,7 +22,7 @@
|
||||
* @package PHPExcel_Reader
|
||||
* @copyright Copyright (c) 2006 - 2010 PHPExcel (http://www.codeplex.com/PHPExcel)
|
||||
* @license http://www.gnu.org/licenses/old-licenses/lgpl-2.1.txt LGPL
|
||||
* @version 1.7.3c, 2010-06-01
|
||||
* @version 1.7.4, 2010-08-26
|
||||
*/
|
||||
|
||||
|
||||
|
@@ -22,7 +22,7 @@
|
||||
* @package PHPExcel_Reader
|
||||
* @copyright Copyright (c) 2006 - 2010 PHPExcel (http://www.codeplex.com/PHPExcel)
|
||||
* @license http://www.gnu.org/licenses/old-licenses/lgpl-2.1.txt LGPL
|
||||
* @version 1.7.3c, 2010-06-01
|
||||
* @version 1.7.4, 2010-08-26
|
||||
*/
|
||||
|
||||
|
||||
|
@@ -22,7 +22,7 @@
|
||||
* @package PHPExcel
|
||||
* @copyright Copyright (c) 2006 - 2010 PHPExcel (http://www.codeplex.com/PHPExcel)
|
||||
* @license http://www.gnu.org/licenses/old-licenses/lgpl-2.1.txt LGPL
|
||||
* @version 1.7.3c, 2010-06-01
|
||||
* @version 1.7.4, 2010-08-26
|
||||
*/
|
||||
|
||||
|
||||
@@ -35,6 +35,13 @@
|
||||
*/
|
||||
class PHPExcel_ReferenceHelper
|
||||
{
|
||||
/** Constants */
|
||||
/** Regular Expressions */
|
||||
const REFHELPER_REGEXP_CELLREF = '((\w*|\'[^!]*\')!)?(?<![:a-z\$])(\$?[a-z]{1,3}\$?\d+)(?=[^:!\d\'])';
|
||||
const REFHELPER_REGEXP_CELLRANGE = '((\w*|\'[^!]*\')!)?(\$?[a-z]{1,3}\$?\d+):(\$?[a-z]{1,3}\$?\d+)';
|
||||
const REFHELPER_REGEXP_ROWRANGE = '((\w*|\'[^!]*\')!)?(\$?\d+):(\$?\d+)';
|
||||
const REFHELPER_REGEXP_COLRANGE = '((\w*|\'[^!]*\')!)?(\$?[a-z]{1,3}):(\$?[a-z]{1,3})';
|
||||
|
||||
/**
|
||||
* Instance of this class
|
||||
*
|
||||
@@ -119,10 +126,8 @@ class PHPExcel_ReferenceHelper
|
||||
$newCoordinates = PHPExcel_Cell::stringFromColumnIndex( PHPExcel_Cell::columnIndexFromString($cell->getColumn()) - 1 + $pNumCols ) . ($cell->getRow() + $pNumRows);
|
||||
|
||||
// Should the cell be updated? Move value and cellXf index from one cell to another.
|
||||
if (
|
||||
(PHPExcel_Cell::columnIndexFromString( $cell->getColumn() ) >= PHPExcel_Cell::columnIndexFromString($beforeColumn)) &&
|
||||
($cell->getRow() >= $beforeRow)
|
||||
) {
|
||||
if ((PHPExcel_Cell::columnIndexFromString( $cell->getColumn() ) >= PHPExcel_Cell::columnIndexFromString($beforeColumn)) &&
|
||||
($cell->getRow() >= $beforeRow)) {
|
||||
|
||||
// Update cell styles
|
||||
$pSheet->getCell($newCoordinates)->setXfIndex($cell->getXfIndex());
|
||||
@@ -132,7 +137,7 @@ class PHPExcel_ReferenceHelper
|
||||
if ($cell->getDataType() == PHPExcel_Cell_DataType::TYPE_FORMULA) {
|
||||
// Formula should be adjusted
|
||||
$pSheet->getCell($newCoordinates)
|
||||
->setValue($this->updateFormulaReferences($cell->getValue(), $pBefore, $pNumCols, $pNumRows));
|
||||
->setValue($this->updateFormulaReferences($cell->getValue(), $pBefore, $pNumCols, $pNumRows, $pSheet->getTitle()));
|
||||
} else {
|
||||
// Formula should not be adjusted
|
||||
$pSheet->getCell($newCoordinates)->setValue($cell->getValue());
|
||||
@@ -340,43 +345,121 @@ class PHPExcel_ReferenceHelper
|
||||
* @return string Updated formula
|
||||
* @throws Exception
|
||||
*/
|
||||
public function updateFormulaReferences($pFormula = '', $pBefore = 'A1', $pNumCols = 0, $pNumRows = 0) {
|
||||
// Parse formula into a tree of tokens
|
||||
$tokenisedFormula = PHPExcel_Calculation::getInstance()->parseFormula($pFormula);
|
||||
|
||||
$newCellTokens = $cellTokens = array();
|
||||
$adjustCount = 0;
|
||||
// Build the translation table of cell tokens
|
||||
foreach($tokenisedFormula as $token) {
|
||||
$token = $token['value'];
|
||||
if (preg_match('/^'.PHPExcel_Calculation::CALCULATION_REGEXP_CELLREF.'$/i', $token, $matches)) {
|
||||
list($column,$row) = PHPExcel_Cell::coordinateFromString($token);
|
||||
// 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($column) + 100000;
|
||||
$row += 10000000;
|
||||
$cellIndex = $column.$row;
|
||||
if (!isset($cellTokens[$cellIndex])) {
|
||||
$newReference = $this->updateCellReference($token, $pBefore, $pNumCols, $pNumRows);
|
||||
if ($newReference !== $token) {
|
||||
$newCellTokens[$cellIndex] = preg_quote($newReference);
|
||||
$cellTokens[$cellIndex] = '/(?<![A-Z])'.preg_quote($token).'(?!\d)/i';
|
||||
++$adjustCount;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
if ($adjustCount == 0) {
|
||||
return $pFormula;
|
||||
}
|
||||
krsort($cellTokens);
|
||||
krsort($newCellTokens);
|
||||
|
||||
public function updateFormulaReferences($pFormula = '', $pBefore = 'A1', $pNumCols = 0, $pNumRows = 0, $sheetName = '') {
|
||||
// Update cell references in the formula
|
||||
$formulaBlocks = explode('"',$pFormula);
|
||||
foreach($formulaBlocks as $i => &$formulaBlock) {
|
||||
// Only count/replace in alternate array entries
|
||||
// Ignore blocks that were enclosed in quotes (even entries in the $formulaBlocks array after the explode)
|
||||
if (($i % 2) == 0) {
|
||||
$formulaBlock = preg_replace($cellTokens,$newCellTokens,$formulaBlock);
|
||||
$adjustCount = 0;
|
||||
$newCellTokens = $cellTokens = array();
|
||||
// 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);
|
||||
if ($matchCount > 0) {
|
||||
foreach($matches as $match) {
|
||||
$fromString = ($match[2] > '') ? $match[2].'!' : '';
|
||||
$fromString .= $match[3].':'.$match[4];
|
||||
$modified3 = substr($this->updateCellReference('$A'.$match[3],$pBefore,$pNumCols,$pNumRows),2);
|
||||
$modified4 = substr($this->updateCellReference('$A'.$match[4],$pBefore,$pNumCols,$pNumRows),2);
|
||||
|
||||
if ($match[3].':'.$match[4] !== $modified3.':'.$modified4) {
|
||||
if (($match[2] == '') || (trim($match[2],"'") == $sheetName)) {
|
||||
$toString = ($match[2] > '') ? $match[2].'!' : '';
|
||||
$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
|
||||
$column = 100000;
|
||||
$row = 10000000+trim($match[3],'$');
|
||||
$cellIndex = $column.$row;
|
||||
|
||||
$newCellTokens[$cellIndex] = preg_quote($toString);
|
||||
$cellTokens[$cellIndex] = '/(?<!\d)'.preg_quote($fromString).'(?!\d)/i';
|
||||
++$adjustCount;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
// 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);
|
||||
if ($matchCount > 0) {
|
||||
foreach($matches as $match) {
|
||||
$fromString = ($match[2] > '') ? $match[2].'!' : '';
|
||||
$fromString .= $match[3].':'.$match[4];
|
||||
$modified3 = substr($this->updateCellReference($match[3].'$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[2] == '') || (trim($match[2],"'") == $sheetName)) {
|
||||
$toString = ($match[2] > '') ? $match[2].'!' : '';
|
||||
$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
|
||||
$column = PHPExcel_Cell::columnIndexFromString(trim($match[3],'$')) + 100000;
|
||||
$row = 10000000;
|
||||
$cellIndex = $column.$row;
|
||||
|
||||
$newCellTokens[$cellIndex] = preg_quote($toString);
|
||||
$cellTokens[$cellIndex] = '/(?<![A-Z])'.preg_quote($fromString).'(?![A-Z])/i';
|
||||
++$adjustCount;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
// 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);
|
||||
if ($matchCount > 0) {
|
||||
foreach($matches as $match) {
|
||||
$fromString = ($match[2] > '') ? $match[2].'!' : '';
|
||||
$fromString .= $match[3].':'.$match[4];
|
||||
$modified3 = $this->updateCellReference($match[3],$pBefore,$pNumCols,$pNumRows);
|
||||
$modified4 = $this->updateCellReference($match[4],$pBefore,$pNumCols,$pNumRows);
|
||||
|
||||
if ($match[3].$match[4] !== $modified3.$modified4) {
|
||||
if (($match[2] == '') || (trim($match[2],"'") == $sheetName)) {
|
||||
$toString = ($match[2] > '') ? $match[2].'!' : '';
|
||||
$toString .= $modified3.':'.$modified4;
|
||||
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
|
||||
$column = PHPExcel_Cell::columnIndexFromString(trim($column,'$')) + 100000;
|
||||
$row = trim($row,'$') + 10000000;
|
||||
$cellIndex = $column.$row;
|
||||
|
||||
$newCellTokens[$cellIndex] = preg_quote($toString);
|
||||
$cellTokens[$cellIndex] = '/(?<![A-Z])'.preg_quote($fromString).'(?!\d)/i';
|
||||
++$adjustCount;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
// Search for cell references (e.g. 'Sheet1'!A3 or C5) with or without $ absolutes (e.g. $A1 or C$5)
|
||||
$matchCount = preg_match_all('/'.self::REFHELPER_REGEXP_CELLREF.'/i', ' '.$formulaBlock.' ', $matches, PREG_SET_ORDER);
|
||||
if ($matchCount > 0) {
|
||||
foreach($matches as $match) {
|
||||
$fromString = ($match[2] > '') ? $match[2].'!' : '';
|
||||
$fromString .= $match[3];
|
||||
$modified3 = $this->updateCellReference($match[3],$pBefore,$pNumCols,$pNumRows);
|
||||
|
||||
if ($match[3] !== $modified3) {
|
||||
if (($match[2] == '') || (trim($match[2],"'") == $sheetName)) {
|
||||
$toString = ($match[2] > '') ? $match[2].'!' : '';
|
||||
$toString .= $modified3;
|
||||
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
|
||||
$column = PHPExcel_Cell::columnIndexFromString(trim($column,'$')) + 100000;
|
||||
$row = trim($row,'$') + 10000000;
|
||||
$cellIndex = $column.$row;
|
||||
|
||||
$newCellTokens[$cellIndex] = preg_quote($toString);
|
||||
$cellTokens[$cellIndex] = '/(?<![A-Z])'.preg_quote($fromString).'(?!\d)/i';
|
||||
++$adjustCount;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
if ($adjustCount > 0) {
|
||||
krsort($cellTokens);
|
||||
krsort($newCellTokens);
|
||||
// Update cell references in the formula
|
||||
$formulaBlock = str_replace('\\','',preg_replace($cellTokens,$newCellTokens,$formulaBlock));
|
||||
}
|
||||
}
|
||||
}
|
||||
unset($formulaBlock);
|
||||
|
@@ -22,7 +22,7 @@
|
||||
* @package PHPExcel_RichText
|
||||
* @copyright Copyright (c) 2006 - 2010 PHPExcel (http://www.codeplex.com/PHPExcel)
|
||||
* @license http://www.gnu.org/licenses/old-licenses/lgpl-2.1.txt LGPL
|
||||
* @version 1.7.3c, 2010-06-01
|
||||
* @version 1.7.4, 2010-08-26
|
||||
*/
|
||||
|
||||
|
||||
|
@@ -20,7 +20,7 @@
|
||||
* @package PHPExcel_RichText
|
||||
* @copyright Copyright (c) 2006 - 2010 PHPExcel (http://www.codeplex.com/PHPExcel)
|
||||
* @license http://www.gnu.org/licenses/old-licenses/lgpl-2.1.txt LGPL
|
||||
* @version 1.7.3c, 2010-06-01
|
||||
* @version 1.7.4, 2010-08-26
|
||||
*/
|
||||
|
||||
|
||||
|
@@ -20,7 +20,7 @@
|
||||
* @package PHPExcel_RichText
|
||||
* @copyright Copyright (c) 2006 - 2010 PHPExcel (http://www.codeplex.com/PHPExcel)
|
||||
* @license http://www.gnu.org/licenses/old-licenses/lgpl-2.1.txt LGPL
|
||||
* @version 1.7.3c, 2010-06-01
|
||||
* @version 1.7.4, 2010-08-26
|
||||
*/
|
||||
|
||||
|
||||
|
@@ -20,7 +20,7 @@
|
||||
* @package PHPExcel_RichText
|
||||
* @copyright Copyright (c) 2006 - 2010 PHPExcel (http://www.codeplex.com/PHPExcel)
|
||||
* @license http://www.gnu.org/licenses/old-licenses/lgpl-2.1.txt LGPL
|
||||
* @version 1.7.3c, 2010-06-01
|
||||
* @version 1.7.4, 2010-08-26
|
||||
*/
|
||||
|
||||
|
||||
|
@@ -22,7 +22,7 @@
|
||||
* @package PHPExcel_Settings
|
||||
* @copyright Copyright (c) 2006 - 2010 PHPExcel (http://www.codeplex.com/PHPExcel)
|
||||
* @license http://www.gnu.org/licenses/old-licenses/lgpl-2.1.txt LGPL
|
||||
* @version 1.7.3c, 2010-06-01
|
||||
* @version 1.7.4, 2010-08-26
|
||||
*/
|
||||
|
||||
/** PHPExcel root directory */
|
||||
|
@@ -22,7 +22,7 @@
|
||||
* @package PHPExcel_Shared
|
||||
* @copyright Copyright (c) 2006 - 2010 PHPExcel (http://www.codeplex.com/PHPExcel)
|
||||
* @license http://www.gnu.org/licenses/old-licenses/lgpl-2.1.txt LGPL
|
||||
* @version 1.7.3c, 2010-06-01
|
||||
* @version 1.7.4, 2010-08-26
|
||||
*/
|
||||
|
||||
|
||||
|
@@ -23,7 +23,7 @@
|
||||
* @package PHPExcel_Shared
|
||||
* @copyright Copyright (c) 2006 - 2010 PHPExcel (http://www.codeplex.com/PHPExcel)
|
||||
* @license http://www.gnu.org/licenses/old-licenses/lgpl-2.1.txt LGPL
|
||||
* @version 1.7.3c, 2010-06-01
|
||||
* @version 1.7.4, 2010-08-26
|
||||
*/
|
||||
|
||||
|
||||
|
@@ -22,7 +22,7 @@
|
||||
* @package PHPExcel_Shared
|
||||
* @copyright Copyright (c) 2006 - 2010 PHPExcel (http://www.codeplex.com/PHPExcel)
|
||||
* @license http://www.gnu.org/licenses/old-licenses/lgpl-2.1.txt LGPL
|
||||
* @version 1.7.3c, 2010-06-01
|
||||
* @version 1.7.4, 2010-08-26
|
||||
*/
|
||||
|
||||
|
||||
|
@@ -22,7 +22,7 @@
|
||||
* @package PHPExcel_Shared_Escher
|
||||
* @copyright Copyright (c) 2006 - 2010 PHPExcel (http://www.codeplex.com/PHPExcel)
|
||||
* @license http://www.gnu.org/licenses/old-licenses/lgpl-2.1.txt LGPL
|
||||
* @version 1.7.3c, 2010-06-01
|
||||
* @version 1.7.4, 2010-08-26
|
||||
*/
|
||||
|
||||
/**
|
||||
|
@@ -22,7 +22,7 @@
|
||||
* @package PHPExcel_Shared_Escher
|
||||
* @copyright Copyright (c) 2006 - 2010 PHPExcel (http://www.codeplex.com/PHPExcel)
|
||||
* @license http://www.gnu.org/licenses/old-licenses/lgpl-2.1.txt LGPL
|
||||
* @version 1.7.3c, 2010-06-01
|
||||
* @version 1.7.4, 2010-08-26
|
||||
*/
|
||||
|
||||
/**
|
||||
|
@@ -22,7 +22,7 @@
|
||||
* @package PHPExcel_Shared_Escher
|
||||
* @copyright Copyright (c) 2006 - 2010 PHPExcel (http://www.codeplex.com/PHPExcel)
|
||||
* @license http://www.gnu.org/licenses/old-licenses/lgpl-2.1.txt LGPL
|
||||
* @version 1.7.3c, 2010-06-01
|
||||
* @version 1.7.4, 2010-08-26
|
||||
*/
|
||||
|
||||
/**
|
||||
|
@@ -22,7 +22,7 @@
|
||||
* @package PHPExcel_Shared_Escher
|
||||
* @copyright Copyright (c) 2006 - 2010 PHPExcel (http://www.codeplex.com/PHPExcel)
|
||||
* @license http://www.gnu.org/licenses/old-licenses/lgpl-2.1.txt LGPL
|
||||
* @version 1.7.3c, 2010-06-01
|
||||
* @version 1.7.4, 2010-08-26
|
||||
*/
|
||||
|
||||
/**
|
||||
|
@@ -22,7 +22,7 @@
|
||||
* @package PHPExcel_Shared_Escher
|
||||
* @copyright Copyright (c) 2006 - 2010 PHPExcel (http://www.codeplex.com/PHPExcel)
|
||||
* @license http://www.gnu.org/licenses/old-licenses/lgpl-2.1.txt LGPL
|
||||
* @version 1.7.3c, 2010-06-01
|
||||
* @version 1.7.4, 2010-08-26
|
||||
*/
|
||||
|
||||
/**
|
||||
@@ -69,6 +69,13 @@ class PHPExcel_Shared_Escher_DggContainer
|
||||
*/
|
||||
private $_OPT = array();
|
||||
|
||||
/**
|
||||
* Array of identifier clusters containg information about the maximum shape identifiers
|
||||
*
|
||||
* @var array
|
||||
*/
|
||||
private $_IDCLs = array();
|
||||
|
||||
/**
|
||||
* Get maximum shape index of all shapes in all drawings (plus one)
|
||||
*
|
||||
@@ -174,4 +181,23 @@ class PHPExcel_Shared_Escher_DggContainer
|
||||
return null;
|
||||
}
|
||||
|
||||
/**
|
||||
* Get identifier clusters
|
||||
*
|
||||
* @return array
|
||||
*/
|
||||
public function getIDCLs()
|
||||
{
|
||||
return $this->_IDCLs;
|
||||
}
|
||||
|
||||
/**
|
||||
* Set identifier clusters. array(<drawingId> => <max shape id>, ...)
|
||||
*
|
||||
* @param array $pValue
|
||||
*/
|
||||
public function setIDCLs($pValue)
|
||||
{
|
||||
$this->_IDCLs = $pValue;
|
||||
}
|
||||
}
|
||||
|
@@ -22,7 +22,7 @@
|
||||
* @package PHPExcel_Shared_Escher
|
||||
* @copyright Copyright (c) 2006 - 2010 PHPExcel (http://www.codeplex.com/PHPExcel)
|
||||
* @license http://www.gnu.org/licenses/old-licenses/lgpl-2.1.txt LGPL
|
||||
* @version 1.7.3c, 2010-06-01
|
||||
* @version 1.7.4, 2010-08-26
|
||||
*/
|
||||
|
||||
/**
|
||||
|
@@ -22,7 +22,7 @@
|
||||
* @package PHPExcel_Shared_Escher
|
||||
* @copyright Copyright (c) 2006 - 2010 PHPExcel (http://www.codeplex.com/PHPExcel)
|
||||
* @license http://www.gnu.org/licenses/old-licenses/lgpl-2.1.txt LGPL
|
||||
* @version 1.7.3c, 2010-06-01
|
||||
* @version 1.7.4, 2010-08-26
|
||||
*/
|
||||
|
||||
/**
|
||||
|
@@ -22,7 +22,7 @@
|
||||
* @package PHPExcel_Shared_Escher
|
||||
* @copyright Copyright (c) 2006 - 2010 PHPExcel (http://www.codeplex.com/PHPExcel)
|
||||
* @license http://www.gnu.org/licenses/old-licenses/lgpl-2.1.txt LGPL
|
||||
* @version 1.7.3c, 2010-06-01
|
||||
* @version 1.7.4, 2010-08-26
|
||||
*/
|
||||
|
||||
/**
|
||||
|
@@ -22,7 +22,7 @@
|
||||
* @package PHPExcel_Shared
|
||||
* @copyright Copyright (c) 2006 - 2010 PHPExcel (http://www.codeplex.com/PHPExcel)
|
||||
* @license http://www.gnu.org/licenses/old-licenses/lgpl-2.1.txt LGPL
|
||||
* @version 1.7.3c, 2010-06-01
|
||||
* @version 1.7.4, 2010-08-26
|
||||
*/
|
||||
|
||||
/**
|
||||
|
@@ -22,7 +22,7 @@
|
||||
* @package PHPExcel_Shared
|
||||
* @copyright Copyright (c) 2006 - 2010 PHPExcel (http://www.codeplex.com/PHPExcel)
|
||||
* @license http://www.gnu.org/licenses/old-licenses/lgpl-2.1.txt LGPL
|
||||
* @version 1.7.3c, 2010-06-01
|
||||
* @version 1.7.4, 2010-08-26
|
||||
*/
|
||||
|
||||
|
||||
@@ -75,7 +75,9 @@ class PHPExcel_Shared_File
|
||||
$returnValue = '';
|
||||
|
||||
// Try using realpath()
|
||||
$returnValue = realpath($pFilename);
|
||||
if (file_exists($pFilename)) {
|
||||
$returnValue = realpath($pFilename);
|
||||
}
|
||||
|
||||
// Found something?
|
||||
if ($returnValue == '' || is_null($returnValue)) {
|
||||
@@ -107,14 +109,14 @@ class PHPExcel_Shared_File
|
||||
// http://php.net/manual/en/function.sys-get-temp-dir.php#94119
|
||||
|
||||
if ( !function_exists('sys_get_temp_dir')) {
|
||||
if( $temp = getenv('TMP') ) {
|
||||
return realpath($temp);
|
||||
if ($temp = getenv('TMP') ) {
|
||||
if (file_exists($temp)) { return realpath($temp); }
|
||||
}
|
||||
if( $temp = getenv('TEMP') ) {
|
||||
return realpath($temp);
|
||||
if ($temp = getenv('TEMP') ) {
|
||||
if (file_exists($temp)) { return realpath($temp); }
|
||||
}
|
||||
if( $temp = getenv('TMPDIR') ) {
|
||||
return realpath($temp);
|
||||
if ($temp = getenv('TMPDIR') ) {
|
||||
if (file_exists($temp)) { return realpath($temp); }
|
||||
}
|
||||
|
||||
// trick for creating a file in system's temporary dir
|
||||
@@ -126,10 +128,11 @@ class PHPExcel_Shared_File
|
||||
}
|
||||
|
||||
return null;
|
||||
|
||||
}
|
||||
|
||||
// use ordinary built-in PHP function
|
||||
// There should be no problem with the 5.2.4 Suhosin realpath() bug, because this line should only
|
||||
// be called if we're running 5.2.1 or earlier
|
||||
return realpath(sys_get_temp_dir());
|
||||
}
|
||||
|
||||
|
@@ -22,7 +22,7 @@
|
||||
* @package PHPExcel_Shared
|
||||
* @copyright Copyright (c) 2006 - 2010 PHPExcel (http://www.codeplex.com/PHPExcel)
|
||||
* @license http://www.gnu.org/licenses/old-licenses/lgpl-2.1.txt LGPL
|
||||
* @version 1.7.3c, 2010-06-01
|
||||
* @version 1.7.4, 2010-08-26
|
||||
*/
|
||||
|
||||
|
||||
|
@@ -22,7 +22,7 @@
|
||||
* @package PHPExcel_Shared_OLE
|
||||
* @copyright Copyright (c) 2006 - 2007 Christian Schmidt
|
||||
* @license http://www.gnu.org/licenses/old-licenses/lgpl-2.1.txt LGPL
|
||||
* @version 1.7.3c, 2010-06-01
|
||||
* @version 1.7.4, 2010-08-26
|
||||
*/
|
||||
|
||||
/**
|
||||
|
@@ -22,7 +22,7 @@
|
||||
* @package PHPExcel_Shared
|
||||
* @copyright Copyright (c) 2006 - 2010 PHPExcel (http://www.codeplex.com/PHPExcel)
|
||||
* @license http://www.gnu.org/licenses/old-licenses/lgpl-2.1.txt LGPL
|
||||
* @version 1.7.3c, 2010-06-01
|
||||
* @version 1.7.4, 2010-08-26
|
||||
*/
|
||||
|
||||
define('IDENTIFIER_OLE', pack('CCCCCCCC', 0xd0, 0xcf, 0x11, 0xe0, 0xa1, 0xb1, 0x1a, 0xe1));
|
||||
|
@@ -22,7 +22,7 @@
|
||||
* @package PHPExcel_Shared
|
||||
* @copyright Copyright (c) 2006 - 2010 PHPExcel (http://www.codeplex.com/PHPExcel)
|
||||
* @license http://www.gnu.org/licenses/old-licenses/lgpl-2.1.txt LGPL
|
||||
* @version 1.7.3c, 2010-06-01
|
||||
* @version 1.7.4, 2010-08-26
|
||||
*/
|
||||
|
||||
|
||||
|
@@ -22,7 +22,7 @@
|
||||
* @package PHPExcel_Shared
|
||||
* @copyright Copyright (c) 2006 - 2010 PHPExcel (http://www.codeplex.com/PHPExcel)
|
||||
* @license http://www.gnu.org/licenses/old-licenses/lgpl-2.1.txt LGPL
|
||||
* @version 1.7.3c, 2010-06-01
|
||||
* @version 1.7.4, 2010-08-26
|
||||
*/
|
||||
|
||||
|
||||
@@ -507,7 +507,7 @@ class PHPExcel_Shared_String
|
||||
* @author Rasmus Andersson {@link http://rasmusandersson.se/}
|
||||
* @author vadik56
|
||||
*/
|
||||
function utf16_decode( $str, $bom_be=true ) {
|
||||
public static function utf16_decode( $str, $bom_be=true ) {
|
||||
if( strlen($str) < 2 ) return $str;
|
||||
$c0 = ord($str{0});
|
||||
$c1 = ord($str{1});
|
||||
|
@@ -22,13 +22,18 @@
|
||||
* @package PHPExcel_Shared
|
||||
* @copyright Copyright (c) 2006 - 2010 PHPExcel (http://www.codeplex.com/PHPExcel)
|
||||
* @license http://www.gnu.org/licenses/old-licenses/lgpl-2.1.txt LGPL
|
||||
* @version 1.7.3c, 2010-06-01
|
||||
* @version 1.7.4, 2010-08-26
|
||||
*/
|
||||
|
||||
if (!defined('DATE_W3C')) {
|
||||
define('DATE_W3C', 'Y-m-d\TH:i:sP');
|
||||
}
|
||||
|
||||
if (!defined('DEBUGMODE_ENABLED')) {
|
||||
define('DEBUGMODE_ENABLED', false);
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* PHPExcel_Shared_XMLWriter
|
||||
*
|
||||
@@ -80,7 +85,9 @@ class PHPExcel_Shared_XMLWriter {
|
||||
}
|
||||
|
||||
// Set default values
|
||||
$this->_xmlWriter->setIndent(true);
|
||||
if (DEBUGMODE_ENABLED) {
|
||||
$this->_xmlWriter->setIndent(true);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
|
@@ -22,7 +22,7 @@
|
||||
* @package PHPExcel_Shared
|
||||
* @copyright Copyright (c) 2006 - 2010 PHPExcel (http://www.codeplex.com/PHPExcel)
|
||||
* @license http://www.gnu.org/licenses/old-licenses/lgpl-2.1.txt LGPL
|
||||
* @version 1.7.3c, 2010-06-01
|
||||
* @version 1.7.4, 2010-08-26
|
||||
*/
|
||||
|
||||
|
||||
|
@@ -22,7 +22,7 @@
|
||||
* @package PHPExcel_Shared_Best_Fit
|
||||
* @copyright Copyright (c) 2006 - 2010 PHPExcel (http://www.codeplex.com/PHPExcel)
|
||||
* @license http://www.gnu.org/licenses/old-licenses/lgpl-2.1.txt LGPL
|
||||
* @version 1.7.3c, 2010-06-01
|
||||
* @version 1.7.4, 2010-08-26
|
||||
*/
|
||||
|
||||
|
||||
|
@@ -22,7 +22,7 @@
|
||||
* @package PHPExcel_Shared_Best_Fit
|
||||
* @copyright Copyright (c) 2006 - 2010 PHPExcel (http://www.codeplex.com/PHPExcel)
|
||||
* @license http://www.gnu.org/licenses/old-licenses/lgpl-2.1.txt LGPL
|
||||
* @version 1.7.3c, 2010-06-01
|
||||
* @version 1.7.4, 2010-08-26
|
||||
*/
|
||||
|
||||
|
||||
|
@@ -22,7 +22,7 @@
|
||||
* @package PHPExcel_Shared_Best_Fit
|
||||
* @copyright Copyright (c) 2006 - 2010 PHPExcel (http://www.codeplex.com/PHPExcel)
|
||||
* @license http://www.gnu.org/licenses/old-licenses/lgpl-2.1.txt LGPL
|
||||
* @version 1.7.3c, 2010-06-01
|
||||
* @version 1.7.4, 2010-08-26
|
||||
*/
|
||||
|
||||
|
||||
|
@@ -22,7 +22,7 @@
|
||||
* @package PHPExcel_Shared_Best_Fit
|
||||
* @copyright Copyright (c) 2006 - 2010 PHPExcel (http://www.codeplex.com/PHPExcel)
|
||||
* @license http://www.gnu.org/licenses/old-licenses/lgpl-2.1.txt LGPL
|
||||
* @version 1.7.3c, 2010-06-01
|
||||
* @version 1.7.4, 2010-08-26
|
||||
*/
|
||||
|
||||
|
||||
|
@@ -22,7 +22,7 @@
|
||||
* @package PHPExcel_Shared_Best_Fit
|
||||
* @copyright Copyright (c) 2006 - 2010 PHPExcel (http://www.codeplex.com/PHPExcel)
|
||||
* @license http://www.gnu.org/licenses/old-licenses/lgpl-2.1.txt LGPL
|
||||
* @version 1.7.3c, 2010-06-01
|
||||
* @version 1.7.4, 2010-08-26
|
||||
*/
|
||||
|
||||
|
||||
|
@@ -22,7 +22,7 @@
|
||||
* @package PHPExcel_Shared_Best_Fit
|
||||
* @copyright Copyright (c) 2006 - 2010 PHPExcel (http://www.codeplex.com/PHPExcel)
|
||||
* @license http://www.gnu.org/licenses/old-licenses/lgpl-2.1.txt LGPL
|
||||
* @version 1.7.3c, 2010-06-01
|
||||
* @version 1.7.4, 2010-08-26
|
||||
*/
|
||||
|
||||
|
||||
|
@@ -22,7 +22,7 @@
|
||||
* @package PHPExcel_Style
|
||||
* @copyright Copyright (c) 2006 - 2010 PHPExcel (http://www.codeplex.com/PHPExcel)
|
||||
* @license http://www.gnu.org/licenses/old-licenses/lgpl-2.1.txt LGPL
|
||||
* @version 1.7.3c, 2010-06-01
|
||||
* @version 1.7.4, 2010-08-26
|
||||
*/
|
||||
|
||||
|
||||
@@ -675,7 +675,7 @@ class PHPExcel_Style implements PHPExcel_IComparable
|
||||
public function __clone() {
|
||||
$vars = get_object_vars($this);
|
||||
foreach ($vars as $key => $value) {
|
||||
if (is_object($value)) {
|
||||
if ((is_object($value)) && ($key != '_parent')) {
|
||||
$this->$key = clone $value;
|
||||
} else {
|
||||
$this->$key = $value;
|
||||
|
@@ -22,7 +22,7 @@
|
||||
* @package PHPExcel_Style
|
||||
* @copyright Copyright (c) 2006 - 2010 PHPExcel (http://www.codeplex.com/PHPExcel)
|
||||
* @license http://www.gnu.org/licenses/old-licenses/lgpl-2.1.txt LGPL
|
||||
* @version 1.7.3c, 2010-06-01
|
||||
* @version 1.7.4, 2010-08-26
|
||||
*/
|
||||
|
||||
|
||||
@@ -479,7 +479,7 @@ class PHPExcel_Style_Alignment implements PHPExcel_IComparable
|
||||
public function __clone() {
|
||||
$vars = get_object_vars($this);
|
||||
foreach ($vars as $key => $value) {
|
||||
if (is_object($value)) {
|
||||
if ((is_object($value)) && ($key != '_parent')) {
|
||||
$this->$key = clone $value;
|
||||
} else {
|
||||
$this->$key = $value;
|
||||
|
@@ -22,7 +22,7 @@
|
||||
* @package PHPExcel_Style
|
||||
* @copyright Copyright (c) 2006 - 2010 PHPExcel (http://www.codeplex.com/PHPExcel)
|
||||
* @license http://www.gnu.org/licenses/old-licenses/lgpl-2.1.txt LGPL
|
||||
* @version 1.7.3c, 2010-06-01
|
||||
* @version 1.7.4, 2010-08-26
|
||||
*/
|
||||
|
||||
|
||||
@@ -372,7 +372,7 @@ class PHPExcel_Style_Border implements PHPExcel_IComparable
|
||||
public function __clone() {
|
||||
$vars = get_object_vars($this);
|
||||
foreach ($vars as $key => $value) {
|
||||
if (is_object($value)) {
|
||||
if ((is_object($value)) && ($key != '_parent')) {
|
||||
$this->$key = clone $value;
|
||||
} else {
|
||||
$this->$key = $value;
|
||||
|
@@ -22,7 +22,7 @@
|
||||
* @package PHPExcel_Style
|
||||
* @copyright Copyright (c) 2006 - 2010 PHPExcel (http://www.codeplex.com/PHPExcel)
|
||||
* @license http://www.gnu.org/licenses/old-licenses/lgpl-2.1.txt LGPL
|
||||
* @version 1.7.3c, 2010-06-01
|
||||
* @version 1.7.4, 2010-08-26
|
||||
*/
|
||||
|
||||
|
||||
@@ -489,7 +489,7 @@ class PHPExcel_Style_Borders implements PHPExcel_IComparable
|
||||
public function __clone() {
|
||||
$vars = get_object_vars($this);
|
||||
foreach ($vars as $key => $value) {
|
||||
if (is_object($value)) {
|
||||
if ((is_object($value)) && ($key != '_parent')) {
|
||||
$this->$key = clone $value;
|
||||
} else {
|
||||
$this->$key = $value;
|
||||
|
@@ -22,7 +22,7 @@
|
||||
* @package PHPExcel_Style
|
||||
* @copyright Copyright (c) 2006 - 2010 PHPExcel (http://www.codeplex.com/PHPExcel)
|
||||
* @license http://www.gnu.org/licenses/old-licenses/lgpl-2.1.txt LGPL
|
||||
* @version 1.7.3c, 2010-06-01
|
||||
* @version 1.7.4, 2010-08-26
|
||||
*/
|
||||
|
||||
|
||||
@@ -398,7 +398,7 @@ class PHPExcel_Style_Color implements PHPExcel_IComparable
|
||||
public function __clone() {
|
||||
$vars = get_object_vars($this);
|
||||
foreach ($vars as $key => $value) {
|
||||
if (is_object($value)) {
|
||||
if ((is_object($value)) && ($key != '_parent')) {
|
||||
$this->$key = clone $value;
|
||||
} else {
|
||||
$this->$key = $value;
|
||||
|
@@ -22,7 +22,7 @@
|
||||
* @package PHPExcel_Style
|
||||
* @copyright Copyright (c) 2006 - 2010 PHPExcel (http://www.codeplex.com/PHPExcel)
|
||||
* @license http://www.gnu.org/licenses/old-licenses/lgpl-2.1.txt LGPL
|
||||
* @version 1.7.3c, 2010-06-01
|
||||
* @version 1.7.4, 2010-08-26
|
||||
*/
|
||||
|
||||
|
||||
|
@@ -22,7 +22,7 @@
|
||||
* @package PHPExcel_Style
|
||||
* @copyright Copyright (c) 2006 - 2010 PHPExcel (http://www.codeplex.com/PHPExcel)
|
||||
* @license http://www.gnu.org/licenses/old-licenses/lgpl-2.1.txt LGPL
|
||||
* @version 1.7.3c, 2010-06-01
|
||||
* @version 1.7.4, 2010-08-26
|
||||
*/
|
||||
|
||||
|
||||
@@ -391,7 +391,7 @@ class PHPExcel_Style_Fill implements PHPExcel_IComparable
|
||||
public function __clone() {
|
||||
$vars = get_object_vars($this);
|
||||
foreach ($vars as $key => $value) {
|
||||
if (is_object($value)) {
|
||||
if ((is_object($value)) && ($key != '_parent')) {
|
||||
$this->$key = clone $value;
|
||||
} else {
|
||||
$this->$key = $value;
|
||||
|
@@ -22,7 +22,7 @@
|
||||
* @package PHPExcel_Style
|
||||
* @copyright Copyright (c) 2006 - 2010 PHPExcel (http://www.codeplex.com/PHPExcel)
|
||||
* @license http://www.gnu.org/licenses/old-licenses/lgpl-2.1.txt LGPL
|
||||
* @version 1.7.3c, 2010-06-01
|
||||
* @version 1.7.4, 2010-08-26
|
||||
*/
|
||||
|
||||
|
||||
@@ -609,7 +609,7 @@ class PHPExcel_Style_Font implements PHPExcel_IComparable
|
||||
public function __clone() {
|
||||
$vars = get_object_vars($this);
|
||||
foreach ($vars as $key => $value) {
|
||||
if (is_object($value)) {
|
||||
if ((is_object($value)) && ($key != '_parent')) {
|
||||
$this->$key = clone $value;
|
||||
} else {
|
||||
$this->$key = $value;
|
||||
|
@@ -22,7 +22,7 @@
|
||||
* @package PHPExcel_Style
|
||||
* @copyright Copyright (c) 2006 - 2010 PHPExcel (http://www.codeplex.com/PHPExcel)
|
||||
* @license http://www.gnu.org/licenses/old-licenses/lgpl-2.1.txt LGPL
|
||||
* @version 1.7.3c, 2010-06-01
|
||||
* @version 1.7.4, 2010-08-26
|
||||
*/
|
||||
|
||||
|
||||
@@ -443,7 +443,7 @@ class PHPExcel_Style_NumberFormat implements PHPExcel_IComparable
|
||||
{
|
||||
$vars = get_object_vars($this);
|
||||
foreach ($vars as $key => $value) {
|
||||
if (is_object($value)) {
|
||||
if ((is_object($value)) && ($key != '_parent')) {
|
||||
$this->$key = clone $value;
|
||||
} else {
|
||||
$this->$key = $value;
|
||||
|
@@ -271,7 +271,7 @@ class PHPExcel_Style_Protection implements PHPExcel_IComparable
|
||||
public function __clone() {
|
||||
$vars = get_object_vars($this);
|
||||
foreach ($vars as $key => $value) {
|
||||
if (is_object($value)) {
|
||||
if ((is_object($value)) && ($key != '_parent')) {
|
||||
$this->$key = clone $value;
|
||||
} else {
|
||||
$this->$key = $value;
|
||||
|
@@ -22,7 +22,7 @@
|
||||
* @package PHPExcel_Worksheet
|
||||
* @copyright Copyright (c) 2006 - 2010 PHPExcel (http://www.codeplex.com/PHPExcel)
|
||||
* @license http://www.gnu.org/licenses/old-licenses/lgpl-2.1.txt LGPL
|
||||
* @version 1.7.3c, 2010-06-01
|
||||
* @version 1.7.4, 2010-08-26
|
||||
*/
|
||||
|
||||
|
||||
@@ -2180,9 +2180,8 @@ class PHPExcel_Worksheet implements PHPExcel_IComparable
|
||||
$highestRow = 1;
|
||||
|
||||
// Find cells that can be cleaned
|
||||
foreach ($this->_cellCollection->getCellList() as $coordinate) {
|
||||
preg_match('/^(\w+)(\d+)$/U',$coordinate,$matches);
|
||||
list(,$col,$row) = $matches;
|
||||
foreach ($this->_cellCollection->getCellList() as $coord) {
|
||||
list($col,$row) = sscanf($coord,'%[A-Z]%d');
|
||||
$column = PHPExcel_Cell::columnIndexFromString($col);
|
||||
|
||||
// Determine highest column and row
|
||||
@@ -2468,7 +2467,13 @@ class PHPExcel_Worksheet implements PHPExcel_IComparable
|
||||
}
|
||||
|
||||
if (is_object($val) || (is_array($val))) {
|
||||
$this->{$key} = unserialize(serialize($val));
|
||||
if ($key == '_cellCollection') {
|
||||
$newCollection = clone $this->_cellCollection;
|
||||
$newCollection->copyCellCollection($this);
|
||||
$this->_cellCollection = $newCollection;
|
||||
} else {
|
||||
$this->{$key} = unserialize(serialize($val));
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@@ -22,7 +22,7 @@
|
||||
* @package PHPExcel_Worksheet
|
||||
* @copyright Copyright (c) 2006 - 2010 PHPExcel (http://www.codeplex.com/PHPExcel)
|
||||
* @license http://www.gnu.org/licenses/old-licenses/lgpl-2.1.txt LGPL
|
||||
* @version 1.7.3c, 2010-06-01
|
||||
* @version 1.7.4, 2010-08-26
|
||||
*/
|
||||
|
||||
|
||||
|
@@ -22,7 +22,7 @@
|
||||
* @package PHPExcel_Worksheet
|
||||
* @copyright Copyright (c) 2006 - 2010 PHPExcel (http://www.codeplex.com/PHPExcel)
|
||||
* @license http://www.gnu.org/licenses/old-licenses/lgpl-2.1.txt LGPL
|
||||
* @version 1.7.3c, 2010-06-01
|
||||
* @version 1.7.4, 2010-08-26
|
||||
*/
|
||||
|
||||
|
||||
|
@@ -22,7 +22,7 @@
|
||||
* @package PHPExcel_Worksheet
|
||||
* @copyright Copyright (c) 2006 - 2010 PHPExcel (http://www.codeplex.com/PHPExcel)
|
||||
* @license http://www.gnu.org/licenses/old-licenses/lgpl-2.1.txt LGPL
|
||||
* @version 1.7.3c, 2010-06-01
|
||||
* @version 1.7.4, 2010-08-26
|
||||
*/
|
||||
|
||||
|
||||
|
@@ -22,7 +22,7 @@
|
||||
* @package PHPExcel_Worksheet_Drawing
|
||||
* @copyright Copyright (c) 2006 - 2010 PHPExcel (http://www.codeplex.com/PHPExcel)
|
||||
* @license http://www.gnu.org/licenses/old-licenses/lgpl-2.1.txt LGPL
|
||||
* @version 1.7.3c, 2010-06-01
|
||||
* @version 1.7.4, 2010-08-26
|
||||
*/
|
||||
|
||||
|
||||
|
@@ -22,7 +22,7 @@
|
||||
* @package PHPExcel_Worksheet_Drawing
|
||||
* @copyright Copyright (c) 2006 - 2010 PHPExcel (http://www.codeplex.com/PHPExcel)
|
||||
* @license http://www.gnu.org/licenses/old-licenses/lgpl-2.1.txt LGPL
|
||||
* @version 1.7.3c, 2010-06-01
|
||||
* @version 1.7.4, 2010-08-26
|
||||
*/
|
||||
|
||||
|
||||
|
@@ -22,7 +22,7 @@
|
||||
* @package PHPExcel_Worksheet
|
||||
* @copyright Copyright (c) 2006 - 2010 PHPExcel (http://www.codeplex.com/PHPExcel)
|
||||
* @license http://www.gnu.org/licenses/old-licenses/lgpl-2.1.txt LGPL
|
||||
* @version 1.7.3c, 2010-06-01
|
||||
* @version 1.7.4, 2010-08-26
|
||||
*/
|
||||
|
||||
|
||||
|
@@ -22,7 +22,7 @@
|
||||
* @package PHPExcel_Worksheet
|
||||
* @copyright Copyright (c) 2006 - 2010 PHPExcel (http://www.codeplex.com/PHPExcel)
|
||||
* @license http://www.gnu.org/licenses/old-licenses/lgpl-2.1.txt LGPL
|
||||
* @version 1.7.3c, 2010-06-01
|
||||
* @version 1.7.4, 2010-08-26
|
||||
*/
|
||||
|
||||
|
||||
|
@@ -22,7 +22,7 @@
|
||||
* @package PHPExcel_Worksheet
|
||||
* @copyright Copyright (c) 2006 - 2010 PHPExcel (http://www.codeplex.com/PHPExcel)
|
||||
* @license http://www.gnu.org/licenses/old-licenses/lgpl-2.1.txt LGPL
|
||||
* @version 1.7.3c, 2010-06-01
|
||||
* @version 1.7.4, 2010-08-26
|
||||
*/
|
||||
|
||||
|
||||
|
@@ -22,7 +22,7 @@
|
||||
* @package PHPExcel_Worksheet
|
||||
* @copyright Copyright (c) 2006 - 2010 PHPExcel (http://www.codeplex.com/PHPExcel)
|
||||
* @license http://www.gnu.org/licenses/old-licenses/lgpl-2.1.txt LGPL
|
||||
* @version 1.7.3c, 2010-06-01
|
||||
* @version 1.7.4, 2010-08-26
|
||||
*/
|
||||
|
||||
|
||||
|
@@ -22,7 +22,7 @@
|
||||
* @package PHPExcel_Worksheet
|
||||
* @copyright Copyright (c) 2006 - 2010 PHPExcel (http://www.codeplex.com/PHPExcel)
|
||||
* @license http://www.gnu.org/licenses/old-licenses/lgpl-2.1.txt LGPL
|
||||
* @version 1.7.3c, 2010-06-01
|
||||
* @version 1.7.4, 2010-08-26
|
||||
*/
|
||||
|
||||
|
||||
@@ -179,6 +179,11 @@ class PHPExcel_Worksheet_PageSetup
|
||||
const ORIENTATION_LANDSCAPE = 'landscape';
|
||||
const ORIENTATION_PORTRAIT = 'portrait';
|
||||
|
||||
/* Print Range Set Method */
|
||||
const SETPRINTRANGE_OVERWRITE = 'O';
|
||||
const SETPRINTRANGE_INSERT = 'I';
|
||||
|
||||
|
||||
/**
|
||||
* Paper size
|
||||
*
|
||||
@@ -261,7 +266,7 @@ class PHPExcel_Worksheet_PageSetup
|
||||
* @var string
|
||||
*/
|
||||
private $_printArea = null;
|
||||
|
||||
|
||||
/**
|
||||
* First page number
|
||||
*
|
||||
@@ -570,55 +575,197 @@ class PHPExcel_Worksheet_PageSetup
|
||||
}
|
||||
|
||||
/**
|
||||
* Get print area
|
||||
* Get print area
|
||||
*
|
||||
* @return string
|
||||
* @param int $index Identifier for a specific print area range if several ranges have been set
|
||||
* Default behaviour, or a index value of 0, will return all ranges as a comma-separated string
|
||||
* Otherwise, the specific range identified by the value of $index will be returned
|
||||
* Print areas are numbered from 1
|
||||
* @throws Exception
|
||||
* @return string
|
||||
*/
|
||||
public function getPrintArea() {
|
||||
return $this->_printArea;
|
||||
public function getPrintArea($index = 0) {
|
||||
if ($index == 0) {
|
||||
return $this->_printArea;
|
||||
}
|
||||
$printAreas = explode(',',$this->_printArea);
|
||||
if (isset($printAreas[$index-1])) {
|
||||
return $printAreas[$index-1];
|
||||
}
|
||||
throw new Exception("Requested Print Area does not exist");
|
||||
}
|
||||
|
||||
/**
|
||||
* Is print area set?
|
||||
* Is print area set?
|
||||
*
|
||||
* @return boolean
|
||||
* @param int $index Identifier for a specific print area range if several ranges have been set
|
||||
* Default behaviour, or an index value of 0, will identify whether any print range is set
|
||||
* Otherwise, existence of the range identified by the value of $index will be returned
|
||||
* Print areas are numbered from 1
|
||||
* @return boolean
|
||||
*/
|
||||
public function isPrintAreaSet() {
|
||||
return !is_null($this->_printArea);
|
||||
public function isPrintAreaSet($index = 0) {
|
||||
if ($index == 0) {
|
||||
return !is_null($this->_printArea);
|
||||
}
|
||||
$printAreas = explode(',',$this->_printArea);
|
||||
return isset($printAreas[$index-1]);
|
||||
}
|
||||
|
||||
/**
|
||||
* Set print area. E.g. 'A1:D10' or 'A1:D10,G5:M20'
|
||||
* Clear a print area
|
||||
*
|
||||
* @param string $value
|
||||
* @throws Exception
|
||||
* @return PHPExcel_Worksheet_PageSetup
|
||||
* @param int $index Identifier for a specific print area range if several ranges have been set
|
||||
* Default behaviour, or an index value of 0, will clear all print ranges that are set
|
||||
* Otherwise, the range identified by the value of $index will be removed from the series
|
||||
* Print areas are numbered from 1
|
||||
* @return PHPExcel_Worksheet_PageSetup
|
||||
*/
|
||||
public function setPrintArea($value) {
|
||||
if (strpos($value,':') === false) {
|
||||
throw new Exception('Cell coordinate must be a range of cells.');
|
||||
} elseif (strpos($value,'$') !== false) {
|
||||
throw new Exception('Cell coordinate must not be absolute.');
|
||||
} else {
|
||||
$this->_printArea = strtoupper($value);
|
||||
}
|
||||
public function clearPrintArea($index = 0) {
|
||||
if ($index == 0) {
|
||||
$this->_printArea = NULL;
|
||||
} else {
|
||||
$printAreas = explode(',',$this->_printArea);
|
||||
if (isset($printAreas[$index-1])) {
|
||||
unset($printAreas[$index-1]);
|
||||
$this->_printArea = implode(',',$printAreas);
|
||||
}
|
||||
}
|
||||
|
||||
return $this;
|
||||
}
|
||||
|
||||
/**
|
||||
* Set print area
|
||||
* Set print area. e.g. 'A1:D10' or 'A1:D10,G5:M20'
|
||||
*
|
||||
* @param int $column1 Column 1
|
||||
* @param int $row1 Row 1
|
||||
* @param int $column2 Column 2
|
||||
* @param int $row2 Row 2
|
||||
* @return PHPExcel_Worksheet_PageSetup
|
||||
* @param string $value
|
||||
* @param int $index Identifier for a specific print area range allowing several ranges to be set
|
||||
* When the method is "O"verwrite, then a positive integer index will overwrite that indexed
|
||||
* entry in the print areas list; a negative index value will identify which entry to
|
||||
* overwrite working bacward through the print area to the list, with the last entry as -1.
|
||||
* Specifying an index value of 0, will overwrite <b>all</b> existing print ranges.
|
||||
* When the method is "I"nsert, then a positive index will insert after that indexed entry in
|
||||
* the print areas list, while a negative index will insert before the indexed entry.
|
||||
* Specifying an index value of 0, will always append the new print range at the end of the
|
||||
* list.
|
||||
* Print areas are numbered from 1
|
||||
* @param string $method Determines the method used when setting multiple print areas
|
||||
* Default behaviour, or the "O" method, overwrites existing print area
|
||||
* The "I" method, inserts the new print area before any specified index, or at the end of the list
|
||||
* @throws Exception
|
||||
* @return PHPExcel_Worksheet_PageSetup
|
||||
*/
|
||||
public function setPrintAreaByColumnAndRow($column1, $row1, $column2, $row2)
|
||||
public function setPrintArea($value, $index = 0, $method = self::SETPRINTRANGE_OVERWRITE) {
|
||||
if (strpos($value,'!') !== false) {
|
||||
throw new Exception('Cell coordinate must not specify a worksheet.');
|
||||
} elseif (strpos($value,':') === false) {
|
||||
throw new Exception('Cell coordinate must be a range of cells.');
|
||||
} elseif (strpos($value,'$') !== false) {
|
||||
throw new Exception('Cell coordinate must not be absolute.');
|
||||
}
|
||||
$value = strtoupper($value);
|
||||
|
||||
if ($method == self::SETPRINTRANGE_OVERWRITE) {
|
||||
if ($index == 0) {
|
||||
$this->_printArea = $value;
|
||||
} else {
|
||||
$printAreas = explode(',',$this->_printArea);
|
||||
if($index < 0) {
|
||||
$index = count($printAreas) - abs($index) + 1;
|
||||
}
|
||||
if (($index <= 0) || ($index > count($printAreas))) {
|
||||
throw new Exception('Invalid index for setting print range.');
|
||||
}
|
||||
$printAreas[$index-1] = $value;
|
||||
$this->_printArea = implode(',',$printAreas);
|
||||
}
|
||||
} elseif($method == self::SETPRINTRANGE_INSERT) {
|
||||
if ($index == 0) {
|
||||
$this->_printArea .= ($this->_printArea == '') ? $value : ','.$value;
|
||||
} else {
|
||||
$printAreas = explode(',',$this->_printArea);
|
||||
if($index < 0) {
|
||||
$index = abs($index) - 1;
|
||||
}
|
||||
if ($index > count($printAreas)) {
|
||||
throw new Exception('Invalid index for setting print range.');
|
||||
}
|
||||
$printAreas = array_merge(array_slice($printAreas,0,$index),array($value),array_slice($printAreas,$index));
|
||||
$this->_printArea = implode(',',$printAreas);
|
||||
}
|
||||
} else {
|
||||
throw new Exception('Invalid method for setting print range.');
|
||||
}
|
||||
|
||||
return $this;
|
||||
}
|
||||
|
||||
/**
|
||||
* Add a new print area (e.g. 'A1:D10' or 'A1:D10,G5:M20') to the list of print areas
|
||||
*
|
||||
* @param string $value
|
||||
* @param int $index Identifier for a specific print area range allowing several ranges to be set
|
||||
* A positive index will insert after that indexed entry in the print areas list, while a
|
||||
* negative index will insert before the indexed entry.
|
||||
* Specifying an index value of 0, will always append the new print range at the end of the
|
||||
* list.
|
||||
* Print areas are numbered from 1
|
||||
* @throws Exception
|
||||
* @return PHPExcel_Worksheet_PageSetup
|
||||
*/
|
||||
public function addPrintArea($value, $index = -1) {
|
||||
return $this->setPrintArea($value, $index, self::SETPRINTRANGE_INSERT);
|
||||
}
|
||||
|
||||
/**
|
||||
* Set print area
|
||||
*
|
||||
* @param int $column1 Column 1
|
||||
* @param int $row1 Row 1
|
||||
* @param int $column2 Column 2
|
||||
* @param int $row2 Row 2
|
||||
* @param int $index Identifier for a specific print area range allowing several ranges to be set
|
||||
* When the method is "O"verwrite, then a positive integer index will overwrite that indexed
|
||||
* entry in the print areas list; a negative index value will identify which entry to
|
||||
* overwrite working bacward through the print area to the list, with the last entry as -1.
|
||||
* Specifying an index value of 0, will overwrite <b>all</b> existing print ranges.
|
||||
* When the method is "I"nsert, then a positive index will insert after that indexed entry in
|
||||
* the print areas list, while a negative index will insert before the indexed entry.
|
||||
* Specifying an index value of 0, will always append the new print range at the end of the
|
||||
* list.
|
||||
* Print areas are numbered from 1
|
||||
* @param string $method Determines the method used when setting multiple print areas
|
||||
* Default behaviour, or the "O" method, overwrites existing print area
|
||||
* The "I" method, inserts the new print area before any specified index, or at the end of the list
|
||||
* @throws Exception
|
||||
* @return PHPExcel_Worksheet_PageSetup
|
||||
*/
|
||||
public function setPrintAreaByColumnAndRow($column1, $row1, $column2, $row2, $index = 0, $method = self::SETPRINTRANGE_OVERWRITE)
|
||||
{
|
||||
return $this->setPrintArea(PHPExcel_Cell::stringFromColumnIndex($column1) . $row1 . ':' . PHPExcel_Cell::stringFromColumnIndex($column2) . $row2);
|
||||
return $this->setPrintArea(PHPExcel_Cell::stringFromColumnIndex($column1) . $row1 . ':' . PHPExcel_Cell::stringFromColumnIndex($column2) . $row2, $index, $method);
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Add a new print area to the list of print areas
|
||||
*
|
||||
* @param int $column1 Column 1
|
||||
* @param int $row1 Row 1
|
||||
* @param int $column2 Column 2
|
||||
* @param int $row2 Row 2
|
||||
* @param int $index Identifier for a specific print area range allowing several ranges to be set
|
||||
* A positive index will insert after that indexed entry in the print areas list, while a
|
||||
* negative index will insert before the indexed entry.
|
||||
* Specifying an index value of 0, will always append the new print range at the end of the
|
||||
* list.
|
||||
* Print areas are numbered from 1
|
||||
* @throws Exception
|
||||
* @return PHPExcel_Worksheet_PageSetup
|
||||
*/
|
||||
public function addPrintAreaByColumnAndRow($column1, $row1, $column2, $row2, $index = -1)
|
||||
{
|
||||
return $this->setPrintArea(PHPExcel_Cell::stringFromColumnIndex($column1) . $row1 . ':' . PHPExcel_Cell::stringFromColumnIndex($column2) . $row2, $index, self::SETPRINTRANGE_INSERT);
|
||||
}
|
||||
|
||||
/**
|
||||
* Get first page number
|
||||
*
|
||||
@@ -627,7 +774,7 @@ class PHPExcel_Worksheet_PageSetup
|
||||
public function getFirstPageNumber() {
|
||||
return $this->_firstPageNumber;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Set first page number
|
||||
*
|
||||
@@ -638,7 +785,7 @@ class PHPExcel_Worksheet_PageSetup
|
||||
$this->_firstPageNumber = $value;
|
||||
return $this;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Reset first page number
|
||||
*
|
||||
|
@@ -22,7 +22,7 @@
|
||||
* @package PHPExcel_Worksheet
|
||||
* @copyright Copyright (c) 2006 - 2010 PHPExcel (http://www.codeplex.com/PHPExcel)
|
||||
* @license http://www.gnu.org/licenses/old-licenses/lgpl-2.1.txt LGPL
|
||||
* @version 1.7.3c, 2010-06-01
|
||||
* @version 1.7.4, 2010-08-26
|
||||
*/
|
||||
|
||||
|
||||
|
@@ -22,7 +22,7 @@
|
||||
* @package PHPExcel_Worksheet
|
||||
* @copyright Copyright (c) 2006 - 2010 PHPExcel (http://www.codeplex.com/PHPExcel)
|
||||
* @license http://www.gnu.org/licenses/old-licenses/lgpl-2.1.txt LGPL
|
||||
* @version 1.7.3c, 2010-06-01
|
||||
* @version 1.7.4, 2010-08-26
|
||||
*/
|
||||
|
||||
|
||||
|
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user