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-p...": $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...": + $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-p...": + $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/officeDo...": $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/%7D * @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