[Phpmyadmin-git] [SCM] phpMyAdmin branch, QA_3_3, updated. RELEASE_3_3_7-9-gadaa35a
Dieter Adriaenssens
ruleant at users.sourceforge.net
Sat Sep 11 16:40:13 CEST 2010
The branch, QA_3_3 has been updated
via adaa35a87feeaf079d4178bb471073e0e19a75b6 (commit)
from f5879655d58812b978dc975e5dc8d8497d11a3c3 (commit)
- Log -----------------------------------------------------------------
-----------------------------------------------------------------------
Summary of changes:
ChangeLog | 1 +
libraries/PHPExcel/PHPExcel.php | 4 +-
libraries/PHPExcel/PHPExcel/Autoloader.php | 2 +-
.../PHPExcel/PHPExcel/CachedObjectStorage/APC.php | 45 +++-
.../PHPExcel/CachedObjectStorage/CacheBase.php | 35 ++-
.../PHPExcel/CachedObjectStorage/DiscISAM.php | 28 ++-
.../PHPExcel/CachedObjectStorage/ICache.php | 9 +-
.../PHPExcel/CachedObjectStorage/Memcache.php | 53 +++-
.../PHPExcel/CachedObjectStorage/Memory.php | 2 +-
.../PHPExcel/CachedObjectStorage/MemoryGZip.php | 2 +-
.../CachedObjectStorage/MemorySerialized.php | 2 +-
.../PHPExcel/CachedObjectStorage/PHPTemp.php | 26 ++-
.../PHPExcel/CachedObjectStorage/Wincache.php | 58 +++-
libraries/PHPExcel/PHPExcel/Calculation.php | 105 +++++--
.../PHPExcel/PHPExcel/Calculation/Exception.php | 2 +-
.../PHPExcel/Calculation/ExceptionHandler.php | 2 +-
.../PHPExcel/Calculation/FormulaParser.php | 2 +-
.../PHPExcel/PHPExcel/Calculation/FormulaToken.php | 2 +-
.../PHPExcel/PHPExcel/Calculation/Function.php | 2 +-
.../PHPExcel/PHPExcel/Calculation/Functions.php | 175 ++++++-------
libraries/PHPExcel/PHPExcel/Cell.php | 296 ++++++++++----------
.../PHPExcel/PHPExcel/Cell/AdvancedValueBinder.php | 2 +-
libraries/PHPExcel/PHPExcel/Cell/DataType.php | 2 +-
.../PHPExcel/PHPExcel/Cell/DataValidation.php | 2 +-
.../PHPExcel/PHPExcel/Cell/DefaultValueBinder.php | 2 +-
libraries/PHPExcel/PHPExcel/Cell/Hyperlink.php | 2 +-
libraries/PHPExcel/PHPExcel/Cell/IValueBinder.php | 2 +-
libraries/PHPExcel/PHPExcel/Comment.php | 2 +-
libraries/PHPExcel/PHPExcel/DocumentProperties.php | 93 ++++---
libraries/PHPExcel/PHPExcel/DocumentSecurity.php | 2 +-
libraries/PHPExcel/PHPExcel/HashTable.php | 2 +-
libraries/PHPExcel/PHPExcel/IComparable.php | 2 +-
libraries/PHPExcel/PHPExcel/IOFactory.php | 2 +-
libraries/PHPExcel/PHPExcel/NamedRange.php | 2 +-
libraries/PHPExcel/PHPExcel/Reader/CSV.php | 2 +-
.../PHPExcel/PHPExcel/Reader/DefaultReadFilter.php | 2 +-
.../PHPExcel/PHPExcel/Reader/Excel2003XML.php | 7 +-
libraries/PHPExcel/PHPExcel/Reader/Excel2007.php | 55 +++-
libraries/PHPExcel/PHPExcel/Reader/Excel5.php | 77 +++---
.../PHPExcel/PHPExcel/Reader/Excel5/Escher.php | 2 +-
libraries/PHPExcel/PHPExcel/Reader/IReadFilter.php | 2 +-
libraries/PHPExcel/PHPExcel/Reader/IReader.php | 2 +-
libraries/PHPExcel/PHPExcel/Reader/OOCalc.php | 15 +-
libraries/PHPExcel/PHPExcel/Reader/SYLK.php | 2 +-
libraries/PHPExcel/PHPExcel/Reader/Serialized.php | 2 +-
libraries/PHPExcel/PHPExcel/ReferenceHelper.php | 161 ++++++++---
libraries/PHPExcel/PHPExcel/RichText.php | 2 +-
.../PHPExcel/PHPExcel/RichText/ITextElement.php | 2 +-
libraries/PHPExcel/PHPExcel/RichText/Run.php | 2 +-
.../PHPExcel/PHPExcel/RichText/TextElement.php | 2 +-
libraries/PHPExcel/PHPExcel/Settings.php | 2 +-
libraries/PHPExcel/PHPExcel/Shared/CodePage.php | 2 +-
libraries/PHPExcel/PHPExcel/Shared/Date.php | 2 +-
libraries/PHPExcel/PHPExcel/Shared/Drawing.php | 2 +-
libraries/PHPExcel/PHPExcel/Shared/Escher.php | 2 +-
.../PHPExcel/Shared/Escher/DgContainer.php | 2 +-
.../Shared/Escher/DgContainer/SpgrContainer.php | 2 +-
.../DgContainer/SpgrContainer/SpContainer.php | 2 +-
.../PHPExcel/Shared/Escher/DggContainer.php | 28 ++-
.../Shared/Escher/DggContainer/BstoreContainer.php | 2 +-
.../Escher/DggContainer/BstoreContainer/BSE.php | 2 +-
.../DggContainer/BstoreContainer/BSE/Blip.php | 2 +-
libraries/PHPExcel/PHPExcel/Shared/Excel5.php | 2 +-
libraries/PHPExcel/PHPExcel/Shared/File.php | 21 +-
libraries/PHPExcel/PHPExcel/Shared/Font.php | 2 +-
.../PHPExcel/Shared/OLE/ChainedBlockStream.php | 2 +-
libraries/PHPExcel/PHPExcel/Shared/OLERead.php | 2 +-
.../PHPExcel/PHPExcel/Shared/PasswordHasher.php | 2 +-
libraries/PHPExcel/PHPExcel/Shared/String.php | 4 +-
libraries/PHPExcel/PHPExcel/Shared/XMLWriter.php | 11 +-
.../PHPExcel/PHPExcel/Shared/ZipStreamWrapper.php | 2 +-
.../PHPExcel/Shared/trend/bestFitClass.php | 2 +-
.../Shared/trend/exponentialBestFitClass.php | 2 +-
.../PHPExcel/Shared/trend/linearBestFitClass.php | 2 +-
.../Shared/trend/logarithmicBestFitClass.php | 2 +-
.../Shared/trend/polynomialBestFitClass.php | 2 +-
.../PHPExcel/Shared/trend/powerBestFitClass.php | 2 +-
libraries/PHPExcel/PHPExcel/Style.php | 4 +-
libraries/PHPExcel/PHPExcel/Style/Alignment.php | 4 +-
libraries/PHPExcel/PHPExcel/Style/Border.php | 4 +-
libraries/PHPExcel/PHPExcel/Style/Borders.php | 4 +-
libraries/PHPExcel/PHPExcel/Style/Color.php | 4 +-
libraries/PHPExcel/PHPExcel/Style/Conditional.php | 2 +-
libraries/PHPExcel/PHPExcel/Style/Fill.php | 4 +-
libraries/PHPExcel/PHPExcel/Style/Font.php | 4 +-
libraries/PHPExcel/PHPExcel/Style/NumberFormat.php | 4 +-
libraries/PHPExcel/PHPExcel/Style/Protection.php | 2 +-
libraries/PHPExcel/PHPExcel/Worksheet.php | 15 +-
.../PHPExcel/PHPExcel/Worksheet/BaseDrawing.php | 2 +-
.../PHPExcel/PHPExcel/Worksheet/CellIterator.php | 2 +-
.../PHPExcel/Worksheet/ColumnDimension.php | 2 +-
libraries/PHPExcel/PHPExcel/Worksheet/Drawing.php | 2 +-
.../PHPExcel/PHPExcel/Worksheet/Drawing/Shadow.php | 2 +-
.../PHPExcel/PHPExcel/Worksheet/HeaderFooter.php | 2 +-
.../PHPExcel/Worksheet/HeaderFooterDrawing.php | 2 +-
.../PHPExcel/PHPExcel/Worksheet/MemoryDrawing.php | 2 +-
.../PHPExcel/PHPExcel/Worksheet/PageMargins.php | 2 +-
.../PHPExcel/PHPExcel/Worksheet/PageSetup.php | 213 ++++++++++++---
.../PHPExcel/PHPExcel/Worksheet/Protection.php | 2 +-
libraries/PHPExcel/PHPExcel/Worksheet/Row.php | 2 +-
.../PHPExcel/PHPExcel/Worksheet/RowDimension.php | 2 +-
.../PHPExcel/PHPExcel/Worksheet/RowIterator.php | 2 +-
.../PHPExcel/PHPExcel/Worksheet/SheetView.php | 2 +-
libraries/PHPExcel/PHPExcel/WorksheetIterator.php | 2 +-
libraries/PHPExcel/PHPExcel/Writer/CSV.php | 5 +-
libraries/PHPExcel/PHPExcel/Writer/Excel2007.php | 5 +-
.../PHPExcel/Writer/Excel2007/Comments.php | 2 +-
.../PHPExcel/Writer/Excel2007/ContentTypes.php | 2 +-
.../PHPExcel/Writer/Excel2007/DocProps.php | 2 +-
.../PHPExcel/PHPExcel/Writer/Excel2007/Drawing.php | 2 +-
.../PHPExcel/PHPExcel/Writer/Excel2007/Rels.php | 2 +-
.../PHPExcel/Writer/Excel2007/StringTable.php | 2 +-
.../PHPExcel/PHPExcel/Writer/Excel2007/Style.php | 2 +-
.../PHPExcel/PHPExcel/Writer/Excel2007/Theme.php | 2 +-
.../PHPExcel/Writer/Excel2007/Workbook.php | 2 +-
.../PHPExcel/Writer/Excel2007/Worksheet.php | 15 +-
.../PHPExcel/Writer/Excel2007/WriterPart.php | 2 +-
libraries/PHPExcel/PHPExcel/Writer/Excel5.php | 285 ++++++++++++++++++-
.../PHPExcel/PHPExcel/Writer/Excel5/BIFFwriter.php | 2 +-
.../PHPExcel/PHPExcel/Writer/Excel5/Escher.php | 9 +-
libraries/PHPExcel/PHPExcel/Writer/Excel5/Font.php | 2 +-
.../PHPExcel/PHPExcel/Writer/Excel5/Parser.php | 20 ++-
.../PHPExcel/PHPExcel/Writer/Excel5/Workbook.php | 172 +++---------
.../PHPExcel/PHPExcel/Writer/Excel5/Worksheet.php | 211 ++++++---------
libraries/PHPExcel/PHPExcel/Writer/Excel5/Xf.php | 2 +-
libraries/PHPExcel/PHPExcel/Writer/HTML.php | 11 +-
libraries/PHPExcel/PHPExcel/Writer/IWriter.php | 2 +-
libraries/PHPExcel/PHPExcel/Writer/PDF.php | 2 +-
libraries/PHPExcel/PHPExcel/Writer/Serialized.php | 6 +-
129 files changed, 1563 insertions(+), 917 deletions(-)
diff --git a/ChangeLog b/ChangeLog
index 42030ef..eeebed1 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -7,6 +7,7 @@ $HeadURL: https://phpmyadmin.svn.sourceforge.net/svnroot/phpmyadmin/trunk/phpMyA
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
diff --git a/libraries/PHPExcel/PHPExcel.php b/libraries/PHPExcel/PHPExcel.php
index 8b9c71f..c54d421 100644
--- a/libraries/PHPExcel/PHPExcel.php
+++ b/libraries/PHPExcel/PHPExcel.php
@@ -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 );
}
diff --git a/libraries/PHPExcel/PHPExcel/Autoloader.php b/libraries/PHPExcel/PHPExcel/Autoloader.php
index 3821d74..e66ce60 100644
--- a/libraries/PHPExcel/PHPExcel/Autoloader.php
+++ b/libraries/PHPExcel/PHPExcel/Autoloader.php
@@ -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
diff --git a/libraries/PHPExcel/PHPExcel/CachedObjectStorage/APC.php b/libraries/PHPExcel/PHPExcel/CachedObjectStorage/APC.php
index 62e3a14..dae46c2 100644
--- a/libraries/PHPExcel/PHPExcel/CachedObjectStorage/APC.php
+++ b/libraries/PHPExcel/PHPExcel/CachedObjectStorage/APC.php
@@ -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);
diff --git a/libraries/PHPExcel/PHPExcel/CachedObjectStorage/CacheBase.php b/libraries/PHPExcel/PHPExcel/CachedObjectStorage/CacheBase.php
index 9871d90..208ed02 100644
--- a/libraries/PHPExcel/PHPExcel/CachedObjectStorage/CacheBase.php
+++ b/libraries/PHPExcel/PHPExcel/CachedObjectStorage/CacheBase.php
@@ -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()
+
}
diff --git a/libraries/PHPExcel/PHPExcel/CachedObjectStorage/DiscISAM.php b/libraries/PHPExcel/PHPExcel/CachedObjectStorage/DiscISAM.php
index e685607..dff52fa 100644
--- a/libraries/PHPExcel/PHPExcel/CachedObjectStorage/DiscISAM.php
+++ b/libraries/PHPExcel/PHPExcel/CachedObjectStorage/DiscISAM.php
@@ -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()
diff --git a/libraries/PHPExcel/PHPExcel/CachedObjectStorage/ICache.php b/libraries/PHPExcel/PHPExcel/CachedObjectStorage/ICache.php
index f3282aa..4731b8e 100644
--- a/libraries/PHPExcel/PHPExcel/CachedObjectStorage/ICache.php
+++ b/libraries/PHPExcel/PHPExcel/CachedObjectStorage/ICache.php
@@ -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);
+
}
diff --git a/libraries/PHPExcel/PHPExcel/CachedObjectStorage/Memcache.php b/libraries/PHPExcel/PHPExcel/CachedObjectStorage/Memcache.php
index f1fc43c..74df8e8 100644
--- a/libraries/PHPExcel/PHPExcel/CachedObjectStorage/Memcache.php
+++ b/libraries/PHPExcel/PHPExcel/CachedObjectStorage/Memcache.php
@@ -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');
}
diff --git a/libraries/PHPExcel/PHPExcel/CachedObjectStorage/Memory.php b/libraries/PHPExcel/PHPExcel/CachedObjectStorage/Memory.php
index be0fade..4b59b91 100644
--- a/libraries/PHPExcel/PHPExcel/CachedObjectStorage/Memory.php
+++ b/libraries/PHPExcel/PHPExcel/CachedObjectStorage/Memory.php
@@ -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
*/
diff --git a/libraries/PHPExcel/PHPExcel/CachedObjectStorage/MemoryGZip.php b/libraries/PHPExcel/PHPExcel/CachedObjectStorage/MemoryGZip.php
index c281389..394faf2 100644
--- a/libraries/PHPExcel/PHPExcel/CachedObjectStorage/MemoryGZip.php
+++ b/libraries/PHPExcel/PHPExcel/CachedObjectStorage/MemoryGZip.php
@@ -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
*/
diff --git a/libraries/PHPExcel/PHPExcel/CachedObjectStorage/MemorySerialized.php b/libraries/PHPExcel/PHPExcel/CachedObjectStorage/MemorySerialized.php
index 9c29ea2..0b5b997 100644
--- a/libraries/PHPExcel/PHPExcel/CachedObjectStorage/MemorySerialized.php
+++ b/libraries/PHPExcel/PHPExcel/CachedObjectStorage/MemorySerialized.php
@@ -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
*/
diff --git a/libraries/PHPExcel/PHPExcel/CachedObjectStorage/PHPTemp.php b/libraries/PHPExcel/PHPExcel/CachedObjectStorage/PHPTemp.php
index 98cd952..54810d8 100644
--- a/libraries/PHPExcel/PHPExcel/CachedObjectStorage/PHPTemp.php
+++ b/libraries/PHPExcel/PHPExcel/CachedObjectStorage/PHPTemp.php
@@ -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()
diff --git a/libraries/PHPExcel/PHPExcel/CachedObjectStorage/Wincache.php b/libraries/PHPExcel/PHPExcel/CachedObjectStorage/Wincache.php
index d759d7c..aa075be 100644
--- a/libraries/PHPExcel/PHPExcel/CachedObjectStorage/Wincache.php
+++ b/libraries/PHPExcel/PHPExcel/CachedObjectStorage/Wincache.php
@@ -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);
diff --git a/libraries/PHPExcel/PHPExcel/Calculation.php b/libraries/PHPExcel/PHPExcel/Calculation.php
index 6e8499e..e32891a 100644
--- a/libraries/PHPExcel/PHPExcel/Calculation.php
+++ b/libraries/PHPExcel/PHPExcel/Calculation.php
@@ -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');
diff --git a/libraries/PHPExcel/PHPExcel/Calculation/Exception.php b/libraries/PHPExcel/PHPExcel/Calculation/Exception.php
index 8e77b9d..b94f3f4 100644
--- a/libraries/PHPExcel/PHPExcel/Calculation/Exception.php
+++ b/libraries/PHPExcel/PHPExcel/Calculation/Exception.php
@@ -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
*/
diff --git a/libraries/PHPExcel/PHPExcel/Calculation/ExceptionHandler.php b/libraries/PHPExcel/PHPExcel/Calculation/ExceptionHandler.php
index 9956167..7050260 100644
--- a/libraries/PHPExcel/PHPExcel/Calculation/ExceptionHandler.php
+++ b/libraries/PHPExcel/PHPExcel/Calculation/ExceptionHandler.php
@@ -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
*/
/**
diff --git a/libraries/PHPExcel/PHPExcel/Calculation/FormulaParser.php b/libraries/PHPExcel/PHPExcel/Calculation/FormulaParser.php
index 8fcde41..271aa75 100644
--- a/libraries/PHPExcel/PHPExcel/Calculation/FormulaParser.php
+++ b/libraries/PHPExcel/PHPExcel/Calculation/FormulaParser.php
@@ -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
*/
diff --git a/libraries/PHPExcel/PHPExcel/Calculation/FormulaToken.php b/libraries/PHPExcel/PHPExcel/Calculation/FormulaToken.php
index 69d7f42..8c1396e 100644
--- a/libraries/PHPExcel/PHPExcel/Calculation/FormulaToken.php
+++ b/libraries/PHPExcel/PHPExcel/Calculation/FormulaToken.php
@@ -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
*/
diff --git a/libraries/PHPExcel/PHPExcel/Calculation/Function.php b/libraries/PHPExcel/PHPExcel/Calculation/Function.php
index 783e533..81dfc99 100644
--- a/libraries/PHPExcel/PHPExcel/Calculation/Function.php
+++ b/libraries/PHPExcel/PHPExcel/Calculation/Function.php
@@ -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
*/
diff --git a/libraries/PHPExcel/PHPExcel/Calculation/Functions.php b/libraries/PHPExcel/PHPExcel/Calculation/Functions.php
index 8ce3cfd..805f483 100644
--- a/libraries/PHPExcel/PHPExcel/Calculation/Functions.php
+++ b/libraries/PHPExcel/PHPExcel/Calculation/Functions.php
@@ -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()
diff --git a/libraries/PHPExcel/PHPExcel/Cell.php b/libraries/PHPExcel/PHPExcel/Cell.php
index f8ebf86..b805b8d 100644
--- a/libraries/PHPExcel/PHPExcel/Cell.php
+++ b/libraries/PHPExcel/PHPExcel/Cell.php
@@ -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);
-
- // 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);
+ list($rangeStart,$rangeEnd) = PHPExcel_Cell::rangeBoundaries($pRange);
- // 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;
+ }
+
}
+
diff --git a/libraries/PHPExcel/PHPExcel/Cell/AdvancedValueBinder.php b/libraries/PHPExcel/PHPExcel/Cell/AdvancedValueBinder.php
index 7e305c5..5126811 100644
--- a/libraries/PHPExcel/PHPExcel/Cell/AdvancedValueBinder.php
+++ b/libraries/PHPExcel/PHPExcel/Cell/AdvancedValueBinder.php
@@ -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
*/
diff --git a/libraries/PHPExcel/PHPExcel/Cell/DataType.php b/libraries/PHPExcel/PHPExcel/Cell/DataType.php
index 1496d83..d542cab 100644
--- a/libraries/PHPExcel/PHPExcel/Cell/DataType.php
+++ b/libraries/PHPExcel/PHPExcel/Cell/DataType.php
@@ -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
*/
diff --git a/libraries/PHPExcel/PHPExcel/Cell/DataValidation.php b/libraries/PHPExcel/PHPExcel/Cell/DataValidation.php
index 2c3913c..db1b497 100644
--- a/libraries/PHPExcel/PHPExcel/Cell/DataValidation.php
+++ b/libraries/PHPExcel/PHPExcel/Cell/DataValidation.php
@@ -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
*/
diff --git a/libraries/PHPExcel/PHPExcel/Cell/DefaultValueBinder.php b/libraries/PHPExcel/PHPExcel/Cell/DefaultValueBinder.php
index e49449f..ad5ae46 100644
--- a/libraries/PHPExcel/PHPExcel/Cell/DefaultValueBinder.php
+++ b/libraries/PHPExcel/PHPExcel/Cell/DefaultValueBinder.php
@@ -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
*/
diff --git a/libraries/PHPExcel/PHPExcel/Cell/Hyperlink.php b/libraries/PHPExcel/PHPExcel/Cell/Hyperlink.php
index eab9297..994cef5 100644
--- a/libraries/PHPExcel/PHPExcel/Cell/Hyperlink.php
+++ b/libraries/PHPExcel/PHPExcel/Cell/Hyperlink.php
@@ -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
*/
diff --git a/libraries/PHPExcel/PHPExcel/Cell/IValueBinder.php b/libraries/PHPExcel/PHPExcel/Cell/IValueBinder.php
index 4bd1ef2..c14d630 100644
--- a/libraries/PHPExcel/PHPExcel/Cell/IValueBinder.php
+++ b/libraries/PHPExcel/PHPExcel/Cell/IValueBinder.php
@@ -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
*/
diff --git a/libraries/PHPExcel/PHPExcel/Comment.php b/libraries/PHPExcel/PHPExcel/Comment.php
index 735e78c..432cfe1 100644
--- a/libraries/PHPExcel/PHPExcel/Comment.php
+++ b/libraries/PHPExcel/PHPExcel/Comment.php
@@ -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
*/
diff --git a/libraries/PHPExcel/PHPExcel/DocumentProperties.php b/libraries/PHPExcel/PHPExcel/DocumentProperties.php
index 64b0c2a..d6d928e 100644
--- a/libraries/PHPExcel/PHPExcel/DocumentProperties.php
+++ b/libraries/PHPExcel/PHPExcel/DocumentProperties.php
@@ -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.
*/
diff --git a/libraries/PHPExcel/PHPExcel/DocumentSecurity.php b/libraries/PHPExcel/PHPExcel/DocumentSecurity.php
index 1522189..a6de9ee 100644
--- a/libraries/PHPExcel/PHPExcel/DocumentSecurity.php
+++ b/libraries/PHPExcel/PHPExcel/DocumentSecurity.php
@@ -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
*/
diff --git a/libraries/PHPExcel/PHPExcel/HashTable.php b/libraries/PHPExcel/PHPExcel/HashTable.php
index bd526b6..2191672 100644
--- a/libraries/PHPExcel/PHPExcel/HashTable.php
+++ b/libraries/PHPExcel/PHPExcel/HashTable.php
@@ -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
*/
diff --git a/libraries/PHPExcel/PHPExcel/IComparable.php b/libraries/PHPExcel/PHPExcel/IComparable.php
index 3c175d1..0a51b06 100644
--- a/libraries/PHPExcel/PHPExcel/IComparable.php
+++ b/libraries/PHPExcel/PHPExcel/IComparable.php
@@ -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
*/
diff --git a/libraries/PHPExcel/PHPExcel/IOFactory.php b/libraries/PHPExcel/PHPExcel/IOFactory.php
index 21fd23c..a3650be 100644
--- a/libraries/PHPExcel/PHPExcel/IOFactory.php
+++ b/libraries/PHPExcel/PHPExcel/IOFactory.php
@@ -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
*/
diff --git a/libraries/PHPExcel/PHPExcel/NamedRange.php b/libraries/PHPExcel/PHPExcel/NamedRange.php
index 1aa5236..992c2fa 100644
--- a/libraries/PHPExcel/PHPExcel/NamedRange.php
+++ b/libraries/PHPExcel/PHPExcel/NamedRange.php
@@ -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
*/
diff --git a/libraries/PHPExcel/PHPExcel/Reader/CSV.php b/libraries/PHPExcel/PHPExcel/Reader/CSV.php
index 5fa83bd..086c948 100644
--- a/libraries/PHPExcel/PHPExcel/Reader/CSV.php
+++ b/libraries/PHPExcel/PHPExcel/Reader/CSV.php
@@ -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
*/
diff --git a/libraries/PHPExcel/PHPExcel/Reader/DefaultReadFilter.php b/libraries/PHPExcel/PHPExcel/Reader/DefaultReadFilter.php
index c6620e7..e83ac9a 100644
--- a/libraries/PHPExcel/PHPExcel/Reader/DefaultReadFilter.php
+++ b/libraries/PHPExcel/PHPExcel/Reader/DefaultReadFilter.php
@@ -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
*/
diff --git a/libraries/PHPExcel/PHPExcel/Reader/Excel2003XML.php b/libraries/PHPExcel/PHPExcel/Reader/Excel2003XML.php
index 96e3436..99f00ed 100644
--- a/libraries/PHPExcel/PHPExcel/Reader/Excel2003XML.php
+++ b/libraries/PHPExcel/PHPExcel/Reader/Excel2003XML.php
@@ -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)) {
diff --git a/libraries/PHPExcel/PHPExcel/Reader/Excel2007.php b/libraries/PHPExcel/PHPExcel/Reader/Excel2007.php
index 031dee5..c4e3e41 100644
--- a/libraries/PHPExcel/PHPExcel/Reader/Excel2007.php
+++ b/libraries/PHPExcel/PHPExcel/Reader/Excel2007.php
@@ -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();
+ for
each($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:
diff --git a/libraries/PHPExcel/PHPExcel/Reader/Excel5.php b/libraries/PHPExcel/PHPExcel/Reader/Excel5.php
index a4f20e7..5c71ee8 100644
--- a/libraries/PHPExcel/PHPExcel/Reader/Excel5.php
+++ b/libraries/PHPExcel/PHPExcel/Reader/Excel5.php
@@ -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;
diff --git a/libraries/PHPExcel/PHPExcel/Reader/Excel5/Escher.php b/libraries/PHPExcel/PHPExcel/Reader/Excel5/Escher.php
index 0418dd7..b7c67e9 100644
--- a/libraries/PHPExcel/PHPExcel/Reader/Excel5/Escher.php
+++ b/libraries/PHPExcel/PHPExcel/Reader/Excel5/Escher.php
@@ -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
*/
/**
diff --git a/libraries/PHPExcel/PHPExcel/Reader/IReadFilter.php b/libraries/PHPExcel/PHPExcel/Reader/IReadFilter.php
index c397d56..00fa2e8 100644
--- a/libraries/PHPExcel/PHPExcel/Reader/IReadFilter.php
+++ b/libraries/PHPExcel/PHPExcel/Reader/IReadFilter.php
@@ -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
*/
diff --git a/libraries/PHPExcel/PHPExcel/Reader/IReader.php b/libraries/PHPExcel/PHPExcel/Reader/IReader.php
index ef5beac..e1cdc43 100644
--- a/libraries/PHPExcel/PHPExcel/Reader/IReader.php
+++ b/libraries/PHPExcel/PHPExcel/Reader/IReader.php
@@ -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
*/
diff --git a/libraries/PHPExcel/PHPExcel/Reader/OOCalc.php b/libraries/PHPExcel/PHPExcel/Reader/OOCalc.php
index 8a1407a..a1ddf91 100644
--- a/libraries/PHPExcel/PHPExcel/Reader/OOCalc.php
+++ b/libraries/PHPExcel/PHPExcel/Reader/OOCalc.php
@@ -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);
diff --git a/libraries/PHPExcel/PHPExcel/Reader/SYLK.php b/libraries/PHPExcel/PHPExcel/Reader/SYLK.php
index ec8a4d4..790aa2f 100644
--- a/libraries/PHPExcel/PHPExcel/Reader/SYLK.php
+++ b/libraries/PHPExcel/PHPExcel/Reader/SYLK.php
@@ -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
*/
diff --git a/libraries/PHPExcel/PHPExcel/Reader/Serialized.php b/libraries/PHPExcel/PHPExcel/Reader/Serialized.php
index 88f2892..04b14f2 100644
--- a/libraries/PHPExcel/PHPExcel/Reader/Serialized.php
+++ b/libraries/PHPExcel/PHPExcel/Reader/Serialized.php
@@ -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
*/
diff --git a/libraries/PHPExcel/PHPExcel/ReferenceHelper.php b/libraries/PHPExcel/PHPExcel/ReferenceHelper.php
index cb9673c..7a37ed0 100644
--- a/libraries/PHPExcel/PHPExcel/ReferenceHelper.php
+++ b/libraries/PHPExcel/PHPExcel/ReferenceHelper.php
@@ -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);
diff --git a/libraries/PHPExcel/PHPExcel/RichText.php b/libraries/PHPExcel/PHPExcel/RichText.php
index c938c62..588e643 100644
--- a/libraries/PHPExcel/PHPExcel/RichText.php
+++ b/libraries/PHPExcel/PHPExcel/RichText.php
@@ -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
*/
diff --git a/libraries/PHPExcel/PHPExcel/RichText/ITextElement.php b/libraries/PHPExcel/PHPExcel/RichText/ITextElement.php
index 613028f..3f1aa7a 100644
--- a/libraries/PHPExcel/PHPExcel/RichText/ITextElement.php
+++ b/libraries/PHPExcel/PHPExcel/RichText/ITextElement.php
@@ -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
*/
diff --git a/libraries/PHPExcel/PHPExcel/RichText/Run.php b/libraries/PHPExcel/PHPExcel/RichText/Run.php
index 209af21..aac7676 100644
--- a/libraries/PHPExcel/PHPExcel/RichText/Run.php
+++ b/libraries/PHPExcel/PHPExcel/RichText/Run.php
@@ -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
*/
diff --git a/libraries/PHPExcel/PHPExcel/RichText/TextElement.php b/libraries/PHPExcel/PHPExcel/RichText/TextElement.php
index 3a24482..f5ce8e0 100644
--- a/libraries/PHPExcel/PHPExcel/RichText/TextElement.php
+++ b/libraries/PHPExcel/PHPExcel/RichText/TextElement.php
@@ -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
*/
diff --git a/libraries/PHPExcel/PHPExcel/Settings.php b/libraries/PHPExcel/PHPExcel/Settings.php
index 7a1d57e..52d7880 100644
--- a/libraries/PHPExcel/PHPExcel/Settings.php
+++ b/libraries/PHPExcel/PHPExcel/Settings.php
@@ -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 */
diff --git a/libraries/PHPExcel/PHPExcel/Shared/CodePage.php b/libraries/PHPExcel/PHPExcel/Shared/CodePage.php
index 10f82e4..f209838 100644
--- a/libraries/PHPExcel/PHPExcel/Shared/CodePage.php
+++ b/libraries/PHPExcel/PHPExcel/Shared/CodePage.php
@@ -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
*/
diff --git a/libraries/PHPExcel/PHPExcel/Shared/Date.php b/libraries/PHPExcel/PHPExcel/Shared/Date.php
index c45c23f..334e8df 100644
--- a/libraries/PHPExcel/PHPExcel/Shared/Date.php
+++ b/libraries/PHPExcel/PHPExcel/Shared/Date.php
@@ -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
*/
diff --git a/libraries/PHPExcel/PHPExcel/Shared/Drawing.php b/libraries/PHPExcel/PHPExcel/Shared/Drawing.php
index a89c94e..a24f963 100644
--- a/libraries/PHPExcel/PHPExcel/Shared/Drawing.php
+++ b/libraries/PHPExcel/PHPExcel/Shared/Drawing.php
@@ -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
*/
diff --git a/libraries/PHPExcel/PHPExcel/Shared/Escher.php b/libraries/PHPExcel/PHPExcel/Shared/Escher.php
index c230d99..11c19b2 100644
--- a/libraries/PHPExcel/PHPExcel/Shared/Escher.php
+++ b/libraries/PHPExcel/PHPExcel/Shared/Escher.php
@@ -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
*/
/**
diff --git a/libraries/PHPExcel/PHPExcel/Shared/Escher/DgContainer.php b/libraries/PHPExcel/PHPExcel/Shared/Escher/DgContainer.php
index c78485b..6cbd2f0 100644
--- a/libraries/PHPExcel/PHPExcel/Shared/Escher/DgContainer.php
+++ b/libraries/PHPExcel/PHPExcel/Shared/Escher/DgContainer.php
@@ -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
*/
/**
diff --git a/libraries/PHPExcel/PHPExcel/Shared/Escher/DgContainer/SpgrContainer.php b/libraries/PHPExcel/PHPExcel/Shared/Escher/DgContainer/SpgrContainer.php
index c659fd5..919cf1a 100644
--- a/libraries/PHPExcel/PHPExcel/Shared/Escher/DgContainer/SpgrContainer.php
+++ b/libraries/PHPExcel/PHPExcel/Shared/Escher/DgContainer/SpgrContainer.php
@@ -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
*/
/**
diff --git a/libraries/PHPExcel/PHPExcel/Shared/Escher/DgContainer/SpgrContainer/SpContainer.php b/libraries/PHPExcel/PHPExcel/Shared/Escher/DgContainer/SpgrContainer/SpContainer.php
index 83e3193..454b7ee 100644
--- a/libraries/PHPExcel/PHPExcel/Shared/Escher/DgContainer/SpgrContainer/SpContainer.php
+++ b/libraries/PHPExcel/PHPExcel/Shared/Escher/DgContainer/SpgrContainer/SpContainer.php
@@ -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
*/
/**
diff --git a/libraries/PHPExcel/PHPExcel/Shared/Escher/DggContainer.php b/libraries/PHPExcel/PHPExcel/Shared/Escher/DggContainer.php
index 59d34cf..61eab5d 100644
--- a/libraries/PHPExcel/PHPExcel/Shared/Escher/DggContainer.php
+++ b/libraries/PHPExcel/PHPExcel/Shared/Escher/DggContainer.php
@@ -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
*/
/**
@@ -70,6 +70,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)
*
* @return int
@@ -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;
+ }
}
diff --git a/libraries/PHPExcel/PHPExcel/Shared/Escher/DggContainer/BstoreContainer.php b/libraries/PHPExcel/PHPExcel/Shared/Escher/DggContainer/BstoreContainer.php
index 9292f2d..6040fb2 100644
--- a/libraries/PHPExcel/PHPExcel/Shared/Escher/DggContainer/BstoreContainer.php
+++ b/libraries/PHPExcel/PHPExcel/Shared/Escher/DggContainer/BstoreContainer.php
@@ -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
*/
/**
diff --git a/libraries/PHPExcel/PHPExcel/Shared/Escher/DggContainer/BstoreContainer/BSE.php b/libraries/PHPExcel/PHPExcel/Shared/Escher/DggContainer/BstoreContainer/BSE.php
index 820e703..00ccb6d 100644
--- a/libraries/PHPExcel/PHPExcel/Shared/Escher/DggContainer/BstoreContainer/BSE.php
+++ b/libraries/PHPExcel/PHPExcel/Shared/Escher/DggContainer/BstoreContainer/BSE.php
@@ -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
*/
/**
diff --git a/libraries/PHPExcel/PHPExcel/Shared/Escher/DggContainer/BstoreContainer/BSE/Blip.php b/libraries/PHPExcel/PHPExcel/Shared/Escher/DggContainer/BstoreContainer/BSE/Blip.php
index 35003dd..7f13632 100644
--- a/libraries/PHPExcel/PHPExcel/Shared/Escher/DggContainer/BstoreContainer/BSE/Blip.php
+++ b/libraries/PHPExcel/PHPExcel/Shared/Escher/DggContainer/BstoreContainer/BSE/Blip.php
@@ -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
*/
/**
diff --git a/libraries/PHPExcel/PHPExcel/Shared/Excel5.php b/libraries/PHPExcel/PHPExcel/Shared/Excel5.php
index 05af633..6469c52 100644
--- a/libraries/PHPExcel/PHPExcel/Shared/Excel5.php
+++ b/libraries/PHPExcel/PHPExcel/Shared/Excel5.php
@@ -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
*/
/**
diff --git a/libraries/PHPExcel/PHPExcel/Shared/File.php b/libraries/PHPExcel/PHPExcel/Shared/File.php
index dc2c3fd..23169ce 100644
--- a/libraries/PHPExcel/PHPExcel/Shared/File.php
+++ b/libraries/PHPExcel/PHPExcel/Shared/File.php
@@ -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());
}
diff --git a/libraries/PHPExcel/PHPExcel/Shared/Font.php b/libraries/PHPExcel/PHPExcel/Shared/Font.php
index 1759e87..24d78be 100644
--- a/libraries/PHPExcel/PHPExcel/Shared/Font.php
+++ b/libraries/PHPExcel/PHPExcel/Shared/Font.php
@@ -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
*/
diff --git a/libraries/PHPExcel/PHPExcel/Shared/OLE/ChainedBlockStream.php b/libraries/PHPExcel/PHPExcel/Shared/OLE/ChainedBlockStream.php
index 7b6f845..af757d0 100644
--- a/libraries/PHPExcel/PHPExcel/Shared/OLE/ChainedBlockStream.php
+++ b/libraries/PHPExcel/PHPExcel/Shared/OLE/ChainedBlockStream.php
@@ -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
*/
/**
diff --git a/libraries/PHPExcel/PHPExcel/Shared/OLERead.php b/libraries/PHPExcel/PHPExcel/Shared/OLERead.php
index b747e13..6aebbf0 100644
--- a/libraries/PHPExcel/PHPExcel/Shared/OLERead.php
+++ b/libraries/PHPExcel/PHPExcel/Shared/OLERead.php
@@ -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));
diff --git a/libraries/PHPExcel/PHPExcel/Shared/PasswordHasher.php b/libraries/PHPExcel/PHPExcel/Shared/PasswordHasher.php
index 6b7b312..7fb4934 100644
--- a/libraries/PHPExcel/PHPExcel/Shared/PasswordHasher.php
+++ b/libraries/PHPExcel/PHPExcel/Shared/PasswordHasher.php
@@ -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
*/
diff --git a/libraries/PHPExcel/PHPExcel/Shared/String.php b/libraries/PHPExcel/PHPExcel/Shared/String.php
index 32766df..c033b9a 100644
--- a/libraries/PHPExcel/PHPExcel/Shared/String.php
+++ b/libraries/PHPExcel/PHPExcel/Shared/String.php
@@ -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});
diff --git a/libraries/PHPExcel/PHPExcel/Shared/XMLWriter.php b/libraries/PHPExcel/PHPExcel/Shared/XMLWriter.php
index 223d3dd..8514847 100644
--- a/libraries/PHPExcel/PHPExcel/Shared/XMLWriter.php
+++ b/libraries/PHPExcel/PHPExcel/Shared/XMLWriter.php
@@ -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);
+ }
}
/**
diff --git a/libraries/PHPExcel/PHPExcel/Shared/ZipStreamWrapper.php b/libraries/PHPExcel/PHPExcel/Shared/ZipStreamWrapper.php
index 77661c6..b79bfc8 100644
--- a/libraries/PHPExcel/PHPExcel/Shared/ZipStreamWrapper.php
+++ b/libraries/PHPExcel/PHPExcel/Shared/ZipStreamWrapper.php
@@ -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
*/
diff --git a/libraries/PHPExcel/PHPExcel/Shared/trend/bestFitClass.php b/libraries/PHPExcel/PHPExcel/Shared/trend/bestFitClass.php
index 27fecd5..28fe725 100644
--- a/libraries/PHPExcel/PHPExcel/Shared/trend/bestFitClass.php
+++ b/libraries/PHPExcel/PHPExcel/Shared/trend/bestFitClass.php
@@ -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
*/
diff --git a/libraries/PHPExcel/PHPExcel/Shared/trend/exponentialBestFitClass.php b/libraries/PHPExcel/PHPExcel/Shared/trend/exponentialBestFitClass.php
index a0717ea..0ff98cc 100644
--- a/libraries/PHPExcel/PHPExcel/Shared/trend/exponentialBestFitClass.php
+++ b/libraries/PHPExcel/PHPExcel/Shared/trend/exponentialBestFitClass.php
@@ -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
*/
diff --git a/libraries/PHPExcel/PHPExcel/Shared/trend/linearBestFitClass.php b/libraries/PHPExcel/PHPExcel/Shared/trend/linearBestFitClass.php
index 99f358c..71219a0 100644
--- a/libraries/PHPExcel/PHPExcel/Shared/trend/linearBestFitClass.php
+++ b/libraries/PHPExcel/PHPExcel/Shared/trend/linearBestFitClass.php
@@ -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
*/
diff --git a/libraries/PHPExcel/PHPExcel/Shared/trend/logarithmicBestFitClass.php b/libraries/PHPExcel/PHPExcel/Shared/trend/logarithmicBestFitClass.php
index a59c879..03c7dc3 100644
--- a/libraries/PHPExcel/PHPExcel/Shared/trend/logarithmicBestFitClass.php
+++ b/libraries/PHPExcel/PHPExcel/Shared/trend/logarithmicBestFitClass.php
@@ -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
*/
diff --git a/libraries/PHPExcel/PHPExcel/Shared/trend/polynomialBestFitClass.php b/libraries/PHPExcel/PHPExcel/Shared/trend/polynomialBestFitClass.php
index 02ff0a5..6947c11 100644
--- a/libraries/PHPExcel/PHPExcel/Shared/trend/polynomialBestFitClass.php
+++ b/libraries/PHPExcel/PHPExcel/Shared/trend/polynomialBestFitClass.php
@@ -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
*/
diff --git a/libraries/PHPExcel/PHPExcel/Shared/trend/powerBestFitClass.php b/libraries/PHPExcel/PHPExcel/Shared/trend/powerBestFitClass.php
index 9328fcb..6d2281c 100644
--- a/libraries/PHPExcel/PHPExcel/Shared/trend/powerBestFitClass.php
+++ b/libraries/PHPExcel/PHPExcel/Shared/trend/powerBestFitClass.php
@@ -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
*/
diff --git a/libraries/PHPExcel/PHPExcel/Style.php b/libraries/PHPExcel/PHPExcel/Style.php
index d0cbcb0..3e84f9f 100644
--- a/libraries/PHPExcel/PHPExcel/Style.php
+++ b/libraries/PHPExcel/PHPExcel/Style.php
@@ -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;
diff --git a/libraries/PHPExcel/PHPExcel/Style/Alignment.php b/libraries/PHPExcel/PHPExcel/Style/Alignment.php
index 412c603..15b6c87 100644
--- a/libraries/PHPExcel/PHPExcel/Style/Alignment.php
+++ b/libraries/PHPExcel/PHPExcel/Style/Alignment.php
@@ -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;
diff --git a/libraries/PHPExcel/PHPExcel/Style/Border.php b/libraries/PHPExcel/PHPExcel/Style/Border.php
index 1af31d6..166ccb2 100644
--- a/libraries/PHPExcel/PHPExcel/Style/Border.php
+++ b/libraries/PHPExcel/PHPExcel/Style/Border.php
@@ -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;
diff --git a/libraries/PHPExcel/PHPExcel/Style/Borders.php b/libraries/PHPExcel/PHPExcel/Style/Borders.php
index ffd66af..dc32c50 100644
--- a/libraries/PHPExcel/PHPExcel/Style/Borders.php
+++ b/libraries/PHPExcel/PHPExcel/Style/Borders.php
@@ -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;
diff --git a/libraries/PHPExcel/PHPExcel/Style/Color.php b/libraries/PHPExcel/PHPExcel/Style/Color.php
index 8a25af0..9734d62 100644
--- a/libraries/PHPExcel/PHPExcel/Style/Color.php
+++ b/libraries/PHPExcel/PHPExcel/Style/Color.php
@@ -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;
diff --git a/libraries/PHPExcel/PHPExcel/Style/Conditional.php b/libraries/PHPExcel/PHPExcel/Style/Conditional.php
index 8ec5f92..4602b53 100644
--- a/libraries/PHPExcel/PHPExcel/Style/Conditional.php
+++ b/libraries/PHPExcel/PHPExcel/Style/Conditional.php
@@ -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
*/
diff --git a/libraries/PHPExcel/PHPExcel/Style/Fill.php b/libraries/PHPExcel/PHPExcel/Style/Fill.php
index 3ebf380..1357e47 100644
--- a/libraries/PHPExcel/PHPExcel/Style/Fill.php
+++ b/libraries/PHPExcel/PHPExcel/Style/Fill.php
@@ -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;
diff --git a/libraries/PHPExcel/PHPExcel/Style/Font.php b/libraries/PHPExcel/PHPExcel/Style/Font.php
index de39cf2..b58dbf5 100644
--- a/libraries/PHPExcel/PHPExcel/Style/Font.php
+++ b/libraries/PHPExcel/PHPExcel/Style/Font.php
@@ -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;
diff --git a/libraries/PHPExcel/PHPExcel/Style/NumberFormat.php b/libraries/PHPExcel/PHPExcel/Style/NumberFormat.php
index 9ff1a97..0f0dcdc 100644
--- a/libraries/PHPExcel/PHPExcel/Style/NumberFormat.php
+++ b/libraries/PHPExcel/PHPExcel/Style/NumberFormat.php
@@ -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;
diff --git a/libraries/PHPExcel/PHPExcel/Style/Protection.php b/libraries/PHPExcel/PHPExcel/Style/Protection.php
index 1c70702..29832da 100644
--- a/libraries/PHPExcel/PHPExcel/Style/Protection.php
+++ b/libraries/PHPExcel/PHPExcel/Style/Protection.php
@@ -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;
diff --git a/libraries/PHPExcel/PHPExcel/Worksheet.php b/libraries/PHPExcel/PHPExcel/Worksheet.php
index dc401fd..fb7cc0a 100644
--- a/libraries/PHPExcel/PHPExcel/Worksheet.php
+++ b/libraries/PHPExcel/PHPExcel/Worksheet.php
@@ -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));
+ }
}
}
}
diff --git a/libraries/PHPExcel/PHPExcel/Worksheet/BaseDrawing.php b/libraries/PHPExcel/PHPExcel/Worksheet/BaseDrawing.php
index e2c65c3..511643b 100644
--- a/libraries/PHPExcel/PHPExcel/Worksheet/BaseDrawing.php
+++ b/libraries/PHPExcel/PHPExcel/Worksheet/BaseDrawing.php
@@ -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
*/
diff --git a/libraries/PHPExcel/PHPExcel/Worksheet/CellIterator.php b/libraries/PHPExcel/PHPExcel/Worksheet/CellIterator.php
index 4a6589f..630e089 100644
--- a/libraries/PHPExcel/PHPExcel/Worksheet/CellIterator.php
+++ b/libraries/PHPExcel/PHPExcel/Worksheet/CellIterator.php
@@ -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
*/
diff --git a/libraries/PHPExcel/PHPExcel/Worksheet/ColumnDimension.php b/libraries/PHPExcel/PHPExcel/Worksheet/ColumnDimension.php
index f42ef31..30b0035 100644
--- a/libraries/PHPExcel/PHPExcel/Worksheet/ColumnDimension.php
+++ b/libraries/PHPExcel/PHPExcel/Worksheet/ColumnDimension.php
@@ -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
*/
diff --git a/libraries/PHPExcel/PHPExcel/Worksheet/Drawing.php b/libraries/PHPExcel/PHPExcel/Worksheet/Drawing.php
index 7d362c0..537f9f3 100644
--- a/libraries/PHPExcel/PHPExcel/Worksheet/Drawing.php
+++ b/libraries/PHPExcel/PHPExcel/Worksheet/Drawing.php
@@ -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
*/
diff --git a/libraries/PHPExcel/PHPExcel/Worksheet/Drawing/Shadow.php b/libraries/PHPExcel/PHPExcel/Worksheet/Drawing/Shadow.php
index f83c26d..053ab0d 100644
--- a/libraries/PHPExcel/PHPExcel/Worksheet/Drawing/Shadow.php
+++ b/libraries/PHPExcel/PHPExcel/Worksheet/Drawing/Shadow.php
@@ -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
*/
diff --git a/libraries/PHPExcel/PHPExcel/Worksheet/HeaderFooter.php b/libraries/PHPExcel/PHPExcel/Worksheet/HeaderFooter.php
index 4e39339..9d2708d 100644
--- a/libraries/PHPExcel/PHPExcel/Worksheet/HeaderFooter.php
+++ b/libraries/PHPExcel/PHPExcel/Worksheet/HeaderFooter.php
@@ -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
*/
diff --git a/libraries/PHPExcel/PHPExcel/Worksheet/HeaderFooterDrawing.php b/libraries/PHPExcel/PHPExcel/Worksheet/HeaderFooterDrawing.php
index 9f2b25d..f614261 100644
--- a/libraries/PHPExcel/PHPExcel/Worksheet/HeaderFooterDrawing.php
+++ b/libraries/PHPExcel/PHPExcel/Worksheet/HeaderFooterDrawing.php
@@ -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
*/
diff --git a/libraries/PHPExcel/PHPExcel/Worksheet/MemoryDrawing.php b/libraries/PHPExcel/PHPExcel/Worksheet/MemoryDrawing.php
index 0bd37f5..a43e6a9 100644
--- a/libraries/PHPExcel/PHPExcel/Worksheet/MemoryDrawing.php
+++ b/libraries/PHPExcel/PHPExcel/Worksheet/MemoryDrawing.php
@@ -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
*/
diff --git a/libraries/PHPExcel/PHPExcel/Worksheet/PageMargins.php b/libraries/PHPExcel/PHPExcel/Worksheet/PageMargins.php
index 6fc8f1a..155b976 100644
--- a/libraries/PHPExcel/PHPExcel/Worksheet/PageMargins.php
+++ b/libraries/PHPExcel/PHPExcel/Worksheet/PageMargins.php
@@ -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
*/
diff --git a/libraries/PHPExcel/PHPExcel/Worksheet/PageSetup.php b/libraries/PHPExcel/PHPExcel/Worksheet/PageSetup.php
index ffbd573..8e615f7 100644
--- a/libraries/PHPExcel/PHPExcel/Worksheet/PageSetup.php
+++ b/libraries/PHPExcel/PHPExcel/Worksheet/PageSetup.php
@@ -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. e.g. 'A1:D10' or 'A1:D10,G5:M20'
+ *
+ * @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 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;
}
/**
- * Set print area
+ * Add a new print area (e.g. 'A1:D10' or 'A1:D10,G5:M20') 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
- * @return PHPExcel_Worksheet_PageSetup
+ * @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 setPrintAreaByColumnAndRow($column1, $row1, $column2, $row2)
+ 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
*
diff --git a/libraries/PHPExcel/PHPExcel/Worksheet/Protection.php b/libraries/PHPExcel/PHPExcel/Worksheet/Protection.php
index 0e7bc4f..f60a265 100644
--- a/libraries/PHPExcel/PHPExcel/Worksheet/Protection.php
+++ b/libraries/PHPExcel/PHPExcel/Worksheet/Protection.php
@@ -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
*/
diff --git a/libraries/PHPExcel/PHPExcel/Worksheet/Row.php b/libraries/PHPExcel/PHPExcel/Worksheet/Row.php
index c5cb33a..7311721 100644
--- a/libraries/PHPExcel/PHPExcel/Worksheet/Row.php
+++ b/libraries/PHPExcel/PHPExcel/Worksheet/Row.php
@@ -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
*/
diff --git a/libraries/PHPExcel/PHPExcel/Worksheet/RowDimension.php b/libraries/PHPExcel/PHPExcel/Worksheet/RowDimension.php
index 8b1277d..153024f 100644
--- a/libraries/PHPExcel/PHPExcel/Worksheet/RowDimension.php
+++ b/libraries/PHPExcel/PHPExcel/Worksheet/RowDimension.php
@@ -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
*/
diff --git a/libraries/PHPExcel/PHPExcel/Worksheet/RowIterator.php b/libraries/PHPExcel/PHPExcel/Worksheet/RowIterator.php
index d21bd51..e0f91fc 100644
--- a/libraries/PHPExcel/PHPExcel/Worksheet/RowIterator.php
+++ b/libraries/PHPExcel/PHPExcel/Worksheet/RowIterator.php
@@ -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
*/
diff --git a/libraries/PHPExcel/PHPExcel/Worksheet/SheetView.php b/libraries/PHPExcel/PHPExcel/Worksheet/SheetView.php
index c7e04ae..fdfe001 100644
--- a/libraries/PHPExcel/PHPExcel/Worksheet/SheetView.php
+++ b/libraries/PHPExcel/PHPExcel/Worksheet/SheetView.php
@@ -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
*/
diff --git a/libraries/PHPExcel/PHPExcel/WorksheetIterator.php b/libraries/PHPExcel/PHPExcel/WorksheetIterator.php
index f6f6a6f..87f8b29 100644
--- a/libraries/PHPExcel/PHPExcel/WorksheetIterator.php
+++ b/libraries/PHPExcel/PHPExcel/WorksheetIterator.php
@@ -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
*/
diff --git a/libraries/PHPExcel/PHPExcel/Writer/CSV.php b/libraries/PHPExcel/PHPExcel/Writer/CSV.php
index 03e1a6e..765244d 100644
--- a/libraries/PHPExcel/PHPExcel/Writer/CSV.php
+++ b/libraries/PHPExcel/PHPExcel/Writer/CSV.php
@@ -22,7 +22,7 @@
* @package PHPExcel_Writer
* @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
*/
@@ -106,6 +106,8 @@ class PHPExcel_Writer_CSV implements PHPExcel_Writer_IWriter {
// Fetch sheet
$sheet = $this->_phpExcel->getSheet($this->_sheetIndex);
+ $saveDebugLog = PHPExcel_Calculation::getInstance()->writeDebugLog;
+ PHPExcel_Calculation::getInstance()->writeDebugLog = false;
$saveArrayReturnType = PHPExcel_Calculation::getArrayReturnType();
PHPExcel_Calculation::setArrayReturnType(PHPExcel_Calculation::RETURN_ARRAY_AS_VALUE);
@@ -132,6 +134,7 @@ class PHPExcel_Writer_CSV implements PHPExcel_Writer_IWriter {
fclose($fileHandle);
PHPExcel_Calculation::setArrayReturnType($saveArrayReturnType);
+ PHPExcel_Calculation::getInstance()->writeDebugLog = $saveDebugLog;
}
/**
diff --git a/libraries/PHPExcel/PHPExcel/Writer/Excel2007.php b/libraries/PHPExcel/PHPExcel/Writer/Excel2007.php
index 1963ab9..b9f7464 100644
--- a/libraries/PHPExcel/PHPExcel/Writer/Excel2007.php
+++ b/libraries/PHPExcel/PHPExcel/Writer/Excel2007.php
@@ -22,7 +22,7 @@
* @package PHPExcel_Writer_Excel2007
* @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
*/
@@ -201,6 +201,8 @@ class PHPExcel_Writer_Excel2007 implements PHPExcel_Writer_IWriter
}
}
+ $saveDebugLog = PHPExcel_Calculation::getInstance()->writeDebugLog;
+ PHPExcel_Calculation::getInstance()->writeDebugLog = false;
$saveDateReturnType = PHPExcel_Calculation_Functions::getReturnDateType();
PHPExcel_Calculation_Functions::setReturnDateType(PHPExcel_Calculation_Functions::RETURNDATE_EXCEL);
@@ -331,6 +333,7 @@ class PHPExcel_Writer_Excel2007 implements PHPExcel_Writer_IWriter
}
PHPExcel_Calculation_Functions::setReturnDateType($saveDateReturnType);
+ PHPExcel_Calculation::getInstance()->writeDebugLog = $saveDebugLog;
// Close file
if ($objZip->close() === false) {
diff --git a/libraries/PHPExcel/PHPExcel/Writer/Excel2007/Comments.php b/libraries/PHPExcel/PHPExcel/Writer/Excel2007/Comments.php
index ddb7958..3a6ad37 100644
--- a/libraries/PHPExcel/PHPExcel/Writer/Excel2007/Comments.php
+++ b/libraries/PHPExcel/PHPExcel/Writer/Excel2007/Comments.php
@@ -22,7 +22,7 @@
* @package PHPExcel_Writer_Excel2007
* @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
*/
diff --git a/libraries/PHPExcel/PHPExcel/Writer/Excel2007/ContentTypes.php b/libraries/PHPExcel/PHPExcel/Writer/Excel2007/ContentTypes.php
index d27e386..84de96d 100644
--- a/libraries/PHPExcel/PHPExcel/Writer/Excel2007/ContentTypes.php
+++ b/libraries/PHPExcel/PHPExcel/Writer/Excel2007/ContentTypes.php
@@ -22,7 +22,7 @@
* @package PHPExcel_Writer_Excel2007
* @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
*/
diff --git a/libraries/PHPExcel/PHPExcel/Writer/Excel2007/DocProps.php b/libraries/PHPExcel/PHPExcel/Writer/Excel2007/DocProps.php
index 68e0f04..21fc3a4 100644
--- a/libraries/PHPExcel/PHPExcel/Writer/Excel2007/DocProps.php
+++ b/libraries/PHPExcel/PHPExcel/Writer/Excel2007/DocProps.php
@@ -22,7 +22,7 @@
* @package PHPExcel_Writer_Excel2007
* @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
*/
diff --git a/libraries/PHPExcel/PHPExcel/Writer/Excel2007/Drawing.php b/libraries/PHPExcel/PHPExcel/Writer/Excel2007/Drawing.php
index 670b835..f1551da 100644
--- a/libraries/PHPExcel/PHPExcel/Writer/Excel2007/Drawing.php
+++ b/libraries/PHPExcel/PHPExcel/Writer/Excel2007/Drawing.php
@@ -22,7 +22,7 @@
* @package PHPExcel_Writer_Excel2007
* @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
*/
diff --git a/libraries/PHPExcel/PHPExcel/Writer/Excel2007/Rels.php b/libraries/PHPExcel/PHPExcel/Writer/Excel2007/Rels.php
index d133621..7ffdd6d 100644
--- a/libraries/PHPExcel/PHPExcel/Writer/Excel2007/Rels.php
+++ b/libraries/PHPExcel/PHPExcel/Writer/Excel2007/Rels.php
@@ -22,7 +22,7 @@
* @package PHPExcel_Writer_Excel2007
* @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
*/
diff --git a/libraries/PHPExcel/PHPExcel/Writer/Excel2007/StringTable.php b/libraries/PHPExcel/PHPExcel/Writer/Excel2007/StringTable.php
index 8ab1c52..98a3c45 100644
--- a/libraries/PHPExcel/PHPExcel/Writer/Excel2007/StringTable.php
+++ b/libraries/PHPExcel/PHPExcel/Writer/Excel2007/StringTable.php
@@ -22,7 +22,7 @@
* @package PHPExcel_Writer_Excel2007
* @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
*/
diff --git a/libraries/PHPExcel/PHPExcel/Writer/Excel2007/Style.php b/libraries/PHPExcel/PHPExcel/Writer/Excel2007/Style.php
index dd7621d..5354936 100644
--- a/libraries/PHPExcel/PHPExcel/Writer/Excel2007/Style.php
+++ b/libraries/PHPExcel/PHPExcel/Writer/Excel2007/Style.php
@@ -22,7 +22,7 @@
* @package PHPExcel_Writer_Excel2007
* @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
*/
diff --git a/libraries/PHPExcel/PHPExcel/Writer/Excel2007/Theme.php b/libraries/PHPExcel/PHPExcel/Writer/Excel2007/Theme.php
index 9dbee16..e8ffe7b 100644
--- a/libraries/PHPExcel/PHPExcel/Writer/Excel2007/Theme.php
+++ b/libraries/PHPExcel/PHPExcel/Writer/Excel2007/Theme.php
@@ -22,7 +22,7 @@
* @package PHPExcel_Writer_Excel2007
* @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
*/
diff --git a/libraries/PHPExcel/PHPExcel/Writer/Excel2007/Workbook.php b/libraries/PHPExcel/PHPExcel/Writer/Excel2007/Workbook.php
index 245fb87..d2c51fb 100644
--- a/libraries/PHPExcel/PHPExcel/Writer/Excel2007/Workbook.php
+++ b/libraries/PHPExcel/PHPExcel/Writer/Excel2007/Workbook.php
@@ -22,7 +22,7 @@
* @package PHPExcel_Writer_Excel2007
* @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
*/
diff --git a/libraries/PHPExcel/PHPExcel/Writer/Excel2007/Worksheet.php b/libraries/PHPExcel/PHPExcel/Writer/Excel2007/Worksheet.php
index 411b42a..327e542 100644
--- a/libraries/PHPExcel/PHPExcel/Writer/Excel2007/Worksheet.php
+++ b/libraries/PHPExcel/PHPExcel/Writer/Excel2007/Worksheet.php
@@ -22,7 +22,7 @@
* @package PHPExcel_Writer_Excel2007
* @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
*/
@@ -1002,7 +1002,18 @@ class PHPExcel_Writer_Excel2007_Worksheet extends PHPExcel_Writer_Excel2007_Writ
break;
case 'f': // Formula
- $objWriter->writeElement('f', substr($pCell->getValue(), 1));
+ $attributes = $pCell->getFormulaAttributes();
+ if($attributes['t'] == 'array') {
+ $objWriter->startElement('f');
+ $objWriter->writeAttribute('t', 'array');
+ $objWriter->writeAttribute('ref', $pCell->getCoordinate());
+ $objWriter->writeAttribute('aca', '1');
+ $objWriter->writeAttribute('ca', '1');
+ $objWriter->text(substr($pCell->getValue(), 1));
+ $objWriter->endElement();
+ } else {
+ $objWriter->writeElement('f', substr($pCell->getValue(), 1));
+ }
if ($this->getParentWriter()->getOffice2003Compatibility() === false) {
if ($this->getParentWriter()->getPreCalculateFormulas()) {
$calculatedValue = $pCell->getCalculatedValue();
diff --git a/libraries/PHPExcel/PHPExcel/Writer/Excel2007/WriterPart.php b/libraries/PHPExcel/PHPExcel/Writer/Excel2007/WriterPart.php
index c153237..97d56e1 100644
--- a/libraries/PHPExcel/PHPExcel/Writer/Excel2007/WriterPart.php
+++ b/libraries/PHPExcel/PHPExcel/Writer/Excel2007/WriterPart.php
@@ -22,7 +22,7 @@
* @package PHPExcel_Writer_Excel2007
* @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
*/
diff --git a/libraries/PHPExcel/PHPExcel/Writer/Excel5.php b/libraries/PHPExcel/PHPExcel/Writer/Excel5.php
index 0bb5571..4d69d91 100644
--- a/libraries/PHPExcel/PHPExcel/Writer/Excel5.php
+++ b/libraries/PHPExcel/PHPExcel/Writer/Excel5.php
@@ -22,7 +22,7 @@
* @package PHPExcel_Writer_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
*/
@@ -91,6 +91,13 @@ class PHPExcel_Writer_Excel5 implements PHPExcel_Writer_IWriter
*/
private $_parser;
+ /**
+ * Identifier clusters for drawings. Used in MSODRAWINGGROUP record.
+ *
+ * @var array
+ */
+ private $_IDCLs;
+
/**
* Create a new PHPExcel_Writer_Excel5
@@ -120,6 +127,8 @@ class PHPExcel_Writer_Excel5 implements PHPExcel_Writer_IWriter
// garbage collect
$this->_phpExcel->garbageCollect();
+ $saveDebugLog = PHPExcel_Calculation::getInstance()->writeDebugLog;
+ PHPExcel_Calculation::getInstance()->writeDebugLog = false;
$saveDateReturnType = PHPExcel_Calculation_Functions::getReturnDateType();
PHPExcel_Calculation_Functions::setReturnDateType(PHPExcel_Calculation_Functions::RETURNDATE_EXCEL);
@@ -130,6 +139,21 @@ class PHPExcel_Writer_Excel5 implements PHPExcel_Writer_IWriter
$this->_writerWorkbook = new PHPExcel_Writer_Excel5_Workbook($this->_phpExcel, $this->_BIFF_version,
$this->_str_total, $this->_str_unique, $this->_str_table, $this->_colors, $this->_parser);
+ // Initialise worksheet writers
+ $countSheets = $this->_phpExcel->getSheetCount();
+ for ($i = 0; $i < $countSheets; ++$i) {
+ $this->_writerWorksheets[$i] = new PHPExcel_Writer_Excel5_Worksheet($this->_BIFF_version,
+ $this->_str_total, $this->_str_unique,
+ $this->_str_table, $this->_colors,
+ $this->_parser,
+ $this->_preCalculateFormulas,
+ $this->_phpExcel->getSheet($i));
+ }
+
+ // build Escher objects. Escher objects for workbooks needs to be build before Escher object for workbook.
+ $this->_buildWorksheetEschers();
+ $this->_buildWorkbookEscher();
+
// add 15 identical cell style Xfs
// for now, we use the first cellXf instead of cellStyleXf
$cellXfCollection = $this->_phpExcel->getCellXfCollection();
@@ -146,19 +170,10 @@ class PHPExcel_Writer_Excel5 implements PHPExcel_Writer_IWriter
$workbookStreamName = ($this->_BIFF_version == 0x0600) ? 'Workbook' : 'Book';
$OLE = new PHPExcel_Shared_OLE_PPS_File(PHPExcel_Shared_OLE::Asc2Ucs($workbookStreamName));
- // Initialise worksheet writers
- $countSheets = $this->_phpExcel->getSheetCount();
// Write the worksheet streams before the global workbook stream,
// because the byte sizes of these are needed in the global workbook stream
$worksheetSizes = array();
for ($i = 0; $i < $countSheets; ++$i) {
- $this->_writerWorksheets[$i] = new PHPExcel_Writer_Excel5_Worksheet($this->_BIFF_version,
- $this->_str_total, $this->_str_unique,
- $this->_str_table, $this->_colors,
- $this->_parser,
- $this->_preCalculateFormulas,
- $this->_phpExcel->getSheet($i));
-
$this->_writerWorksheets[$i]->close();
$worksheetSizes[] = $this->_writerWorksheets[$i]->_datasize;
}
@@ -176,6 +191,7 @@ class PHPExcel_Writer_Excel5 implements PHPExcel_Writer_IWriter
$res = $root->save($pFilename);
PHPExcel_Calculation_Functions::setReturnDateType($saveDateReturnType);
+ PHPExcel_Calculation::getInstance()->writeDebugLog = $saveDebugLog;
}
/**
@@ -208,4 +224,253 @@ class PHPExcel_Writer_Excel5 implements PHPExcel_Writer_IWriter
$this->_preCalculateFormulas = $pValue;
}
+ private function _buildWorksheetEschers()
+ {
+ // 1-based index to BstoreContainer
+ $blipIndex = 0;
+
+ foreach ($this->_phpExcel->getAllsheets() as $sheet) {
+ // sheet index
+ $sheetIndex = $sheet->getParent()->getIndex($sheet);
+
+ $escher = null;
+
+ // check if there are any shapes for this sheet
+ if (count($sheet->getDrawingCollection()) == 0) {
+ continue;
+ }
+
+ // create intermediate Escher object
+ $escher = new PHPExcel_Shared_Escher();
+
+ // dgContainer
+ $dgContainer = new PHPExcel_Shared_Escher_DgContainer();
+
+ // set the drawing index (we use sheet index + 1)
+ $dgId = $sheet->getParent()->getIndex($sheet) + 1;
+ $dgContainer->setDgId($dgId);
+ $escher->setDgContainer($dgContainer);
+
+ // spgrContainer
+ $spgrContainer = new PHPExcel_Shared_Escher_DgContainer_SpgrContainer();
+ $dgContainer->setSpgrContainer($spgrContainer);
+
+ // add one shape which is the group shape
+ $spContainer = new PHPExcel_Shared_Escher_DgContainer_SpgrContainer_SpContainer();
+ $spContainer->setSpgr(true);
+ $spContainer->setSpType(0);
+ $spContainer->setSpId(($sheet->getParent()->getIndex($sheet) + 1) << 10);
+ $spgrContainer->addChild($spContainer);
+
+ // add the shapes
+
+ $countShapes[$sheetIndex] = 0; // count number of shapes (minus group shape), in sheet
+
+ foreach ($sheet->getDrawingCollection() as $drawing) {
+ ++$blipIndex;
+
+ ++$countShapes[$sheetIndex];
+
+ // add the shape
+ $spContainer = new PHPExcel_Shared_Escher_DgContainer_SpgrContainer_SpContainer();
+
+ // set the shape type
+ $spContainer->setSpType(0x004B);
+
+ // set the shape index (we combine 1-based sheet index and $countShapes to create unique shape index)
+ $reducedSpId = $countShapes[$sheetIndex];
+ $spId = $reducedSpId
+ | ($sheet->getParent()->getIndex($sheet) + 1) << 10;
+ $spContainer->setSpId($spId);
+
+ // keep track of last reducedSpId
+ $lastReducedSpId = $reducedSpId;
+
+ // keep track of last spId
+ $lastSpId = $spId;
+
+ // set the BLIP index
+ $spContainer->setOPT(0x4104, $blipIndex);
+
+ // set coordinates and offsets, client anchor
+ $coordinates = $drawing->getCoordinates();
+ $offsetX = $drawing->getOffsetX();
+ $offsetY = $drawing->getOffsetY();
+ $width = $drawing->getWidth();
+ $height = $drawing->getHeight();
+
+ $twoAnchor = PHPExcel_Shared_Excel5::oneAnchor2twoAnchor($sheet, $coordinates, $offsetX, $offsetY, $width, $height);
+
+ $spContainer->setStartCoordinates($twoAnchor['startCoordinates']);
+ $spContainer->setStartOffsetX($twoAnchor['startOffsetX']);
+ $spContainer->setStartOffsetY($twoAnchor['startOffsetY']);
+ $spContainer->setEndCoordinates($twoAnchor['endCoordinates']);
+ $spContainer->setEndOffsetX($twoAnchor['endOffsetX']);
+ $spContainer->setEndOffsetY($twoAnchor['endOffsetY']);
+
+ $spgrContainer->addChild($spContainer);
+ }
+
+ // identifier clusters, used for workbook Escher object
+ $this->_IDCLs[$dgId] = $lastReducedSpId;
+
+ // set last shape index
+ $dgContainer->setLastSpId($lastSpId);
+
+ // set the Escher object
+ $this->_writerWorksheets[$sheetIndex]->setEscher($escher);
+ }
+ }
+
+ /**
+ * Build the Escher object corresponding to the MSODRAWINGGROUP record
+ */
+ private function _buildWorkbookEscher()
+ {
+ $escher = null;
+
+ // any drawings in this workbook?
+ $found = false;
+ foreach ($this->_phpExcel->getAllSheets() as $sheet) {
+ if (count($sheet->getDrawingCollection()) > 0) {
+ $found = true;
+ }
+ }
+
+ // nothing to do if there are no drawings
+ if (!$found) {
+ return;
+ }
+
+ // if we reach here, then there are drawings in the workbook
+ $escher = new PHPExcel_Shared_Escher();
+
+ // dggContainer
+ $dggContainer = new PHPExcel_Shared_Escher_DggContainer();
+ $escher->setDggContainer($dggContainer);
+
+ // set IDCLs (identifier clusters)
+ $dggContainer->setIDCLs($this->_IDCLs);
+
+ // this loop is for determining maximum shape identifier of all drawing
+ $spIdMax = 0;
+ $totalCountShapes = 0;
+ $countDrawings = 0;
+
+ foreach ($this->_phpExcel->getAllsheets() as $sheet) {
+ $sheetCountShapes = 0; // count number of shapes (minus group shape), in sheet
+
+ if (count($sheet->getDrawingCollection()) > 0) {
+ ++$countDrawings;
+
+ foreach ($sheet->getDrawingCollection() as $drawing) {
+ ++$sheetCountShapes;
+ ++$totalCountShapes;
+
+ $spId = $sheetCountShapes
+ | ($this->_phpExcel->getIndex($sheet) + 1) << 10;
+ $spIdMax = max($spId, $spIdMax);
+ }
+ }
+ }
+
+ $dggContainer->setSpIdMax($spIdMax + 1);
+ $dggContainer->setCDgSaved($countDrawings);
+ $dggContainer->setCSpSaved($totalCountShapes + $countDrawings); // total number of shapes incl. one group shapes per drawing
+
+ // bstoreContainer
+ $bstoreContainer = new PHPExcel_Shared_Escher_DggContainer_BstoreContainer();
+ $dggContainer->setBstoreContainer($bstoreContainer);
+
+ // the BSE's (all the images)
+ foreach ($this->_phpExcel->getAllsheets() as $sheet) {
+ foreach ($sheet->getDrawingCollection() as $drawing) {
+ if ($drawing instanceof PHPExcel_Worksheet_Drawing) {
+
+ $filename = $drawing->getPath();
+
+ list($imagesx, $imagesy, $imageFormat) = getimagesize($filename);
+
+ switch ($imageFormat) {
+
+ case 1: // GIF, not supported by BIFF8, we convert to PNG
+ $blipType = PHPExcel_Shared_Escher_DggContainer_BstoreContainer_BSE::BLIPTYPE_PNG;
+ $imageResource = imagecreatefromgif($filename);
+ ob_start();
+ imagepng($imageResource);
+ $blipData = ob_get_contents();
+ ob_end_clean();
+ break;
+
+ case 2: // JPEG
+ $blipType = PHPExcel_Shared_Escher_DggContainer_BstoreContainer_BSE::BLIPTYPE_JPEG;
+ $blipData = file_get_contents($filename);
+ break;
+
+ case 3: // PNG
+ $blipType = PHPExcel_Shared_Escher_DggContainer_BstoreContainer_BSE::BLIPTYPE_PNG;
+ $blipData = file_get_contents($filename);
+ break;
+
+ case 6: // Windows DIB (BMP), we convert to PNG
+ $blipType = PHPExcel_Shared_Escher_DggContainer_BstoreContainer_BSE::BLIPTYPE_PNG;
+ $imageResource = PHPExcel_Shared_Drawing::imagecreatefrombmp($filename);
+ ob_start();
+ imagepng($imageResource);
+ $blipData = ob_get_contents();
+ ob_end_clean();
+ break;
+
+ default: continue 2;
+
+ }
+
+ $blip = new PHPExcel_Shared_Escher_DggContainer_BstoreContainer_BSE_Blip();
+ $blip->setData($blipData);
+
+ $BSE = new PHPExcel_Shared_Escher_DggContainer_BstoreContainer_BSE();
+ $BSE->setBlipType($blipType);
+ $BSE->setBlip($blip);
+
+ $bstoreContainer->addBSE($BSE);
+
+ } else if ($drawing instanceof PHPExcel_Worksheet_MemoryDrawing) {
+
+ switch ($drawing->getRenderingFunction()) {
+
+ case PHPExcel_Worksheet_MemoryDrawing::RENDERING_JPEG:
+ $blipType = PHPExcel_Shared_Escher_DggContainer_BstoreContainer_BSE::BLIPTYPE_JPEG;
+ $renderingFunction = 'imagejpeg';
+ break;
+
+ case PHPExcel_Worksheet_MemoryDrawing::RENDERING_GIF:
+ case PHPExcel_Worksheet_MemoryDrawing::RENDERING_PNG:
+ case PHPExcel_Worksheet_MemoryDrawing::RENDERING_DEFAULT:
+ $blipType = PHPExcel_Shared_Escher_DggContainer_BstoreContainer_BSE::BLIPTYPE_PNG;
+ $renderingFunction = 'imagepng';
+ break;
+
+ }
+
+ ob_start();
+ call_user_func($renderingFunction, $drawing->getImageResource());
+ $blipData = ob_get_contents();
+ ob_end_clean();
+
+ $blip = new PHPExcel_Shared_Escher_DggContainer_BstoreContainer_BSE_Blip();
+ $blip->setData($blipData);
+
+ $BSE = new PHPExcel_Shared_Escher_DggContainer_BstoreContainer_BSE();
+ $BSE->setBlipType($blipType);
+ $BSE->setBlip($blip);
+
+ $bstoreContainer->addBSE($BSE);
+ }
+ }
+ }
+
+ // Set the Escher object
+ $this->_writerWorkbook->setEscher($escher);
+ }
+
}
diff --git a/libraries/PHPExcel/PHPExcel/Writer/Excel5/BIFFwriter.php b/libraries/PHPExcel/PHPExcel/Writer/Excel5/BIFFwriter.php
index 2c0a2d1..e758aeb 100644
--- a/libraries/PHPExcel/PHPExcel/Writer/Excel5/BIFFwriter.php
+++ b/libraries/PHPExcel/PHPExcel/Writer/Excel5/BIFFwriter.php
@@ -22,7 +22,7 @@
* @package PHPExcel_Writer_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 PEAR::Spreadsheet_Excel_Writer_BIFFwriter (used as the base for this class):
diff --git a/libraries/PHPExcel/PHPExcel/Writer/Excel5/Escher.php b/libraries/PHPExcel/PHPExcel/Writer/Excel5/Escher.php
index 402bd19..3c9c29f 100644
--- a/libraries/PHPExcel/PHPExcel/Writer/Excel5/Escher.php
+++ b/libraries/PHPExcel/PHPExcel/Writer/Excel5/Escher.php
@@ -22,7 +22,7 @@
* @package PHPExcel_Writer_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
*/
@@ -106,9 +106,12 @@ class PHPExcel_Writer_Excel5_Escher
, $this->_object->getCSpSaved()
, $this->_object->getCDgSaved() // count total number of drawings saved
);
+
// add file identifier clusters (one per drawing)
- for ($i = 0; $i < $this->_object->getCDgSaved(); ++$i) {
- $dggData .= pack('VV', 0, 0);
+ $IDCLs = $this->_object->getIDCLs();
+
+ foreach ($IDCLs as $dgId => $maxReducedSpId) {
+ $dggData .= pack('VV', $dgId, $maxReducedSpId + 1);
}
$header = pack('vvV', $recVerInstance, $recType, strlen($dggData));
diff --git a/libraries/PHPExcel/PHPExcel/Writer/Excel5/Font.php b/libraries/PHPExcel/PHPExcel/Writer/Excel5/Font.php
index bb4d201..2928070 100644
--- a/libraries/PHPExcel/PHPExcel/Writer/Excel5/Font.php
+++ b/libraries/PHPExcel/PHPExcel/Writer/Excel5/Font.php
@@ -22,7 +22,7 @@
* @package PHPExcel_Writer_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
*/
diff --git a/libraries/PHPExcel/PHPExcel/Writer/Excel5/Parser.php b/libraries/PHPExcel/PHPExcel/Writer/Excel5/Parser.php
index cef650f..eb9891e 100644
--- a/libraries/PHPExcel/PHPExcel/Writer/Excel5/Parser.php
+++ b/libraries/PHPExcel/PHPExcel/Writer/Excel5/Parser.php
@@ -22,7 +22,7 @@
* @package PHPExcel_Writer_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 PEAR::Spreadsheet_Excel_Writer_Parser (used as the base for this class):
@@ -1148,6 +1148,9 @@ class PHPExcel_Writer_Excel5_Parser
case "<>":
return $token;
break;
+ case "^":
+ return $token;
+ break;
default:
// if it's a reference A1 or $A$1 or $A1 or A$1
if (preg_match('/^\$?[A-Ia-i]?[A-Za-z]\$?[0-9]+$/',$token) and
@@ -1288,19 +1291,30 @@ class PHPExcel_Writer_Excel5_Parser
$result2 = $this->_expression();
$result = $this->_createTree('ptgUminus', $result2, '');
return $result;
+ } elseif ($this->_current_token == "+") {
+ // catch "+" Term
+ $this->_advance();
+ $result2 = $this->_expression();
+ $result = $this->_createTree('ptgUplus', $result2, '');
+ return $result;
}
$result = $this->_term();
while (($this->_current_token == "+") or
- ($this->_current_token == "-")) {
+ ($this->_current_token == "-") or
+ ($this->_current_token == "^")) {
/**/
if ($this->_current_token == "+") {
$this->_advance();
$result2 = $this->_term();
$result = $this->_createTree('ptgAdd', $result, $result2);
- } else {
+ } elseif ($this->_current_token == "-") {
$this->_advance();
$result2 = $this->_term();
$result = $this->_createTree('ptgSub', $result, $result2);
+ } else {
+ $this->_advance();
+ $result2 = $this->_term();
+ $result = $this->_createTree('ptgPower', $result, $result2);
}
}
return $result;
diff --git a/libraries/PHPExcel/PHPExcel/Writer/Excel5/Workbook.php b/libraries/PHPExcel/PHPExcel/Writer/Excel5/Workbook.php
index d26ddee..6e517e6 100644
--- a/libraries/PHPExcel/PHPExcel/Writer/Excel5/Workbook.php
+++ b/libraries/PHPExcel/PHPExcel/Writer/Excel5/Workbook.php
@@ -22,7 +22,7 @@
* @package PHPExcel_Writer_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 PEAR::Spreadsheet_Excel_Writer_Workbook (used as the base for this class):
@@ -182,6 +182,13 @@ class PHPExcel_Writer_Excel5_Workbook extends PHPExcel_Writer_Excel5_BIFFwriter
*/
private $_colors;
+ /**
+ * Escher object corresponding to MSODRAWINGGROUP
+ *
+ * @var PHPExcel_Shared_Escher
+ */
+ private $_escher;
+
/**
* Class constructor
@@ -1400,143 +1407,9 @@ class PHPExcel_Writer_Excel5_Workbook extends PHPExcel_Writer_Excel5_BIFFwriter
*/
private function _writeMsoDrawingGroup()
{
- // any drawings in this workbook?
- $found = false;
- foreach ($this->_phpExcel->getAllSheets() as $sheet) {
- if (count($sheet->getDrawingCollection()) > 0) {
- $found = true;
- }
- }
-
- // if there are drawings, then we need to write MSODRAWINGGROUP record
- if ($found) {
-
- // create intermediate Escher object
- $escher = new PHPExcel_Shared_Escher();
-
- // dggContainer
- $dggContainer = new PHPExcel_Shared_Escher_DggContainer();
- $escher->setDggContainer($dggContainer);
-
- // this loop is for determining maximum shape identifier of all drawing
- $spIdMax = 0;
- $totalCountShapes = 0;
- $countDrawings = 0;
-
- foreach ($this->_phpExcel->getAllsheets() as $sheet) {
- $sheetCountShapes = 0; // count number of shapes (minus group shape), in sheet
-
- if (count($sheet->getDrawingCollection()) > 0) {
- ++$countDrawings;
-
- foreach ($sheet->getDrawingCollection() as $drawing) {
- ++$sheetCountShapes;
- ++$totalCountShapes;
-
- $spId = $sheetCountShapes
- | ($this->_phpExcel->getIndex($sheet) + 1) << 10;
- $spIdMax = max($spId, $spIdMax);
- }
- }
- }
-
- $dggContainer->setSpIdMax($spIdMax + 1);
- $dggContainer->setCDgSaved($countDrawings);
- $dggContainer->setCSpSaved($totalCountShapes + $countDrawings); // total number of shapes incl. one group shapes per drawing
-
- // bstoreContainer
- $bstoreContainer = new PHPExcel_Shared_Escher_DggContainer_BstoreContainer();
- $dggContainer->setBstoreContainer($bstoreContainer);
-
- // the BSE's (all the images)
- foreach ($this->_phpExcel->getAllsheets() as $sheet) {
- foreach ($sheet->getDrawingCollection() as $drawing) {
- if ($drawing instanceof PHPExcel_Worksheet_Drawing) {
-
- $filename = $drawing->getPath();
-
- list($imagesx, $imagesy, $imageFormat) = getimagesize($filename);
-
- switch ($imageFormat) {
-
- case 1: // GIF, not supported by BIFF8, we convert to PNG
- $blipType = PHPExcel_Shared_Escher_DggContainer_BstoreContainer_BSE::BLIPTYPE_PNG;
- $imageResource = imagecreatefromgif($filename);
- ob_start();
- imagepng($imageResource);
- $blipData = ob_get_contents();
- ob_end_clean();
- break;
-
- case 2: // JPEG
- $blipType = PHPExcel_Shared_Escher_DggContainer_BstoreContainer_BSE::BLIPTYPE_JPEG;
- $blipData = file_get_contents($filename);
- break;
-
- case 3: // PNG
- $blipType = PHPExcel_Shared_Escher_DggContainer_BstoreContainer_BSE::BLIPTYPE_PNG;
- $blipData = file_get_contents($filename);
- break;
-
- case 6: // Windows DIB (BMP), we convert to PNG
- $blipType = PHPExcel_Shared_Escher_DggContainer_BstoreContainer_BSE::BLIPTYPE_PNG;
- $imageResource = PHPExcel_Shared_Drawing::imagecreatefrombmp($filename);
- ob_start();
- imagepng($imageResource);
- $blipData = ob_get_contents();
- ob_end_clean();
- break;
-
- default: continue 2;
-
- }
-
- $blip = new PHPExcel_Shared_Escher_DggContainer_BstoreContainer_BSE_Blip();
- $blip->setData($blipData);
-
- $BSE = new PHPExcel_Shared_Escher_DggContainer_BstoreContainer_BSE();
- $BSE->setBlipType($blipType);
- $BSE->setBlip($blip);
-
- $bstoreContainer->addBSE($BSE);
-
- } else if ($drawing instanceof PHPExcel_Worksheet_MemoryDrawing) {
-
- switch ($drawing->getRenderingFunction()) {
-
- case PHPExcel_Worksheet_MemoryDrawing::RENDERING_JPEG:
- $blipType = PHPExcel_Shared_Escher_DggContainer_BstoreContainer_BSE::BLIPTYPE_JPEG;
- $renderingFunction = 'imagejpeg';
- break;
-
- case PHPExcel_Worksheet_MemoryDrawing::RENDERING_GIF:
- case PHPExcel_Worksheet_MemoryDrawing::RENDERING_PNG:
- case PHPExcel_Worksheet_MemoryDrawing::RENDERING_DEFAULT:
- $blipType = PHPExcel_Shared_Escher_DggContainer_BstoreContainer_BSE::BLIPTYPE_PNG;
- $renderingFunction = 'imagepng';
- break;
-
- }
-
- ob_start();
- call_user_func($renderingFunction, $drawing->getImageResource());
- $blipData = ob_get_contents();
- ob_end_clean();
-
- $blip = new PHPExcel_Shared_Escher_DggContainer_BstoreContainer_BSE_Blip();
- $blip->setData($blipData);
-
- $BSE = new PHPExcel_Shared_Escher_DggContainer_BstoreContainer_BSE();
- $BSE->setBlipType($blipType);
- $BSE->setBlip($blip);
-
- $bstoreContainer->addBSE($BSE);
- }
- }
- }
-
- // write the Escher stream from the intermediate Escher object
- $writer = new PHPExcel_Writer_Excel5_Escher($escher);
+ // write the Escher stream if necessary
+ if (isset($this->_escher)) {
+ $writer = new PHPExcel_Writer_Excel5_Escher($this->_escher);
$data = $writer->close();
$record = 0x00EB;
@@ -1544,7 +1417,30 @@ class PHPExcel_Writer_Excel5_Workbook extends PHPExcel_Writer_Excel5_BIFFwriter
$header = pack("vv", $record, $length);
return $this->writeData($header . $data);
+
+ } else {
+ return '';
}
}
+ /**
+ * Get Escher object
+ *
+ * @return PHPExcel_Shared_Escher
+ */
+ public function getEscher()
+ {
+ return $this->_escher;
+ }
+
+ /**
+ * Set Escher object
+ *
+ * @param PHPExcel_Shared_Escher $pValue
+ */
+ public function setEscher(PHPExcel_Shared_Escher $pValue = null)
+ {
+ $this->_escher = $pValue;
+ }
+
}
diff --git a/libraries/PHPExcel/PHPExcel/Writer/Excel5/Worksheet.php b/libraries/PHPExcel/PHPExcel/Writer/Excel5/Worksheet.php
index 646101a..0dd2b00 100644
--- a/libraries/PHPExcel/PHPExcel/Writer/Excel5/Worksheet.php
+++ b/libraries/PHPExcel/PHPExcel/Writer/Excel5/Worksheet.php
@@ -22,7 +22,7 @@
* @package PHPExcel_Writer_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 PEAR::Spreadsheet_Excel_Writer_Worksheet (used as the base for this class):
@@ -186,6 +186,13 @@ class PHPExcel_Writer_Excel5_Worksheet extends PHPExcel_Writer_Excel5_BIFFwriter
private $_countCellStyleXfs;
/**
+ * Escher object corresponding to MSODRAWING
+ *
+ * @var PHPExcel_Shared_Escher
+ */
+ private $_escher;
+
+ /**
* Constructor
*
* @param int $BIFF_version BIFF version
@@ -2694,142 +2701,82 @@ class PHPExcel_Writer_Excel5_Worksheet extends PHPExcel_Writer_Excel5_BIFFwriter
}
/**
- * Write MSODRAWING record
+ * Get Escher object
+ *
+ * @return PHPExcel_Shared_Escher
*/
- private function _writeMsoDrawing()
+ public function getEscher()
{
- // check if there are any shapes for this sheet
- if (count($this->_phpSheet->getDrawingCollection()) == 0) {
- return;
- }
-
- // create intermediate Escher object
- $escher = new PHPExcel_Shared_Escher();
-
- // dgContainer
- $dgContainer = new PHPExcel_Shared_Escher_DgContainer();
-
- // set the drawing index (we use sheet index + 1)
- $dgContainer->setDgId($this->_phpSheet->getParent()->getIndex($this->_phpSheet) + 1);
- $escher->setDgContainer($dgContainer);
-
- // spgrContainer
- $spgrContainer = new PHPExcel_Shared_Escher_DgContainer_SpgrContainer();
- $dgContainer->setSpgrContainer($spgrContainer);
-
- // add one shape which is the group shape
- $spContainer = new PHPExcel_Shared_Escher_DgContainer_SpgrContainer_SpContainer();
- $spContainer->setSpgr(true);
- $spContainer->setSpType(0);
- $spContainer->setSpId(($this->_phpSheet->getParent()->getIndex($this->_phpSheet) + 1) << 10);
- $spgrContainer->addChild($spContainer);
-
- // add the shapes
-
- // outer loop is for determining BSE index
- $blipIndex = 0; // 1-based index to BstoreContainer
-
- $countShapes = 0; // count number of shapes (minus group shape), in this sheet
-
- foreach ($this->_phpSheet->getParent()->getAllsheets() as $sheet) {
- foreach ($sheet->getDrawingCollection() as $drawing) {
- ++$blipIndex;
-
- if ($sheet === $this->_phpSheet) {
- ++$countShapes;
-
- // add the shape
- $spContainer = new PHPExcel_Shared_Escher_DgContainer_SpgrContainer_SpContainer();
-
- // set the shape type
- $spContainer->setSpType(0x004B);
-
- // set the shape index (we combine 1-based sheet index and $countShapes to create unique shape index)
- $spId = $countShapes
- | ($this->_phpSheet->getParent()->getIndex($this->_phpSheet) + 1) << 10;
- $spContainer->setSpId($spId);
-
- // keep track of last spId
- $lastSpId = $spId;
-
- // set the BLIP index
- $spContainer->setOPT(0x4104, $blipIndex);
-
- // set coordinates and offsets, client anchor
- $coordinates = $drawing->getCoordinates();
- $offsetX = $drawing->getOffsetX();
- $offsetY = $drawing->getOffsetY();
- $width = $drawing->getWidth();
- $height = $drawing->getHeight();
-
- $twoAnchor = PHPExcel_Shared_Excel5::oneAnchor2twoAnchor($this->_phpSheet, $coordinates, $offsetX, $offsetY, $width, $height);
+ return $this->_escher;
+ }
- $spContainer->setStartCoordinates($twoAnchor['startCoordinates']);
- $spContainer->setStartOffsetX($twoAnchor['startOffsetX']);
- $spContainer->setStartOffsetY($twoAnchor['startOffsetY']);
- $spContainer->setEndCoordinates($twoAnchor['endCoordinates']);
- $spContainer->setEndOffsetX($twoAnchor['endOffsetX']);
- $spContainer->setEndOffsetY($twoAnchor['endOffsetY']);
+ /**
+ * Set Escher object
+ *
+ * @param PHPExcel_Shared_Escher $pValue
+ */
+ public function setEscher(PHPExcel_Shared_Escher $pValue = null)
+ {
+ $this->_escher = $pValue;
+ }
- $spgrContainer->addChild($spContainer);
- }
+ /**
+ * Write MSODRAWING record
+ */
+ private function _writeMsoDrawing()
+ {
+ // write the Escher stream if necessary
+ if (isset($this->_escher)) {
+ $writer = new PHPExcel_Writer_Excel5_Escher($this->_escher);
+ $data = $writer->close();
+ $spOffsets = $writer->getSpOffsets();
+
+ // write the neccesary MSODRAWING, OBJ records
+
+ // split the Escher stream
+ $spOffsets[0] = 0;
+ $nm = count($spOffsets) - 1; // number of shapes excluding first shape
+ for ($i = 1; $i <= $nm; ++$i) {
+ // MSODRAWING record
+ $record = 0x00EC; // Record identifier
+
+ // chunk of Escher stream for one shape
+
+ $dataChunk = substr($data, $spOffsets[$i -1], $spOffsets[$i] - $spOffsets[$i - 1]);
+
+ $length = strlen($dataChunk);
+ $header = pack("vv", $record, $length);
+
+ $this->_append($header . $dataChunk);
+
+ // OBJ record
+ $record = 0x005D; // record identifier
+ $objData = '';
+
+ // ftCmo
+ $objData .=
+ pack('vvvvvVVV'
+ , 0x0015 // 0x0015 = ftCmo
+ , 0x0012 // length of ftCmo data
+ , 0x0008 // object type, 0x0008 = picture
+ , $i // object id number, Excel seems to use 1-based index, local for the sheet
+ , 0x6011 // option flags, 0x6011 is what OpenOffice.org uses
+ , 0 // reserved
+ , 0 // reserved
+ , 0 // reserved
+ );
+ // ftEnd
+ $objData .=
+ pack('vv'
+ , 0x0000 // 0x0000 = ftEnd
+ , 0x0000 // length of ftEnd data
+ );
+
+ $length = strlen($objData);
+ $header = pack('vv', $record, $length);
+ $this->_append($header . $objData);
}
}
-
- // set last shape index
- $dgContainer->setLastSpId($lastSpId);
-
- // write the Escher stream
- $writer = new PHPExcel_Writer_Excel5_Escher($escher);
- $data = $writer->close();
- $spOffsets = $writer->getSpOffsets();
-
- // write the neccesary MSODRAWING, OBJ records
-
- // split the Escher stream
- $spOffsets[0] = 0;
- $nm = count($spOffsets) - 1; // number of shapes excluding first shape
- for ($i = 1; $i <= $nm; ++$i) {
- // MSODRAWING record
- $record = 0x00EC; // Record identifier
-
- // chunk of Escher stream for one shape
-
- $dataChunk = substr($data, $spOffsets[$i -1], $spOffsets[$i] - $spOffsets[$i - 1]);
-
- $length = strlen($dataChunk);
- $header = pack("vv", $record, $length);
-
- $this->_append($header . $dataChunk);
-
- // OBJ record
- $record = 0x005D; // record identifier
- $objData = '';
-
- // ftCmo
- $objData .=
- pack('vvvvvVVV'
- , 0x0015 // 0x0015 = ftCmo
- , 0x0012 // length of ftCmo data
- , 0x0008 // object type, 0x0008 = picture
- , $i // object id number, Excel seems to use 1-based index, local for the sheet
- , 0x6011 // option flags, 0x6011 is what OpenOffice.org uses
- , 0 // reserved
- , 0 // reserved
- , 0 // reserved
- );
- // ftEnd
- $objData .=
- pack('vv'
- , 0x0000 // 0x0000 = ftEnd
- , 0x0000 // length of ftEnd data
- );
-
- $length = strlen($objData);
- $header = pack('vv', $record, $length);
- $this->_append($header . $objData);
- }
-
}
/**
@@ -3006,4 +2953,4 @@ class PHPExcel_Writer_Excel5_Worksheet extends PHPExcel_Writer_Excel5_BIFFwriter
return 0;
}
-}
+}
\ No newline at end of file
diff --git a/libraries/PHPExcel/PHPExcel/Writer/Excel5/Xf.php b/libraries/PHPExcel/PHPExcel/Writer/Excel5/Xf.php
index 9246a34..27632f3 100644
--- a/libraries/PHPExcel/PHPExcel/Writer/Excel5/Xf.php
+++ b/libraries/PHPExcel/PHPExcel/Writer/Excel5/Xf.php
@@ -22,7 +22,7 @@
* @package PHPExcel_Writer_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 PEAR::Spreadsheet_Excel_Writer_Format (used as the base for this class):
diff --git a/libraries/PHPExcel/PHPExcel/Writer/HTML.php b/libraries/PHPExcel/PHPExcel/Writer/HTML.php
index 3c892cf..b6667f5 100644
--- a/libraries/PHPExcel/PHPExcel/Writer/HTML.php
+++ b/libraries/PHPExcel/PHPExcel/Writer/HTML.php
@@ -22,7 +22,7 @@
* @package PHPExcel_Writer
* @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
*/
@@ -152,6 +152,8 @@ class PHPExcel_Writer_HTML implements PHPExcel_Writer_IWriter {
// garbage collect
$this->_phpExcel->garbageCollect();
+ $saveDebugLog = PHPExcel_Calculation::getInstance()->writeDebugLog;
+ PHPExcel_Calculation::getInstance()->writeDebugLog = false;
$saveArrayReturnType = PHPExcel_Calculation::getArrayReturnType();
PHPExcel_Calculation::setArrayReturnType(PHPExcel_Calculation::RETURN_ARRAY_AS_VALUE);
@@ -182,6 +184,7 @@ class PHPExcel_Writer_HTML implements PHPExcel_Writer_IWriter {
fclose($fileHandle);
PHPExcel_Calculation::setArrayReturnType($saveArrayReturnType);
+ PHPExcel_Calculation::getInstance()->writeDebugLog = $saveDebugLog;
}
/**
@@ -330,7 +333,7 @@ class PHPExcel_Writer_HTML implements PHPExcel_Writer_IWriter {
// row min,max
$rowMin = $dimension[0][1];
$rowMax = $dimension[1][1];
-
+
// calculate start of <tbody>, <thead>
$tbodyStart = $rowMin;
$tbodyEnd = $rowMax;
@@ -338,7 +341,7 @@ class PHPExcel_Writer_HTML implements PHPExcel_Writer_IWriter {
$theadEnd = 0; // default: no </thead>
if ($sheet->getPageSetup()->isRowsToRepeatAtTopSet()) {
$rowsToRepeatAtTop = $sheet->getPageSetup()->getRowsToRepeatAtTop();
-
+
// we can only support repeating rows that start at top row
if ($rowsToRepeatAtTop[0] == 1) {
$theadStart = $rowsToRepeatAtTop[0];
@@ -346,7 +349,7 @@ class PHPExcel_Writer_HTML implements PHPExcel_Writer_IWriter {
$tbodyStart = $rowsToRepeatAtTop[1] + 1;
}
}
-
+
// Loop through cells
$rowData = null;
for ($row = $rowMin; $row <= $rowMax; ++$row) {
diff --git a/libraries/PHPExcel/PHPExcel/Writer/IWriter.php b/libraries/PHPExcel/PHPExcel/Writer/IWriter.php
index ec5331e..35fd689 100644
--- a/libraries/PHPExcel/PHPExcel/Writer/IWriter.php
+++ b/libraries/PHPExcel/PHPExcel/Writer/IWriter.php
@@ -22,7 +22,7 @@
* @package PHPExcel_Writer
* @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
*/
diff --git a/libraries/PHPExcel/PHPExcel/Writer/PDF.php b/libraries/PHPExcel/PHPExcel/Writer/PDF.php
index 570ce9d..f588635 100644
--- a/libraries/PHPExcel/PHPExcel/Writer/PDF.php
+++ b/libraries/PHPExcel/PHPExcel/Writer/PDF.php
@@ -22,7 +22,7 @@
* @package PHPExcel_Writer
* @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
*/
diff --git a/libraries/PHPExcel/PHPExcel/Writer/Serialized.php b/libraries/PHPExcel/PHPExcel/Writer/Serialized.php
index 603c4f7..51616b4 100644
--- a/libraries/PHPExcel/PHPExcel/Writer/Serialized.php
+++ b/libraries/PHPExcel/PHPExcel/Writer/Serialized.php
@@ -22,7 +22,7 @@
* @package PHPExcel_Writer
* @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
*/
@@ -163,10 +163,10 @@ class PHPExcel_Writer_Serialized implements PHPExcel_Writer_IWriter
// PHPExcel
$objWriter->startElement('PHPExcel');
- $objWriter->writeAttribute('version', '1.7.3c');
+ $objWriter->writeAttribute('version', '1.7.4');
// Comment
- $objWriter->writeComment('This file has been generated using PHPExcel v1.7.3c (http://www.codeplex.com/PHPExcel). It contains a base64 encoded serialized version of the PHPExcel internal object.');
+ $objWriter->writeComment('This file has been generated using PHPExcel v1.7.4 (http://www.codeplex.com/PHPExcel). It contains a base64 encoded serialized version of the PHPExcel internal object.');
// Data
$objWriter->startElement('data');
hooks/post-receive
--
phpMyAdmin
More information about the Git
mailing list