Merge branch 'develop' of https://github.com/PHPOffice/PHPExcel into develop
This commit is contained in:
commit
d41e68b919
|
@ -42,6 +42,13 @@ if (!defined('PHPEXCEL_ROOT')) {
|
||||||
*/
|
*/
|
||||||
class PHPExcel
|
class PHPExcel
|
||||||
{
|
{
|
||||||
|
/**
|
||||||
|
* Unique ID
|
||||||
|
*
|
||||||
|
* @var string
|
||||||
|
*/
|
||||||
|
private $_uniqueID;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Document properties
|
* Document properties
|
||||||
*
|
*
|
||||||
|
@ -63,6 +70,13 @@ class PHPExcel
|
||||||
*/
|
*/
|
||||||
private $_workSheetCollection = array();
|
private $_workSheetCollection = array();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Calculation Engine
|
||||||
|
*
|
||||||
|
* @var PHPExcel_Calculation
|
||||||
|
*/
|
||||||
|
private $_calculationEngine = NULL;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Active sheet index
|
* Active sheet index
|
||||||
*
|
*
|
||||||
|
@ -103,6 +117,9 @@ class PHPExcel
|
||||||
*/
|
*/
|
||||||
public function __construct()
|
public function __construct()
|
||||||
{
|
{
|
||||||
|
$this->_uniqueID = uniqid();
|
||||||
|
$this->_calculationEngine = PHPExcel_Calculation::getInstance($this);
|
||||||
|
|
||||||
// Initialise worksheet collection and add one worksheet
|
// Initialise worksheet collection and add one worksheet
|
||||||
$this->_workSheetCollection = array();
|
$this->_workSheetCollection = array();
|
||||||
$this->_workSheetCollection[] = new PHPExcel_Worksheet($this);
|
$this->_workSheetCollection[] = new PHPExcel_Worksheet($this);
|
||||||
|
@ -126,13 +143,22 @@ class PHPExcel
|
||||||
$this->addCellStyleXf(new PHPExcel_Style);
|
$this->addCellStyleXf(new PHPExcel_Style);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Code to execute when this worksheet is unset()
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
public function __destruct() {
|
||||||
|
PHPExcel_Calculation::unsetInstance($this);
|
||||||
|
$this->disconnectWorksheets();
|
||||||
|
} // function __destruct()
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Disconnect all worksheets from this PHPExcel workbook object,
|
* Disconnect all worksheets from this PHPExcel workbook object,
|
||||||
* typically so that the PHPExcel object can be unset
|
* typically so that the PHPExcel object can be unset
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
public function disconnectWorksheets() {
|
public function disconnectWorksheets()
|
||||||
|
{
|
||||||
$worksheet = NULL;
|
$worksheet = NULL;
|
||||||
foreach($this->_workSheetCollection as $k => &$worksheet) {
|
foreach($this->_workSheetCollection as $k => &$worksheet) {
|
||||||
$worksheet->disconnectCells();
|
$worksheet->disconnectCells();
|
||||||
|
@ -142,13 +168,15 @@ class PHPExcel
|
||||||
$this->_workSheetCollection = array();
|
$this->_workSheetCollection = array();
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Code to execute when this worksheet is unset()
|
* Return the calculation engine for this worksheet
|
||||||
*
|
*
|
||||||
*/
|
* @return PHPExcel_Calculation
|
||||||
function __destruct() {
|
*/
|
||||||
$this->disconnectWorksheets();
|
public function getCalculationEngine()
|
||||||
}
|
{
|
||||||
|
return $this->_calculationEngine;
|
||||||
|
} // function getCellCacheController()
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Get properties
|
* Get properties
|
||||||
|
@ -849,12 +877,14 @@ class PHPExcel
|
||||||
foreach ($sheet->getColumnDimensions() as $columnDimension) {
|
foreach ($sheet->getColumnDimensions() as $columnDimension) {
|
||||||
$columnDimension->setXfIndex( $map[$columnDimension->getXfIndex()] );
|
$columnDimension->setXfIndex( $map[$columnDimension->getXfIndex()] );
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
// also do garbage collection for all the sheets
|
// also do garbage collection for all the sheets
|
||||||
foreach ($this->getWorksheetIterator() as $sheet) {
|
|
||||||
$sheet->garbageCollect();
|
$sheet->garbageCollect();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public function getID() {
|
||||||
|
return $this->_uniqueID;
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -154,8 +154,8 @@ class PHPExcel_CachedObjectStorage_APC extends PHPExcel_CachedObjectStorage_Cach
|
||||||
// Set current entry to the requested entry
|
// Set current entry to the requested entry
|
||||||
$this->_currentObjectID = $pCoord;
|
$this->_currentObjectID = $pCoord;
|
||||||
$this->_currentObject = unserialize($obj);
|
$this->_currentObject = unserialize($obj);
|
||||||
// Re-attach the parent worksheet
|
// Re-attach this as the cell's parent
|
||||||
$this->_currentObject->attach($this->_parent);
|
$this->_currentObject->attach($this);
|
||||||
|
|
||||||
// Return requested entry
|
// Return requested entry
|
||||||
return $this->_currentObject;
|
return $this->_currentObject;
|
||||||
|
|
|
@ -86,6 +86,11 @@ abstract class PHPExcel_CachedObjectStorage_CacheBase {
|
||||||
} // function __construct()
|
} // function __construct()
|
||||||
|
|
||||||
|
|
||||||
|
public function getParent()
|
||||||
|
{
|
||||||
|
return $this->_parent;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Is a value set in the current PHPExcel_CachedObjectStorage_ICache for an indexed cell?
|
* Is a value set in the current PHPExcel_CachedObjectStorage_ICache for an indexed cell?
|
||||||
*
|
*
|
||||||
|
@ -101,6 +106,27 @@ abstract class PHPExcel_CachedObjectStorage_CacheBase {
|
||||||
} // function isDataSet()
|
} // function isDataSet()
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Move a cell object from one address to another
|
||||||
|
*
|
||||||
|
* @param string $fromAddress Current address of the cell to move
|
||||||
|
* @param string $toAddress Destination address of the cell to move
|
||||||
|
* @return boolean
|
||||||
|
*/
|
||||||
|
public function moveCell($fromAddress, $toAddress) {
|
||||||
|
if ($fromAddress === $this->_currentObjectID) {
|
||||||
|
$this->_currentObjectID = $toAddress;
|
||||||
|
}
|
||||||
|
$this->_currentCellIsDirty = true;
|
||||||
|
if (isset($this->_cellCache[$fromAddress])) {
|
||||||
|
$this->_cellCache[$toAddress] = &$this->_cellCache[$fromAddress];
|
||||||
|
unset($this->_cellCache[$fromAddress]);
|
||||||
|
}
|
||||||
|
|
||||||
|
return TRUE;
|
||||||
|
} // function moveCell()
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Add or Update a cell in cache
|
* Add or Update a cell in cache
|
||||||
*
|
*
|
||||||
|
@ -188,6 +214,23 @@ abstract class PHPExcel_CachedObjectStorage_CacheBase {
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
public function getCurrentAddress()
|
||||||
|
{
|
||||||
|
return $this->_currentObjectID;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function getCurrentColumn()
|
||||||
|
{
|
||||||
|
list($column,$row) = sscanf($this->_currentObjectID, '%[A-Z]%d');
|
||||||
|
return $column;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function getCurrentRow()
|
||||||
|
{
|
||||||
|
list($column,$row) = sscanf($this->_currentObjectID, '%[A-Z]%d');
|
||||||
|
return $row;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Get highest worksheet column
|
* Get highest worksheet column
|
||||||
*
|
*
|
||||||
|
@ -237,7 +280,7 @@ abstract class PHPExcel_CachedObjectStorage_CacheBase {
|
||||||
|
|
||||||
$this->_parent = $parent;
|
$this->_parent = $parent;
|
||||||
if (($this->_currentObject !== NULL) && (is_object($this->_currentObject))) {
|
if (($this->_currentObject !== NULL) && (is_object($this->_currentObject))) {
|
||||||
$this->_currentObject->attach($parent);
|
$this->_currentObject->attach($this);
|
||||||
}
|
}
|
||||||
} // function copyCellCollection()
|
} // function copyCellCollection()
|
||||||
|
|
||||||
|
|
|
@ -124,8 +124,8 @@ class PHPExcel_CachedObjectStorage_DiscISAM extends PHPExcel_CachedObjectStorage
|
||||||
$this->_currentObjectID = $pCoord;
|
$this->_currentObjectID = $pCoord;
|
||||||
fseek($this->_fileHandle,$this->_cellCache[$pCoord]['ptr']);
|
fseek($this->_fileHandle,$this->_cellCache[$pCoord]['ptr']);
|
||||||
$this->_currentObject = unserialize(fread($this->_fileHandle,$this->_cellCache[$pCoord]['sz']));
|
$this->_currentObject = unserialize(fread($this->_fileHandle,$this->_cellCache[$pCoord]['sz']));
|
||||||
// Re-attach the parent worksheet
|
// Re-attach this as the cell's parent
|
||||||
$this->_currentObject->attach($this->_parent);
|
$this->_currentObject->attach($this);
|
||||||
|
|
||||||
// Return requested entry
|
// Return requested entry
|
||||||
return $this->_currentObject;
|
return $this->_currentObject;
|
||||||
|
|
|
@ -96,8 +96,8 @@ class PHPExcel_CachedObjectStorage_Igbinary extends PHPExcel_CachedObjectStorage
|
||||||
// Set current entry to the requested entry
|
// Set current entry to the requested entry
|
||||||
$this->_currentObjectID = $pCoord;
|
$this->_currentObjectID = $pCoord;
|
||||||
$this->_currentObject = igbinary_unserialize($this->_cellCache[$pCoord]);
|
$this->_currentObject = igbinary_unserialize($this->_cellCache[$pCoord]);
|
||||||
// Re-attach the parent worksheet
|
// Re-attach this as the cell's parent
|
||||||
$this->_currentObject->attach($this->_parent);
|
$this->_currentObject->attach($this);
|
||||||
|
|
||||||
// Return requested entry
|
// Return requested entry
|
||||||
return $this->_currentObject;
|
return $this->_currentObject;
|
||||||
|
|
|
@ -158,8 +158,8 @@ class PHPExcel_CachedObjectStorage_Memcache extends PHPExcel_CachedObjectStorage
|
||||||
// Set current entry to the requested entry
|
// Set current entry to the requested entry
|
||||||
$this->_currentObjectID = $pCoord;
|
$this->_currentObjectID = $pCoord;
|
||||||
$this->_currentObject = unserialize($obj);
|
$this->_currentObject = unserialize($obj);
|
||||||
// Re-attach the parent worksheet
|
// Re-attach this as the cell's parent
|
||||||
$this->_currentObject->attach($this->_parent);
|
$this->_currentObject->attach($this);
|
||||||
|
|
||||||
// Return requested entry
|
// Return requested entry
|
||||||
return $this->_currentObject;
|
return $this->_currentObject;
|
||||||
|
|
|
@ -48,11 +48,15 @@ class PHPExcel_CachedObjectStorage_Memory extends PHPExcel_CachedObjectStorage_C
|
||||||
*
|
*
|
||||||
* @param string $pCoord Coordinate address of the cell to update
|
* @param string $pCoord Coordinate address of the cell to update
|
||||||
* @param PHPExcel_Cell $cell Cell to update
|
* @param PHPExcel_Cell $cell Cell to update
|
||||||
* @return void
|
* @return PHPExcel_Cell
|
||||||
* @throws PHPExcel_Exception
|
* @throws PHPExcel_Exception
|
||||||
*/
|
*/
|
||||||
public function addCacheData($pCoord, PHPExcel_Cell $cell) {
|
public function addCacheData($pCoord, PHPExcel_Cell $cell) {
|
||||||
$this->_cellCache[$pCoord] = $cell;
|
$this->_cellCache[$pCoord] = $cell;
|
||||||
|
|
||||||
|
// Set current entry to the new/updated entry
|
||||||
|
$this->_currentObjectID = $pCoord;
|
||||||
|
|
||||||
return $cell;
|
return $cell;
|
||||||
} // function addCacheData()
|
} // function addCacheData()
|
||||||
|
|
||||||
|
@ -67,10 +71,14 @@ class PHPExcel_CachedObjectStorage_Memory extends PHPExcel_CachedObjectStorage_C
|
||||||
public function getCacheData($pCoord) {
|
public function getCacheData($pCoord) {
|
||||||
// Check if the entry that has been requested actually exists
|
// Check if the entry that has been requested actually exists
|
||||||
if (!isset($this->_cellCache[$pCoord])) {
|
if (!isset($this->_cellCache[$pCoord])) {
|
||||||
|
$this->_currentObjectID = NULL;
|
||||||
// Return null if requested entry doesn't exist in cache
|
// Return null if requested entry doesn't exist in cache
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Set current entry to the requested entry
|
||||||
|
$this->_currentObjectID = $pCoord;
|
||||||
|
|
||||||
// Return requested entry
|
// Return requested entry
|
||||||
return $this->_cellCache[$pCoord];
|
return $this->_cellCache[$pCoord];
|
||||||
} // function getCacheData()
|
} // function getCacheData()
|
||||||
|
|
|
@ -96,8 +96,8 @@ class PHPExcel_CachedObjectStorage_MemoryGZip extends PHPExcel_CachedObjectStora
|
||||||
// Set current entry to the requested entry
|
// Set current entry to the requested entry
|
||||||
$this->_currentObjectID = $pCoord;
|
$this->_currentObjectID = $pCoord;
|
||||||
$this->_currentObject = unserialize(gzinflate($this->_cellCache[$pCoord]));
|
$this->_currentObject = unserialize(gzinflate($this->_cellCache[$pCoord]));
|
||||||
// Re-attach the parent worksheet
|
// Re-attach this as the cell's parent
|
||||||
$this->_currentObject->attach($this->_parent);
|
$this->_currentObject->attach($this);
|
||||||
|
|
||||||
// Return requested entry
|
// Return requested entry
|
||||||
return $this->_currentObject;
|
return $this->_currentObject;
|
||||||
|
|
|
@ -96,8 +96,8 @@ class PHPExcel_CachedObjectStorage_MemorySerialized extends PHPExcel_CachedObjec
|
||||||
// Set current entry to the requested entry
|
// Set current entry to the requested entry
|
||||||
$this->_currentObjectID = $pCoord;
|
$this->_currentObjectID = $pCoord;
|
||||||
$this->_currentObject = unserialize($this->_cellCache[$pCoord]);
|
$this->_currentObject = unserialize($this->_cellCache[$pCoord]);
|
||||||
// Re-attach the parent worksheet
|
// Re-attach this as the cell's parent
|
||||||
$this->_currentObject->attach($this->_parent);
|
$this->_currentObject->attach($this);
|
||||||
|
|
||||||
// Return requested entry
|
// Return requested entry
|
||||||
return $this->_currentObject;
|
return $this->_currentObject;
|
||||||
|
|
|
@ -116,8 +116,8 @@ class PHPExcel_CachedObjectStorage_PHPTemp extends PHPExcel_CachedObjectStorage_
|
||||||
$this->_currentObjectID = $pCoord;
|
$this->_currentObjectID = $pCoord;
|
||||||
fseek($this->_fileHandle,$this->_cellCache[$pCoord]['ptr']);
|
fseek($this->_fileHandle,$this->_cellCache[$pCoord]['ptr']);
|
||||||
$this->_currentObject = unserialize(fread($this->_fileHandle,$this->_cellCache[$pCoord]['sz']));
|
$this->_currentObject = unserialize(fread($this->_fileHandle,$this->_cellCache[$pCoord]['sz']));
|
||||||
// Re-attach the parent worksheet
|
// Re-attach this as the cell's parent
|
||||||
$this->_currentObject->attach($this->_parent);
|
$this->_currentObject->attach($this);
|
||||||
|
|
||||||
// Return requested entry
|
// Return requested entry
|
||||||
return $this->_currentObject;
|
return $this->_currentObject;
|
||||||
|
|
|
@ -116,8 +116,8 @@ class PHPExcel_CachedObjectStorage_SQLite extends PHPExcel_CachedObjectStorage_C
|
||||||
|
|
||||||
$cellResult = $cellResultSet->fetchSingle();
|
$cellResult = $cellResultSet->fetchSingle();
|
||||||
$this->_currentObject = unserialize($cellResult);
|
$this->_currentObject = unserialize($cellResult);
|
||||||
// Re-attach the parent worksheet
|
// Re-attach this as the cell's parent
|
||||||
$this->_currentObject->attach($this->_parent);
|
$this->_currentObject->attach($this);
|
||||||
|
|
||||||
// Return requested entry
|
// Return requested entry
|
||||||
return $this->_currentObject;
|
return $this->_currentObject;
|
||||||
|
@ -169,6 +169,32 @@ class PHPExcel_CachedObjectStorage_SQLite extends PHPExcel_CachedObjectStorage_C
|
||||||
} // function deleteCacheData()
|
} // function deleteCacheData()
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Move a cell object from one address to another
|
||||||
|
*
|
||||||
|
* @param string $fromAddress Current address of the cell to move
|
||||||
|
* @param string $toAddress Destination address of the cell to move
|
||||||
|
* @return boolean
|
||||||
|
*/
|
||||||
|
public function moveCell($fromAddress, $toAddress) {
|
||||||
|
if ($fromAddress === $this->_currentObjectID) {
|
||||||
|
$this->_currentObjectID = $toAddress;
|
||||||
|
}
|
||||||
|
|
||||||
|
$query = "DELETE FROM kvp_".$this->_TableName." WHERE id='".$toAddress."'";
|
||||||
|
$result = $this->_DBHandle->exec($query);
|
||||||
|
if ($result === false)
|
||||||
|
throw new PHPExcel_Exception($this->_DBHandle->lastErrorMsg());
|
||||||
|
|
||||||
|
$query = "UPDATE kvp_".$this->_TableName." SET id='".$toAddress."' WHERE id='".$fromAddress."'";
|
||||||
|
$result = $this->_DBHandle->exec($query);
|
||||||
|
if ($result === false)
|
||||||
|
throw new PHPExcel_Exception($this->_DBHandle->lastErrorMsg());
|
||||||
|
|
||||||
|
return TRUE;
|
||||||
|
} // function moveCell()
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Get a list of all cell addresses currently held in cache
|
* Get a list of all cell addresses currently held in cache
|
||||||
*
|
*
|
||||||
|
@ -256,6 +282,10 @@ class PHPExcel_CachedObjectStorage_SQLite extends PHPExcel_CachedObjectStorage_C
|
||||||
* Destroy this cell collection
|
* Destroy this cell collection
|
||||||
*/
|
*/
|
||||||
public function __destruct() {
|
public function __destruct() {
|
||||||
|
if (!is_null($this->_DBHandle)) {
|
||||||
|
$this->_DBHandle->queryExec('DROP TABLE kvp_'.$this->_TableName);
|
||||||
|
$this->_DBHandle->close();
|
||||||
|
}
|
||||||
$this->_DBHandle = null;
|
$this->_DBHandle = null;
|
||||||
} // function __destruct()
|
} // function __destruct()
|
||||||
|
|
||||||
|
|
|
@ -49,6 +49,11 @@ class PHPExcel_CachedObjectStorage_SQLite3 extends PHPExcel_CachedObjectStorage_
|
||||||
*/
|
*/
|
||||||
private $_DBHandle = null;
|
private $_DBHandle = null;
|
||||||
|
|
||||||
|
private $_selectQuery;
|
||||||
|
private $_insertQuery;
|
||||||
|
private $_updateQuery;
|
||||||
|
private $_deleteQuery;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Store cell data in cache for the current cell object if it's "dirty",
|
* Store cell data in cache for the current cell object if it's "dirty",
|
||||||
* and the 'nullify' the current cell object
|
* and the 'nullify' the current cell object
|
||||||
|
@ -60,10 +65,9 @@ class PHPExcel_CachedObjectStorage_SQLite3 extends PHPExcel_CachedObjectStorage_
|
||||||
if ($this->_currentCellIsDirty) {
|
if ($this->_currentCellIsDirty) {
|
||||||
$this->_currentObject->detach();
|
$this->_currentObject->detach();
|
||||||
|
|
||||||
$query = $this->_DBHandle->prepare("INSERT OR REPLACE INTO kvp_".$this->_TableName." VALUES(:id,:data)");
|
$this->_insertQuery->bindValue('id',$this->_currentObjectID,SQLITE3_TEXT);
|
||||||
$query->bindValue('id',$this->_currentObjectID,SQLITE3_TEXT);
|
$this->_insertQuery->bindValue('data',serialize($this->_currentObject),SQLITE3_BLOB);
|
||||||
$query->bindValue('data',serialize($this->_currentObject),SQLITE3_BLOB);
|
$result = $this->_insertQuery->execute();
|
||||||
$result = $query->execute();
|
|
||||||
if ($result === false)
|
if ($result === false)
|
||||||
throw new PHPExcel_Exception($this->_DBHandle->lastErrorMsg());
|
throw new PHPExcel_Exception($this->_DBHandle->lastErrorMsg());
|
||||||
$this->_currentCellIsDirty = false;
|
$this->_currentCellIsDirty = false;
|
||||||
|
@ -106,21 +110,23 @@ class PHPExcel_CachedObjectStorage_SQLite3 extends PHPExcel_CachedObjectStorage_
|
||||||
}
|
}
|
||||||
$this->_storeData();
|
$this->_storeData();
|
||||||
|
|
||||||
$query = "SELECT value FROM kvp_".$this->_TableName." WHERE id='".$pCoord."'";
|
$this->_selectQuery->bindValue('id',$pCoord,SQLITE3_TEXT);
|
||||||
$cellResult = $this->_DBHandle->querySingle($query);
|
$cellResult = $this->_selectQuery->execute();
|
||||||
if ($cellResult === false) {
|
if ($cellResult === FALSE) {
|
||||||
throw new PHPExcel_Exception($this->_DBHandle->lastErrorMsg());
|
throw new PHPExcel_Exception($this->_DBHandle->lastErrorMsg());
|
||||||
} elseif (is_null($cellResult)) {
|
}
|
||||||
|
$cellData = $cellResult->fetchArray(SQLITE3_ASSOC);
|
||||||
|
if ($cellData === FALSE) {
|
||||||
// Return null if requested entry doesn't exist in cache
|
// Return null if requested entry doesn't exist in cache
|
||||||
return null;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Set current entry to the requested entry
|
// Set current entry to the requested entry
|
||||||
$this->_currentObjectID = $pCoord;
|
$this->_currentObjectID = $pCoord;
|
||||||
|
|
||||||
$this->_currentObject = unserialize($cellResult);
|
$this->_currentObject = unserialize($cellData['value']);
|
||||||
// Re-attach the parent worksheet
|
// Re-attach this as the cell's parent
|
||||||
$this->_currentObject->attach($this->_parent);
|
$this->_currentObject->attach($this);
|
||||||
|
|
||||||
// Return requested entry
|
// Return requested entry
|
||||||
return $this->_currentObject;
|
return $this->_currentObject;
|
||||||
|
@ -135,19 +141,18 @@ class PHPExcel_CachedObjectStorage_SQLite3 extends PHPExcel_CachedObjectStorage_
|
||||||
*/
|
*/
|
||||||
public function isDataSet($pCoord) {
|
public function isDataSet($pCoord) {
|
||||||
if ($pCoord === $this->_currentObjectID) {
|
if ($pCoord === $this->_currentObjectID) {
|
||||||
return true;
|
return TRUE;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Check if the requested entry exists in the cache
|
// Check if the requested entry exists in the cache
|
||||||
$query = "SELECT id FROM kvp_".$this->_TableName." WHERE id='".$pCoord."'";
|
$this->_selectQuery->bindValue('id',$pCoord,SQLITE3_TEXT);
|
||||||
$cellResult = $this->_DBHandle->querySingle($query);
|
$cellResult = $this->_selectQuery->execute();
|
||||||
if ($cellResult === false) {
|
if ($cellResult === FALSE) {
|
||||||
throw new PHPExcel_Exception($this->_DBHandle->lastErrorMsg());
|
throw new PHPExcel_Exception($this->_DBHandle->lastErrorMsg());
|
||||||
} elseif (is_null($cellResult)) {
|
|
||||||
// Return null if requested entry doesn't exist in cache
|
|
||||||
return false;
|
|
||||||
}
|
}
|
||||||
return true;
|
$cellData = $cellResult->fetchArray(SQLITE3_ASSOC);
|
||||||
|
|
||||||
|
return ($cellData === FALSE) ? FALSE : TRUE;
|
||||||
} // function isDataSet()
|
} // function isDataSet()
|
||||||
|
|
||||||
|
|
||||||
|
@ -160,17 +165,44 @@ class PHPExcel_CachedObjectStorage_SQLite3 extends PHPExcel_CachedObjectStorage_
|
||||||
public function deleteCacheData($pCoord) {
|
public function deleteCacheData($pCoord) {
|
||||||
if ($pCoord === $this->_currentObjectID) {
|
if ($pCoord === $this->_currentObjectID) {
|
||||||
$this->_currentObject->detach();
|
$this->_currentObject->detach();
|
||||||
$this->_currentObjectID = $this->_currentObject = null;
|
$this->_currentObjectID = $this->_currentObject = NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Check if the requested entry exists in the cache
|
// Check if the requested entry exists in the cache
|
||||||
$query = "DELETE FROM kvp_".$this->_TableName." WHERE id='".$pCoord."'";
|
$this->_deleteQuery->bindValue('id',$pCoord,SQLITE3_TEXT);
|
||||||
$result = $this->_DBHandle->exec($query);
|
$result = $this->_deleteQuery->execute();
|
||||||
|
if ($result === FALSE)
|
||||||
|
throw new PHPExcel_Exception($this->_DBHandle->lastErrorMsg());
|
||||||
|
|
||||||
|
$this->_currentCellIsDirty = FALSE;
|
||||||
|
} // function deleteCacheData()
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Move a cell object from one address to another
|
||||||
|
*
|
||||||
|
* @param string $fromAddress Current address of the cell to move
|
||||||
|
* @param string $toAddress Destination address of the cell to move
|
||||||
|
* @return boolean
|
||||||
|
*/
|
||||||
|
public function moveCell($fromAddress, $toAddress) {
|
||||||
|
if ($fromAddress === $this->_currentObjectID) {
|
||||||
|
$this->_currentObjectID = $toAddress;
|
||||||
|
}
|
||||||
|
|
||||||
|
$this->_deleteQuery->bindValue('id',$toAddress,SQLITE3_TEXT);
|
||||||
|
$result = $this->_deleteQuery->execute();
|
||||||
if ($result === false)
|
if ($result === false)
|
||||||
throw new PHPExcel_Exception($this->_DBHandle->lastErrorMsg());
|
throw new PHPExcel_Exception($this->_DBHandle->lastErrorMsg());
|
||||||
|
|
||||||
$this->_currentCellIsDirty = false;
|
$this->_updateQuery->bindValue('toid',$toAddress,SQLITE3_TEXT);
|
||||||
} // function deleteCacheData()
|
$this->_updateQuery->bindValue('fromid',$fromAddress,SQLITE3_TEXT);
|
||||||
|
$result = $this->_updateQuery->execute();
|
||||||
|
if ($result === false)
|
||||||
|
throw new PHPExcel_Exception($this->_DBHandle->lastErrorMsg());
|
||||||
|
|
||||||
|
return TRUE;
|
||||||
|
} // function moveCell()
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -253,6 +285,11 @@ class PHPExcel_CachedObjectStorage_SQLite3 extends PHPExcel_CachedObjectStorage_
|
||||||
if (!$this->_DBHandle->exec('CREATE TABLE kvp_'.$this->_TableName.' (id VARCHAR(12) PRIMARY KEY, value BLOB)'))
|
if (!$this->_DBHandle->exec('CREATE TABLE kvp_'.$this->_TableName.' (id VARCHAR(12) PRIMARY KEY, value BLOB)'))
|
||||||
throw new PHPExcel_Exception($this->_DBHandle->lastErrorMsg());
|
throw new PHPExcel_Exception($this->_DBHandle->lastErrorMsg());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
$this->_selectQuery = $this->_DBHandle->prepare("SELECT value FROM kvp_".$this->_TableName." WHERE id = :id");
|
||||||
|
$this->_insertQuery = $this->_DBHandle->prepare("INSERT OR REPLACE INTO kvp_".$this->_TableName." VALUES(:id,:data)");
|
||||||
|
$this->_updateQuery = $this->_DBHandle->prepare("UPDATE kvp_".$this->_TableName." SET id=:toId WHERE id=:fromId");
|
||||||
|
$this->_deleteQuery = $this->_DBHandle->prepare("DELETE FROM kvp_".$this->_TableName." WHERE id = :id");
|
||||||
} // function __construct()
|
} // function __construct()
|
||||||
|
|
||||||
|
|
||||||
|
@ -261,6 +298,7 @@ class PHPExcel_CachedObjectStorage_SQLite3 extends PHPExcel_CachedObjectStorage_
|
||||||
*/
|
*/
|
||||||
public function __destruct() {
|
public function __destruct() {
|
||||||
if (!is_null($this->_DBHandle)) {
|
if (!is_null($this->_DBHandle)) {
|
||||||
|
$this->_DBHandle->exec('DROP TABLE kvp_'.$this->_TableName);
|
||||||
$this->_DBHandle->close();
|
$this->_DBHandle->close();
|
||||||
}
|
}
|
||||||
$this->_DBHandle = null;
|
$this->_DBHandle = null;
|
||||||
|
|
|
@ -158,8 +158,8 @@ class PHPExcel_CachedObjectStorage_Wincache extends PHPExcel_CachedObjectStorage
|
||||||
// Set current entry to the requested entry
|
// Set current entry to the requested entry
|
||||||
$this->_currentObjectID = $pCoord;
|
$this->_currentObjectID = $pCoord;
|
||||||
$this->_currentObject = unserialize($obj);
|
$this->_currentObject = unserialize($obj);
|
||||||
// Re-attach the parent worksheet
|
// Re-attach this as the cell's parent
|
||||||
$this->_currentObject->attach($this->_parent);
|
$this->_currentObject->attach($this);
|
||||||
|
|
||||||
// Return requested entry
|
// Return requested entry
|
||||||
return $this->_currentObject;
|
return $this->_currentObject;
|
||||||
|
|
|
@ -0,0 +1,58 @@
|
||||||
|
<?php
|
||||||
|
/**
|
||||||
|
* PHPExcel
|
||||||
|
*
|
||||||
|
* Copyright (c) 2006 - 2012 PHPExcel
|
||||||
|
*
|
||||||
|
* This library is free software; you can redistribute it and/or
|
||||||
|
* modify it under the terms of the GNU Lesser General Public
|
||||||
|
* License as published by the Free Software Foundation; either
|
||||||
|
* version 2.1 of the License, or (at your option) any later version.
|
||||||
|
*
|
||||||
|
* This library is distributed in the hope that it will be useful,
|
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||||
|
* Lesser General Public License for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU Lesser General Public
|
||||||
|
* License along with this library; if not, write to the Free Software
|
||||||
|
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
|
||||||
|
*
|
||||||
|
* @category PHPExcel
|
||||||
|
* @package PHPExcel_Calculation
|
||||||
|
* @copyright Copyright (c) 2006 - 2012 PHPExcel (http://www.codeplex.com/PHPExcel)
|
||||||
|
* @license http://www.gnu.org/licenses/old-licenses/lgpl-2.1.txt LGPL
|
||||||
|
* @version ##VERSION##, ##DATE##
|
||||||
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
class PHPExcel_CalcEngine_CyclicReferenceStack {
|
||||||
|
|
||||||
|
private $_stack = array();
|
||||||
|
|
||||||
|
|
||||||
|
public function count() {
|
||||||
|
return count($this->_stack);
|
||||||
|
}
|
||||||
|
|
||||||
|
public function push($value) {
|
||||||
|
$this->_stack[] = $value;
|
||||||
|
} // function push()
|
||||||
|
|
||||||
|
public function pop() {
|
||||||
|
return array_pop($this->_stack);
|
||||||
|
} // function pop()
|
||||||
|
|
||||||
|
public function onStack($value) {
|
||||||
|
return in_array($value,$this->_stack);
|
||||||
|
}
|
||||||
|
|
||||||
|
public function clear() {
|
||||||
|
$this->_stack = array();
|
||||||
|
} // function push()
|
||||||
|
|
||||||
|
public function showStack() {
|
||||||
|
return $this->_stack;
|
||||||
|
}
|
||||||
|
|
||||||
|
} // class PHPExcel_CalcEngine_CyclicReferenceStack
|
|
@ -0,0 +1,121 @@
|
||||||
|
<?php
|
||||||
|
/**
|
||||||
|
* PHPExcel
|
||||||
|
*
|
||||||
|
* Copyright (c) 2006 - 2012 PHPExcel
|
||||||
|
*
|
||||||
|
* This library is free software; you can redistribute it and/or
|
||||||
|
* modify it under the terms of the GNU Lesser General Public
|
||||||
|
* License as published by the Free Software Foundation; either
|
||||||
|
* version 2.1 of the License, or (at your option) any later version.
|
||||||
|
*
|
||||||
|
* This library is distributed in the hope that it will be useful,
|
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||||
|
* Lesser General Public License for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU Lesser General Public
|
||||||
|
* License along with this library; if not, write to the Free Software
|
||||||
|
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
|
||||||
|
*
|
||||||
|
* @category PHPExcel
|
||||||
|
* @package PHPExcel_Calculation
|
||||||
|
* @copyright Copyright (c) 2006 - 2012 PHPExcel (http://www.codeplex.com/PHPExcel)
|
||||||
|
* @license http://www.gnu.org/licenses/old-licenses/lgpl-2.1.txt LGPL
|
||||||
|
* @version ##VERSION##, ##DATE##
|
||||||
|
*/
|
||||||
|
|
||||||
|
/**
|
||||||
|
* PHPExcel_Calculation_Logger
|
||||||
|
*
|
||||||
|
* @category PHPExcel
|
||||||
|
* @package PHPExcel_Calculation
|
||||||
|
* @copyright Copyright (c) 2006 - 2012 PHPExcel (http://www.codeplex.com/PHPExcel)
|
||||||
|
*/
|
||||||
|
class PHPExcel_CalcEngine_Logger {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Flag to determine whether a debug log should be generated by the calculation engine
|
||||||
|
* If true, then a debug log will be generated
|
||||||
|
* If false, then a debug log will not be generated
|
||||||
|
*
|
||||||
|
* @var boolean
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
private $_writeDebugLog = FALSE;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Flag to determine whether a debug log should be echoed by the calculation engine
|
||||||
|
* If true, then a debug log will be echoed
|
||||||
|
* If false, then a debug log will not be echoed
|
||||||
|
* A debug log can only be echoed if it is generated
|
||||||
|
*
|
||||||
|
* @var boolean
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
private $_echoDebugLog = FALSE;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The debug log generated by the calculation engine
|
||||||
|
*
|
||||||
|
* @var string[]
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
private $_debugLog = array();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The calculation engine cell reference stack
|
||||||
|
*
|
||||||
|
* @var PHPExcel_CalcEngine_CyclicReferenceStack
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
private $_cellStack;
|
||||||
|
|
||||||
|
|
||||||
|
public function __construct(PHPExcel_CalcEngine_CyclicReferenceStack $stack) {
|
||||||
|
$this->_cellStack = $stack;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function setWriteDebugLog($pValue = FALSE) {
|
||||||
|
$this->_writeDebugLog = $pValue;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function getWriteDebugLog() {
|
||||||
|
return $this->_writeDebugLog;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function setEchoDebugLog($pValue = FALSE) {
|
||||||
|
$this->_echoDebugLog = $pValue;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function getEchoDebugLog() {
|
||||||
|
return $this->_echoDebugLog;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function writeDebugLog() {
|
||||||
|
// Only write the debug log if logging is enabled
|
||||||
|
if ($this->_writeDebugLog) {
|
||||||
|
$message = implode(func_get_args());
|
||||||
|
$cellReference = implode(' -> ', $this->_cellStack->showStack());
|
||||||
|
if ($this->_echoDebugLog) {
|
||||||
|
echo $cellReference,
|
||||||
|
($this->_cellStack->count() > 0 ? ' => ' : ''),
|
||||||
|
$message,
|
||||||
|
PHP_EOL;
|
||||||
|
}
|
||||||
|
$this->_debugLog[] = $cellReference .
|
||||||
|
($this->_cellStack->count() > 0 ? ' => ' : '') .
|
||||||
|
$message;
|
||||||
|
}
|
||||||
|
} // function _writeDebug()
|
||||||
|
|
||||||
|
public function clearLog() {
|
||||||
|
$this->_debugLog = array();
|
||||||
|
} // function flushLogger()
|
||||||
|
|
||||||
|
public function getLog() {
|
||||||
|
return $this->_debugLog;
|
||||||
|
} // function flushLogger()
|
||||||
|
|
||||||
|
} // class PHPExcel_CalcEngine_Logger
|
||||||
|
|
File diff suppressed because it is too large
Load Diff
|
@ -67,7 +67,9 @@ class PHPExcel_Calculation_Token_Stack {
|
||||||
} // function last()
|
} // function last()
|
||||||
|
|
||||||
|
|
||||||
function __construct() {
|
function clear() {
|
||||||
|
$this->_stack = array();
|
||||||
|
$this->_count = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
} // class PHPExcel_Calculation_Token_Stack
|
} // class PHPExcel_Calculation_Token_Stack
|
||||||
|
|
|
@ -50,13 +50,6 @@ class PHPExcel_Cell
|
||||||
*/
|
*/
|
||||||
private static $_valueBinder = NULL;
|
private static $_valueBinder = NULL;
|
||||||
|
|
||||||
/**
|
|
||||||
* Cell Address (e.g. A1)
|
|
||||||
*
|
|
||||||
* @var string
|
|
||||||
*/
|
|
||||||
private $_coordinate;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Value of the cell
|
* Value of the cell
|
||||||
*
|
*
|
||||||
|
@ -86,7 +79,7 @@ class PHPExcel_Cell
|
||||||
/**
|
/**
|
||||||
* Parent worksheet
|
* Parent worksheet
|
||||||
*
|
*
|
||||||
* @var PHPExcel_Worksheet
|
* @var PHPExcel_CachedObjectStorage_CacheBase
|
||||||
*/
|
*/
|
||||||
private $_parent;
|
private $_parent;
|
||||||
|
|
||||||
|
@ -110,7 +103,8 @@ class PHPExcel_Cell
|
||||||
* @return void
|
* @return void
|
||||||
**/
|
**/
|
||||||
public function notifyCacheController() {
|
public function notifyCacheController() {
|
||||||
$this->_parent->getCellCacheController()->updateCacheData($this);
|
$this->_parent->updateCacheData($this);
|
||||||
|
|
||||||
return $this;
|
return $this;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -118,7 +112,9 @@ class PHPExcel_Cell
|
||||||
$this->_parent = NULL;
|
$this->_parent = NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
public function attach($parent) {
|
public function attach(PHPExcel_CachedObjectStorage_CacheBase $parent) {
|
||||||
|
|
||||||
|
|
||||||
$this->_parent = $parent;
|
$this->_parent = $parent;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -126,23 +122,18 @@ class PHPExcel_Cell
|
||||||
/**
|
/**
|
||||||
* Create a new Cell
|
* Create a new Cell
|
||||||
*
|
*
|
||||||
* @param string $pColumn
|
|
||||||
* @param int $pRow
|
|
||||||
* @param mixed $pValue
|
* @param mixed $pValue
|
||||||
* @param string $pDataType
|
* @param string $pDataType
|
||||||
* @param PHPExcel_Worksheet $pSheet
|
* @param PHPExcel_Worksheet $pSheet
|
||||||
* @throws PHPExcel_Exception
|
* @throws PHPExcel_Exception
|
||||||
*/
|
*/
|
||||||
public function __construct($pCoordinate = 'A1', $pValue = NULL, $pDataType = NULL, PHPExcel_Worksheet $pSheet = NULL)
|
public function __construct($pValue = NULL, $pDataType = NULL, PHPExcel_Worksheet $pSheet = NULL)
|
||||||
{
|
{
|
||||||
// Initialise cell coordinate
|
|
||||||
$this->_coordinate = strtoupper($pCoordinate);
|
|
||||||
|
|
||||||
// Initialise cell value
|
// Initialise cell value
|
||||||
$this->_value = $pValue;
|
$this->_value = $pValue;
|
||||||
|
|
||||||
// Set worksheet
|
// Set worksheet cache
|
||||||
$this->_parent = $pSheet;
|
$this->_parent = $pSheet->getCellCacheController();
|
||||||
|
|
||||||
// Set datatype?
|
// Set datatype?
|
||||||
if ($pDataType !== NULL) {
|
if ($pDataType !== NULL) {
|
||||||
|
@ -166,8 +157,7 @@ class PHPExcel_Cell
|
||||||
*/
|
*/
|
||||||
public function getColumn()
|
public function getColumn()
|
||||||
{
|
{
|
||||||
list($column) = sscanf($this->_coordinate, '%[A-Z]%d');
|
return $this->_parent->getCurrentColumn();
|
||||||
return $column;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -177,8 +167,7 @@ class PHPExcel_Cell
|
||||||
*/
|
*/
|
||||||
public function getRow()
|
public function getRow()
|
||||||
{
|
{
|
||||||
list(,$row) = sscanf($this->_coordinate, '%[A-Z]%d');
|
return $this->_parent->getCurrentRow();
|
||||||
return $row;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -188,7 +177,7 @@ class PHPExcel_Cell
|
||||||
*/
|
*/
|
||||||
public function getCoordinate()
|
public function getCoordinate()
|
||||||
{
|
{
|
||||||
return $this->_coordinate;
|
return $this->_parent->getCurrentAddress();
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -210,7 +199,7 @@ class PHPExcel_Cell
|
||||||
{
|
{
|
||||||
return (string) PHPExcel_Style_NumberFormat::toFormattedString(
|
return (string) PHPExcel_Style_NumberFormat::toFormattedString(
|
||||||
$this->getCalculatedValue(),
|
$this->getCalculatedValue(),
|
||||||
$this->_parent->getParent()->getCellXfByIndex($this->getXfIndex())
|
$this->getWorksheet()->getParent()->getCellXfByIndex($this->getXfIndex())
|
||||||
->getNumberFormat()->getFormatCode()
|
->getNumberFormat()->getFormatCode()
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
@ -284,31 +273,39 @@ class PHPExcel_Cell
|
||||||
*/
|
*/
|
||||||
public function getCalculatedValue($resetLog = TRUE)
|
public function getCalculatedValue($resetLog = TRUE)
|
||||||
{
|
{
|
||||||
// echo 'Cell '.$this->getCoordinate().' value is a '.$this->_dataType.' with a value of '.$this->getValue().'<br />';
|
//echo 'Cell '.$this->getCoordinate().' value is a '.$this->_dataType.' with a value of '.$this->getValue().PHP_EOL;
|
||||||
if ($this->_dataType == PHPExcel_Cell_DataType::TYPE_FORMULA) {
|
if ($this->_dataType == PHPExcel_Cell_DataType::TYPE_FORMULA) {
|
||||||
try {
|
try {
|
||||||
// echo 'Cell value for '.$this->getCoordinate().' is a formula: Calculating value<br />';
|
//echo 'Cell value for '.$this->getCoordinate().' is a formula: Calculating value'.PHP_EOL;
|
||||||
$result = PHPExcel_Calculation::getInstance()->calculateCellValue($this,$resetLog);
|
$result = PHPExcel_Calculation::getInstance(
|
||||||
// echo $this->getCoordinate().' calculation result is '.$result.'<br />';
|
$this->getWorksheet()->getParent()
|
||||||
|
)->calculateCellValue($this,$resetLog);
|
||||||
|
//echo $this->getCoordinate().' calculation result is '.$result.PHP_EOL;
|
||||||
|
// We don't yet handle array returns
|
||||||
|
if (is_array($result)) {
|
||||||
|
while (is_array($result)) {
|
||||||
|
$result = array_pop($result);
|
||||||
|
}
|
||||||
|
}
|
||||||
} catch ( PHPExcel_Exception $ex ) {
|
} catch ( PHPExcel_Exception $ex ) {
|
||||||
if (($ex->getMessage() === 'Unable to access External Workbook') && ($this->_calculatedValue !== NULL)) {
|
if (($ex->getMessage() === 'Unable to access External Workbook') && ($this->_calculatedValue !== NULL)) {
|
||||||
// echo 'Returning fallback value of '.$this->_calculatedValue.' for cell '.$this->getCoordinate().'<br />';
|
//echo 'Returning fallback value of '.$this->_calculatedValue.' for cell '.$this->getCoordinate().PHP_EOL;
|
||||||
return $this->_calculatedValue; // Fallback for calculations referencing external files.
|
return $this->_calculatedValue; // Fallback for calculations referencing external files.
|
||||||
}
|
}
|
||||||
// echo 'Calculation Exception: '.$ex->getMessage().'<br />';
|
//echo 'Calculation Exception: '.$ex->getMessage().PHP_EOL;
|
||||||
$result = '#N/A';
|
$result = '#N/A';
|
||||||
throw(
|
throw(
|
||||||
new PHPExcel_Calculation_Exception(
|
new PHPExcel_Calculation_Exception(
|
||||||
$this->getParent()->getTitle().'!'.$this->getCoordinate().' -> '.$ex->getMessage()
|
$this->getWorksheet()->getTitle().'!'.$this->getCoordinate().' -> '.$ex->getMessage()
|
||||||
)
|
)
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
if ($result === '#Not Yet Implemented') {
|
if ($result === '#Not Yet Implemented') {
|
||||||
// echo 'Returning fallback value of '.$this->_calculatedValue.' for cell '.$this->getCoordinate().'<br />';
|
//echo 'Returning fallback value of '.$this->_calculatedValue.' for cell '.$this->getCoordinate().PHP_EOL;
|
||||||
return $this->_calculatedValue; // Fallback if calculation engine does not support the formula.
|
return $this->_calculatedValue; // Fallback if calculation engine does not support the formula.
|
||||||
}
|
}
|
||||||
// echo 'Returning calculated value of '.$result.' for cell '.$this->getCoordinate().'<br />';
|
//echo 'Returning calculated value of '.$result.' for cell '.$this->getCoordinate().PHP_EOL;
|
||||||
return $result;
|
return $result;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -388,7 +385,7 @@ class PHPExcel_Cell
|
||||||
throw new PHPExcel_Exception('Cannot check for data validation when cell is not bound to a worksheet');
|
throw new PHPExcel_Exception('Cannot check for data validation when cell is not bound to a worksheet');
|
||||||
}
|
}
|
||||||
|
|
||||||
return $this->_parent->dataValidationExists($this->getCoordinate());
|
return $this->getWorksheet()->dataValidationExists($this->getCoordinate());
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -403,7 +400,7 @@ class PHPExcel_Cell
|
||||||
throw new PHPExcel_Exception('Cannot get data validation for cell that is not bound to a worksheet');
|
throw new PHPExcel_Exception('Cannot get data validation for cell that is not bound to a worksheet');
|
||||||
}
|
}
|
||||||
|
|
||||||
return $this->_parent->getDataValidation($this->getCoordinate());
|
return $this->getWorksheet()->getDataValidation($this->getCoordinate());
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -419,7 +416,7 @@ class PHPExcel_Cell
|
||||||
throw new PHPExcel_Exception('Cannot set data validation for cell that is not bound to a worksheet');
|
throw new PHPExcel_Exception('Cannot set data validation for cell that is not bound to a worksheet');
|
||||||
}
|
}
|
||||||
|
|
||||||
$this->_parent->setDataValidation($this->getCoordinate(), $pDataValidation);
|
$this->getWorksheet()->setDataValidation($this->getCoordinate(), $pDataValidation);
|
||||||
|
|
||||||
return $this->notifyCacheController();
|
return $this->notifyCacheController();
|
||||||
}
|
}
|
||||||
|
@ -436,7 +433,7 @@ class PHPExcel_Cell
|
||||||
throw new PHPExcel_Exception('Cannot check for hyperlink when cell is not bound to a worksheet');
|
throw new PHPExcel_Exception('Cannot check for hyperlink when cell is not bound to a worksheet');
|
||||||
}
|
}
|
||||||
|
|
||||||
return $this->_parent->hyperlinkExists($this->getCoordinate());
|
return $this->getWorksheet()->hyperlinkExists($this->getCoordinate());
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -451,7 +448,7 @@ class PHPExcel_Cell
|
||||||
throw new PHPExcel_Exception('Cannot get hyperlink for cell that is not bound to a worksheet');
|
throw new PHPExcel_Exception('Cannot get hyperlink for cell that is not bound to a worksheet');
|
||||||
}
|
}
|
||||||
|
|
||||||
return $this->_parent->getHyperlink($this->getCoordinate());
|
return $this->getWorksheet()->getHyperlink($this->getCoordinate());
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -467,7 +464,7 @@ class PHPExcel_Cell
|
||||||
throw new PHPExcel_Exception('Cannot set hyperlink for cell that is not bound to a worksheet');
|
throw new PHPExcel_Exception('Cannot set hyperlink for cell that is not bound to a worksheet');
|
||||||
}
|
}
|
||||||
|
|
||||||
$this->_parent->setHyperlink($this->getCoordinate(), $pHyperlink);
|
$this->getWorksheet()->setHyperlink($this->getCoordinate(), $pHyperlink);
|
||||||
|
|
||||||
return $this->notifyCacheController();
|
return $this->notifyCacheController();
|
||||||
}
|
}
|
||||||
|
@ -481,6 +478,15 @@ class PHPExcel_Cell
|
||||||
return $this->_parent;
|
return $this->_parent;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get parent worksheet
|
||||||
|
*
|
||||||
|
* @return PHPExcel_Worksheet
|
||||||
|
*/
|
||||||
|
public function getWorksheet() {
|
||||||
|
return $this->_parent->getParent();
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Re-bind parent
|
* Re-bind parent
|
||||||
*
|
*
|
||||||
|
@ -488,7 +494,7 @@ class PHPExcel_Cell
|
||||||
* @return PHPExcel_Cell
|
* @return PHPExcel_Cell
|
||||||
*/
|
*/
|
||||||
public function rebindParent(PHPExcel_Worksheet $parent) {
|
public function rebindParent(PHPExcel_Worksheet $parent) {
|
||||||
$this->_parent = $parent;
|
$this->_parent = $parent->getCellCacheController();
|
||||||
|
|
||||||
return $this->notifyCacheController();
|
return $this->notifyCacheController();
|
||||||
}
|
}
|
||||||
|
@ -859,11 +865,11 @@ class PHPExcel_Cell
|
||||||
*/
|
*/
|
||||||
public static function compareCells(PHPExcel_Cell $a, PHPExcel_Cell $b)
|
public static function compareCells(PHPExcel_Cell $a, PHPExcel_Cell $b)
|
||||||
{
|
{
|
||||||
if ($a->_row < $b->_row) {
|
if ($a->getRow() < $b->getRow()) {
|
||||||
return -1;
|
return -1;
|
||||||
} elseif ($a->_row > $b->_row) {
|
} elseif ($a->getRow() > $b->getRow()) {
|
||||||
return 1;
|
return 1;
|
||||||
} elseif (self::columnIndexFromString($a->_column) < self::columnIndexFromString($b->_column)) {
|
} elseif (self::columnIndexFromString($a->getColumn()) < self::columnIndexFromString($b->getColumn())) {
|
||||||
return -1;
|
return -1;
|
||||||
} else {
|
} else {
|
||||||
return 1;
|
return 1;
|
||||||
|
|
|
@ -86,7 +86,7 @@ class PHPExcel_Cell_AdvancedValueBinder extends PHPExcel_Cell_DefaultValueBinder
|
||||||
if ($matches[1] == '-') $value = 0 - $value;
|
if ($matches[1] == '-') $value = 0 - $value;
|
||||||
$cell->setValueExplicit( (float) $value, PHPExcel_Cell_DataType::TYPE_NUMERIC);
|
$cell->setValueExplicit( (float) $value, PHPExcel_Cell_DataType::TYPE_NUMERIC);
|
||||||
// Set style
|
// Set style
|
||||||
$cell->getParent()->getStyle( $cell->getCoordinate() )
|
$cell->getWorksheet()->getStyle( $cell->getCoordinate() )
|
||||||
->getNumberFormat()->setFormatCode( '??/??' );
|
->getNumberFormat()->setFormatCode( '??/??' );
|
||||||
return true;
|
return true;
|
||||||
} elseif (preg_match('/^([+-]?)([0-9]*) +([0-9]*)\s?\/\s*([0-9]*)$/', $value, $matches)) {
|
} elseif (preg_match('/^([+-]?)([0-9]*) +([0-9]*)\s?\/\s*([0-9]*)$/', $value, $matches)) {
|
||||||
|
@ -95,7 +95,7 @@ class PHPExcel_Cell_AdvancedValueBinder extends PHPExcel_Cell_DefaultValueBinder
|
||||||
if ($matches[1] == '-') $value = 0 - $value;
|
if ($matches[1] == '-') $value = 0 - $value;
|
||||||
$cell->setValueExplicit( (float) $value, PHPExcel_Cell_DataType::TYPE_NUMERIC);
|
$cell->setValueExplicit( (float) $value, PHPExcel_Cell_DataType::TYPE_NUMERIC);
|
||||||
// Set style
|
// Set style
|
||||||
$cell->getParent()->getStyle( $cell->getCoordinate() )
|
$cell->getWorksheet()->getStyle( $cell->getCoordinate() )
|
||||||
->getNumberFormat()->setFormatCode( '# ??/??' );
|
->getNumberFormat()->setFormatCode( '# ??/??' );
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
@ -106,7 +106,7 @@ class PHPExcel_Cell_AdvancedValueBinder extends PHPExcel_Cell_DefaultValueBinder
|
||||||
$value = (float) str_replace('%', '', $value) / 100;
|
$value = (float) str_replace('%', '', $value) / 100;
|
||||||
$cell->setValueExplicit( $value, PHPExcel_Cell_DataType::TYPE_NUMERIC);
|
$cell->setValueExplicit( $value, PHPExcel_Cell_DataType::TYPE_NUMERIC);
|
||||||
// Set style
|
// Set style
|
||||||
$cell->getParent()->getStyle( $cell->getCoordinate() )
|
$cell->getWorksheet()->getStyle( $cell->getCoordinate() )
|
||||||
->getNumberFormat()->setFormatCode( PHPExcel_Style_NumberFormat::FORMAT_PERCENTAGE_00 );
|
->getNumberFormat()->setFormatCode( PHPExcel_Style_NumberFormat::FORMAT_PERCENTAGE_00 );
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
@ -120,7 +120,7 @@ class PHPExcel_Cell_AdvancedValueBinder extends PHPExcel_Cell_DefaultValueBinder
|
||||||
$value = (float) trim(str_replace(array($currencyCode, $thousandsSeparator, $decimalSeparator), array('', '', '.'), $value));
|
$value = (float) trim(str_replace(array($currencyCode, $thousandsSeparator, $decimalSeparator), array('', '', '.'), $value));
|
||||||
$cell->setValueExplicit( $value, PHPExcel_Cell_DataType::TYPE_NUMERIC);
|
$cell->setValueExplicit( $value, PHPExcel_Cell_DataType::TYPE_NUMERIC);
|
||||||
// Set style
|
// Set style
|
||||||
$cell->getParent()->getStyle( $cell->getCoordinate() )
|
$cell->getWorksheet()->getStyle( $cell->getCoordinate() )
|
||||||
->getNumberFormat()->setFormatCode(
|
->getNumberFormat()->setFormatCode(
|
||||||
str_replace('$', $currencyCode, PHPExcel_Style_NumberFormat::FORMAT_CURRENCY_USD_SIMPLE )
|
str_replace('$', $currencyCode, PHPExcel_Style_NumberFormat::FORMAT_CURRENCY_USD_SIMPLE )
|
||||||
);
|
);
|
||||||
|
@ -130,7 +130,7 @@ class PHPExcel_Cell_AdvancedValueBinder extends PHPExcel_Cell_DefaultValueBinder
|
||||||
$value = (float) trim(str_replace(array('$',','), '', $value));
|
$value = (float) trim(str_replace(array('$',','), '', $value));
|
||||||
$cell->setValueExplicit( $value, PHPExcel_Cell_DataType::TYPE_NUMERIC);
|
$cell->setValueExplicit( $value, PHPExcel_Cell_DataType::TYPE_NUMERIC);
|
||||||
// Set style
|
// Set style
|
||||||
$cell->getParent()->getStyle( $cell->getCoordinate() )
|
$cell->getWorksheet()->getStyle( $cell->getCoordinate() )
|
||||||
->getNumberFormat()->setFormatCode( PHPExcel_Style_NumberFormat::FORMAT_CURRENCY_USD_SIMPLE );
|
->getNumberFormat()->setFormatCode( PHPExcel_Style_NumberFormat::FORMAT_CURRENCY_USD_SIMPLE );
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
@ -142,7 +142,7 @@ class PHPExcel_Cell_AdvancedValueBinder extends PHPExcel_Cell_DefaultValueBinder
|
||||||
$days = $h / 24 + $m / 1440;
|
$days = $h / 24 + $m / 1440;
|
||||||
$cell->setValueExplicit($days, PHPExcel_Cell_DataType::TYPE_NUMERIC);
|
$cell->setValueExplicit($days, PHPExcel_Cell_DataType::TYPE_NUMERIC);
|
||||||
// Set style
|
// Set style
|
||||||
$cell->getParent()->getStyle( $cell->getCoordinate() )
|
$cell->getWorksheet()->getStyle( $cell->getCoordinate() )
|
||||||
->getNumberFormat()->setFormatCode( PHPExcel_Style_NumberFormat::FORMAT_DATE_TIME3 );
|
->getNumberFormat()->setFormatCode( PHPExcel_Style_NumberFormat::FORMAT_DATE_TIME3 );
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
@ -155,7 +155,7 @@ class PHPExcel_Cell_AdvancedValueBinder extends PHPExcel_Cell_DefaultValueBinder
|
||||||
// Convert value to number
|
// Convert value to number
|
||||||
$cell->setValueExplicit($days, PHPExcel_Cell_DataType::TYPE_NUMERIC);
|
$cell->setValueExplicit($days, PHPExcel_Cell_DataType::TYPE_NUMERIC);
|
||||||
// Set style
|
// Set style
|
||||||
$cell->getParent()->getStyle( $cell->getCoordinate() )
|
$cell->getWorksheet()->getStyle( $cell->getCoordinate() )
|
||||||
->getNumberFormat()->setFormatCode( PHPExcel_Style_NumberFormat::FORMAT_DATE_TIME4 );
|
->getNumberFormat()->setFormatCode( PHPExcel_Style_NumberFormat::FORMAT_DATE_TIME4 );
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
@ -170,7 +170,7 @@ class PHPExcel_Cell_AdvancedValueBinder extends PHPExcel_Cell_DefaultValueBinder
|
||||||
} else {
|
} else {
|
||||||
$formatCode = 'yyyy-mm-dd';
|
$formatCode = 'yyyy-mm-dd';
|
||||||
}
|
}
|
||||||
$cell->getParent()->getStyle( $cell->getCoordinate() )
|
$cell->getWorksheet()->getStyle( $cell->getCoordinate() )
|
||||||
->getNumberFormat()->setFormatCode($formatCode);
|
->getNumberFormat()->setFormatCode($formatCode);
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
@ -180,7 +180,7 @@ class PHPExcel_Cell_AdvancedValueBinder extends PHPExcel_Cell_DefaultValueBinder
|
||||||
$value = PHPExcel_Shared_String::SanitizeUTF8($value);
|
$value = PHPExcel_Shared_String::SanitizeUTF8($value);
|
||||||
$cell->setValueExplicit($value, PHPExcel_Cell_DataType::TYPE_STRING);
|
$cell->setValueExplicit($value, PHPExcel_Cell_DataType::TYPE_STRING);
|
||||||
// Set style
|
// Set style
|
||||||
$cell->getParent()->getStyle( $cell->getCoordinate() )
|
$cell->getWorksheet()->getStyle( $cell->getCoordinate() )
|
||||||
->getAlignment()->setWrapText(TRUE);
|
->getAlignment()->setWrapText(TRUE);
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
|
@ -279,7 +279,7 @@ class PHPExcel_Chart_DataSeriesValues
|
||||||
|
|
||||||
public function refresh(PHPExcel_Worksheet $worksheet, $flatten = TRUE) {
|
public function refresh(PHPExcel_Worksheet $worksheet, $flatten = TRUE) {
|
||||||
if ($this->_dataSource !== NULL) {
|
if ($this->_dataSource !== NULL) {
|
||||||
$calcEngine = PHPExcel_Calculation::getInstance();
|
$calcEngine = PHPExcel_Calculation::getInstance($worksheet->getParent());
|
||||||
$newDataValues = PHPExcel_Calculation::_unwrapResult(
|
$newDataValues = PHPExcel_Calculation::_unwrapResult(
|
||||||
$calcEngine->_calculateFormulaValue(
|
$calcEngine->_calculateFormulaValue(
|
||||||
'='.$this->_dataSource,
|
'='.$this->_dataSource,
|
||||||
|
|
|
@ -204,7 +204,7 @@ class PHPExcel_Worksheet implements PHPExcel_IComparable
|
||||||
*
|
*
|
||||||
* @var PHPExcel_Worksheet_AutoFilter
|
* @var PHPExcel_Worksheet_AutoFilter
|
||||||
*/
|
*/
|
||||||
private $_autoFilter = null;
|
private $_autoFilter = NULL;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Freeze pane
|
* Freeze pane
|
||||||
|
@ -362,12 +362,12 @@ class PHPExcel_Worksheet implements PHPExcel_IComparable
|
||||||
$this->_protection = new PHPExcel_Worksheet_Protection();
|
$this->_protection = new PHPExcel_Worksheet_Protection();
|
||||||
|
|
||||||
// Default row dimension
|
// Default row dimension
|
||||||
$this->_defaultRowDimension = new PHPExcel_Worksheet_RowDimension(null);
|
$this->_defaultRowDimension = new PHPExcel_Worksheet_RowDimension(NULL);
|
||||||
|
|
||||||
// Default column dimension
|
// Default column dimension
|
||||||
$this->_defaultColumnDimension = new PHPExcel_Worksheet_ColumnDimension(null);
|
$this->_defaultColumnDimension = new PHPExcel_Worksheet_ColumnDimension(NULL);
|
||||||
|
|
||||||
$this->_autoFilter = new PHPExcel_Worksheet_AutoFilter(null, $this);
|
$this->_autoFilter = new PHPExcel_Worksheet_AutoFilter(NULL, $this);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -376,11 +376,10 @@ class PHPExcel_Worksheet implements PHPExcel_IComparable
|
||||||
* typically so that the worksheet object can be unset
|
* typically so that the worksheet object can be unset
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
public function disconnectCells()
|
public function disconnectCells() {
|
||||||
{
|
if ( $this->_cellCollection !== NULL){
|
||||||
if ( $this->_cellCollection != null ){
|
|
||||||
$this->_cellCollection->unsetWorksheetCells();
|
$this->_cellCollection->unsetWorksheetCells();
|
||||||
$this->_cellCollection = null;
|
$this->_cellCollection = NULL;
|
||||||
}
|
}
|
||||||
// detach ourself from the workbook, so that it can then delete this worksheet successfully
|
// detach ourself from the workbook, so that it can then delete this worksheet successfully
|
||||||
$this->_parent = null;
|
$this->_parent = null;
|
||||||
|
@ -391,9 +390,10 @@ class PHPExcel_Worksheet implements PHPExcel_IComparable
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
function __destruct() {
|
function __destruct() {
|
||||||
if ($this->_cellCollection !== null) {
|
PHPExcel_Calculation::getInstance($this->_parent)
|
||||||
$this->disconnectCells();
|
->clearCalculationCacheForWorksheet($this->_title);
|
||||||
}
|
|
||||||
|
$this->disconnectCells();
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -401,8 +401,7 @@ class PHPExcel_Worksheet implements PHPExcel_IComparable
|
||||||
*
|
*
|
||||||
* @return PHPExcel_CachedObjectStorage_xxx
|
* @return PHPExcel_CachedObjectStorage_xxx
|
||||||
*/
|
*/
|
||||||
public function getCellCacheController()
|
public function getCellCacheController() {
|
||||||
{
|
|
||||||
return $this->_cellCollection;
|
return $this->_cellCollection;
|
||||||
} // function getCellCacheController()
|
} // function getCellCacheController()
|
||||||
|
|
||||||
|
@ -451,7 +450,7 @@ class PHPExcel_Worksheet implements PHPExcel_IComparable
|
||||||
// Re-order cell collection
|
// Re-order cell collection
|
||||||
return $this->sortCellCollection();
|
return $this->sortCellCollection();
|
||||||
}
|
}
|
||||||
if ($this->_cellCollection !== null) {
|
if ($this->_cellCollection !== NULL) {
|
||||||
return $this->_cellCollection->getCellList();
|
return $this->_cellCollection->getCellList();
|
||||||
}
|
}
|
||||||
return array();
|
return array();
|
||||||
|
@ -464,7 +463,7 @@ class PHPExcel_Worksheet implements PHPExcel_IComparable
|
||||||
*/
|
*/
|
||||||
public function sortCellCollection()
|
public function sortCellCollection()
|
||||||
{
|
{
|
||||||
if ($this->_cellCollection !== null) {
|
if ($this->_cellCollection !== NULL) {
|
||||||
return $this->_cellCollection->getSortedCellList();
|
return $this->_cellCollection->getSortedCellList();
|
||||||
}
|
}
|
||||||
return array();
|
return array();
|
||||||
|
@ -709,21 +708,22 @@ class PHPExcel_Worksheet implements PHPExcel_IComparable
|
||||||
// loop through all cells in the worksheet
|
// loop through all cells in the worksheet
|
||||||
foreach ($this->getCellCollection(false) as $cellID) {
|
foreach ($this->getCellCollection(false) as $cellID) {
|
||||||
$cell = $this->getCell($cellID);
|
$cell = $this->getCell($cellID);
|
||||||
if (isset($autoSizes[$cell->getColumn()])) {
|
if (isset($autoSizes[$this->_cellCollection->getCurrentColumn()])) {
|
||||||
// Determine width if cell does not participate in a merge
|
// Determine width if cell does not participate in a merge
|
||||||
if (!isset($isMergeCell[$cell->getCoordinate()])) {
|
if (!isset($isMergeCell[$this->_cellCollection->getCurrentAddress()])) {
|
||||||
// Calculated value
|
// Calculated value
|
||||||
$cellValue = $cell->getCalculatedValue();
|
|
||||||
|
|
||||||
// To formatted string
|
// To formatted string
|
||||||
$cellValue = PHPExcel_Style_NumberFormat::toFormattedString($cellValue, $this->getParent()->getCellXfByIndex($cell->getXfIndex())->getNumberFormat()->getFormatCode());
|
$cellValue = PHPExcel_Style_NumberFormat::toFormattedString(
|
||||||
|
$cell->getCalculatedValue(),
|
||||||
|
$this->getParent()->getCellXfByIndex($cell->getXfIndex())->getNumberFormat()->getFormatCode()
|
||||||
|
);
|
||||||
|
|
||||||
$autoSizes[$cell->getColumn()] = max(
|
$autoSizes[$this->_cellCollection->getCurrentColumn()] = max(
|
||||||
(float)$autoSizes[$cell->getColumn()],
|
(float) $autoSizes[$this->_cellCollection->getCurrentColumn()],
|
||||||
(float)PHPExcel_Shared_Font::calculateColumnWidth(
|
(float)PHPExcel_Shared_Font::calculateColumnWidth(
|
||||||
$this->getParent()->getCellXfByIndex($cell->getXfIndex())->getFont(),
|
$this->getParent()->getCellXfByIndex($cell->getXfIndex())->getFont(),
|
||||||
$cellValue,
|
$cellValue,
|
||||||
$this->getParent()->getCellXfByIndex($cell->getXfIndex())->getAlignment()->getTextRotation(),
|
$this->getParent()->getCellXfByIndex($cell->getXfIndex())->getAlignment()->getTextRotation(),
|
||||||
$this->getDefaultStyle()->getFont()
|
$this->getDefaultStyle()->getFont()
|
||||||
)
|
)
|
||||||
);
|
);
|
||||||
|
@ -746,8 +746,7 @@ class PHPExcel_Worksheet implements PHPExcel_IComparable
|
||||||
*
|
*
|
||||||
* @return PHPExcel
|
* @return PHPExcel
|
||||||
*/
|
*/
|
||||||
public function getParent()
|
public function getParent() {
|
||||||
{
|
|
||||||
return $this->_parent;
|
return $this->_parent;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -757,8 +756,7 @@ class PHPExcel_Worksheet implements PHPExcel_IComparable
|
||||||
* @param PHPExcel $parent
|
* @param PHPExcel $parent
|
||||||
* @return PHPExcel_Worksheet
|
* @return PHPExcel_Worksheet
|
||||||
*/
|
*/
|
||||||
public function rebindParent(PHPExcel $parent)
|
public function rebindParent(PHPExcel $parent) {
|
||||||
{
|
|
||||||
$namedRanges = $this->_parent->getNamedRanges();
|
$namedRanges = $this->_parent->getNamedRanges();
|
||||||
foreach ($namedRanges as $namedRange) {
|
foreach ($namedRanges as $namedRange) {
|
||||||
$parent->addNamedRange($namedRange);
|
$parent->addNamedRange($namedRange);
|
||||||
|
@ -791,7 +789,6 @@ class PHPExcel_Worksheet implements PHPExcel_IComparable
|
||||||
* This should be left as the default true, unless you are
|
* This should be left as the default true, unless you are
|
||||||
* certain that no formula cells on any worksheet contain
|
* certain that no formula cells on any worksheet contain
|
||||||
* references to this worksheet
|
* references to this worksheet
|
||||||
*
|
|
||||||
* @return PHPExcel_Worksheet
|
* @return PHPExcel_Worksheet
|
||||||
*/
|
*/
|
||||||
public function setTitle($pValue = 'Worksheet', $updateFormulaCellReferences = true)
|
public function setTitle($pValue = 'Worksheet', $updateFormulaCellReferences = true)
|
||||||
|
@ -807,16 +804,16 @@ class PHPExcel_Worksheet implements PHPExcel_IComparable
|
||||||
// Old title
|
// Old title
|
||||||
$oldTitle = $this->getTitle();
|
$oldTitle = $this->getTitle();
|
||||||
|
|
||||||
if ($this->getParent()) {
|
if ($this->_parent) {
|
||||||
// Is there already such sheet name?
|
// Is there already such sheet name?
|
||||||
if ($this->getParent()->sheetNameExists($pValue)) {
|
if ($this->_parent->sheetNameExists($pValue)) {
|
||||||
// Use name, but append with lowest possible integer
|
// Use name, but append with lowest possible integer
|
||||||
|
|
||||||
if (PHPExcel_Shared_String::CountCharacters($pValue) > 29) {
|
if (PHPExcel_Shared_String::CountCharacters($pValue) > 29) {
|
||||||
$pValue = PHPExcel_Shared_String::Substring($pValue,0,29);
|
$pValue = PHPExcel_Shared_String::Substring($pValue,0,29);
|
||||||
}
|
}
|
||||||
$i = 1;
|
$i = 1;
|
||||||
while ($this->getParent()->sheetNameExists($pValue . ' ' . $i)) {
|
while ($this->_parent->sheetNameExists($pValue . ' ' . $i)) {
|
||||||
++$i;
|
++$i;
|
||||||
if ($i == 10) {
|
if ($i == 10) {
|
||||||
if (PHPExcel_Shared_String::CountCharacters($pValue) > 28) {
|
if (PHPExcel_Shared_String::CountCharacters($pValue) > 28) {
|
||||||
|
@ -838,11 +835,13 @@ class PHPExcel_Worksheet implements PHPExcel_IComparable
|
||||||
$this->_title = $pValue;
|
$this->_title = $pValue;
|
||||||
$this->_dirty = true;
|
$this->_dirty = true;
|
||||||
|
|
||||||
if ($this->getParent()) {
|
if ($this->_parent) {
|
||||||
// New title
|
// New title
|
||||||
$newTitle = $this->getTitle();
|
$newTitle = $this->getTitle();
|
||||||
|
PHPExcel_Calculation::getInstance($this->_parent)
|
||||||
|
->renameCalculationCacheForWorksheet($oldTitle, $newTitle);
|
||||||
if ($updateFormulaCellReferences)
|
if ($updateFormulaCellReferences)
|
||||||
PHPExcel_ReferenceHelper::getInstance()->updateNamedFormulas($this->getParent(), $oldTitle, $newTitle);
|
PHPExcel_ReferenceHelper::getInstance()->updateNamedFormulas($this->_parent, $oldTitle, $newTitle);
|
||||||
}
|
}
|
||||||
|
|
||||||
return $this;
|
return $this;
|
||||||
|
@ -853,8 +852,7 @@ class PHPExcel_Worksheet implements PHPExcel_IComparable
|
||||||
*
|
*
|
||||||
* @return string Sheet state (visible, hidden, veryHidden)
|
* @return string Sheet state (visible, hidden, veryHidden)
|
||||||
*/
|
*/
|
||||||
public function getSheetState()
|
public function getSheetState() {
|
||||||
{
|
|
||||||
return $this->_sheetState;
|
return $this->_sheetState;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -864,8 +862,7 @@ class PHPExcel_Worksheet implements PHPExcel_IComparable
|
||||||
* @param string $value Sheet state (visible, hidden, veryHidden)
|
* @param string $value Sheet state (visible, hidden, veryHidden)
|
||||||
* @return PHPExcel_Worksheet
|
* @return PHPExcel_Worksheet
|
||||||
*/
|
*/
|
||||||
public function setSheetState($value = PHPExcel_Worksheet::SHEETSTATE_VISIBLE)
|
public function setSheetState($value = PHPExcel_Worksheet::SHEETSTATE_VISIBLE) {
|
||||||
{
|
|
||||||
$this->_sheetState = $value;
|
$this->_sheetState = $value;
|
||||||
return $this;
|
return $this;
|
||||||
}
|
}
|
||||||
|
@ -1110,14 +1107,14 @@ class PHPExcel_Worksheet implements PHPExcel_IComparable
|
||||||
// Worksheet reference?
|
// Worksheet reference?
|
||||||
if (strpos($pCoordinate, '!') !== false) {
|
if (strpos($pCoordinate, '!') !== false) {
|
||||||
$worksheetReference = PHPExcel_Worksheet::extractSheetTitle($pCoordinate, true);
|
$worksheetReference = PHPExcel_Worksheet::extractSheetTitle($pCoordinate, true);
|
||||||
return $this->getParent()->getSheetByName($worksheetReference[0])->getCell($worksheetReference[1]);
|
return $this->_parent->getSheetByName($worksheetReference[0])->getCell($worksheetReference[1]);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Named range?
|
// Named range?
|
||||||
if ((!preg_match('/^'.PHPExcel_Calculation::CALCULATION_REGEXP_CELLREF.'$/i', $pCoordinate, $matches)) &&
|
if ((!preg_match('/^'.PHPExcel_Calculation::CALCULATION_REGEXP_CELLREF.'$/i', $pCoordinate, $matches)) &&
|
||||||
(preg_match('/^'.PHPExcel_Calculation::CALCULATION_REGEXP_NAMEDRANGE.'$/i', $pCoordinate, $matches))) {
|
(preg_match('/^'.PHPExcel_Calculation::CALCULATION_REGEXP_NAMEDRANGE.'$/i', $pCoordinate, $matches))) {
|
||||||
$namedRange = PHPExcel_NamedRange::resolveRange($pCoordinate, $this);
|
$namedRange = PHPExcel_NamedRange::resolveRange($pCoordinate, $this);
|
||||||
if ($namedRange !== null) {
|
if ($namedRange !== NULL) {
|
||||||
$pCoordinate = $namedRange->getRange();
|
$pCoordinate = $namedRange->getRange();
|
||||||
return $namedRange->getWorksheet()->getCell($pCoordinate);
|
return $namedRange->getWorksheet()->getCell($pCoordinate);
|
||||||
}
|
}
|
||||||
|
@ -1136,7 +1133,7 @@ class PHPExcel_Worksheet implements PHPExcel_IComparable
|
||||||
// Coordinates
|
// Coordinates
|
||||||
$aCoordinates = PHPExcel_Cell::coordinateFromString($pCoordinate);
|
$aCoordinates = PHPExcel_Cell::coordinateFromString($pCoordinate);
|
||||||
|
|
||||||
$cell = $this->_cellCollection->addCacheData($pCoordinate,new PHPExcel_Cell($pCoordinate, null, PHPExcel_Cell_DataType::TYPE_NULL, $this));
|
$cell = $this->_cellCollection->addCacheData($pCoordinate,new PHPExcel_Cell(NULL, PHPExcel_Cell_DataType::TYPE_NULL, $this));
|
||||||
$this->_cellCollectionIsSorted = false;
|
$this->_cellCollectionIsSorted = false;
|
||||||
|
|
||||||
if (PHPExcel_Cell::columnIndexFromString($this->_cachedHighestColumn) < PHPExcel_Cell::columnIndexFromString($aCoordinates[0]))
|
if (PHPExcel_Cell::columnIndexFromString($this->_cachedHighestColumn) < PHPExcel_Cell::columnIndexFromString($aCoordinates[0]))
|
||||||
|
@ -1176,7 +1173,7 @@ class PHPExcel_Worksheet implements PHPExcel_IComparable
|
||||||
$coordinate = $columnLetter . $pRow;
|
$coordinate = $columnLetter . $pRow;
|
||||||
|
|
||||||
if (!$this->_cellCollection->isDataSet($coordinate)) {
|
if (!$this->_cellCollection->isDataSet($coordinate)) {
|
||||||
$cell = $this->_cellCollection->addCacheData($coordinate, new PHPExcel_Cell($coordinate, null, PHPExcel_Cell_DataType::TYPE_NULL, $this));
|
$cell = $this->_cellCollection->addCacheData($coordinate, new PHPExcel_Cell(NULL, PHPExcel_Cell_DataType::TYPE_NULL, $this));
|
||||||
$this->_cellCollectionIsSorted = false;
|
$this->_cellCollectionIsSorted = false;
|
||||||
|
|
||||||
if (PHPExcel_Cell::columnIndexFromString($this->_cachedHighestColumn) < $pColumn)
|
if (PHPExcel_Cell::columnIndexFromString($this->_cachedHighestColumn) < $pColumn)
|
||||||
|
@ -1202,14 +1199,14 @@ class PHPExcel_Worksheet implements PHPExcel_IComparable
|
||||||
// Worksheet reference?
|
// Worksheet reference?
|
||||||
if (strpos($pCoordinate, '!') !== false) {
|
if (strpos($pCoordinate, '!') !== false) {
|
||||||
$worksheetReference = PHPExcel_Worksheet::extractSheetTitle($pCoordinate, true);
|
$worksheetReference = PHPExcel_Worksheet::extractSheetTitle($pCoordinate, true);
|
||||||
return $this->getParent()->getSheetByName($worksheetReference[0])->cellExists($worksheetReference[1]);
|
return $this->_parent->getSheetByName($worksheetReference[0])->cellExists($worksheetReference[1]);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Named range?
|
// Named range?
|
||||||
if ((!preg_match('/^'.PHPExcel_Calculation::CALCULATION_REGEXP_CELLREF.'$/i', $pCoordinate, $matches)) &&
|
if ((!preg_match('/^'.PHPExcel_Calculation::CALCULATION_REGEXP_CELLREF.'$/i', $pCoordinate, $matches)) &&
|
||||||
(preg_match('/^'.PHPExcel_Calculation::CALCULATION_REGEXP_NAMEDRANGE.'$/i', $pCoordinate, $matches))) {
|
(preg_match('/^'.PHPExcel_Calculation::CALCULATION_REGEXP_NAMEDRANGE.'$/i', $pCoordinate, $matches))) {
|
||||||
$namedRange = PHPExcel_NamedRange::resolveRange($pCoordinate, $this);
|
$namedRange = PHPExcel_NamedRange::resolveRange($pCoordinate, $this);
|
||||||
if ($namedRange !== null) {
|
if ($namedRange !== NULL) {
|
||||||
$pCoordinate = $namedRange->getRange();
|
$pCoordinate = $namedRange->getRange();
|
||||||
if ($this->getHashCode() != $namedRange->getWorksheet()->getHashCode()) {
|
if ($this->getHashCode() != $namedRange->getWorksheet()->getHashCode()) {
|
||||||
if (!$namedRange->getLocalOnly()) {
|
if (!$namedRange->getLocalOnly()) {
|
||||||
|
@ -1522,7 +1519,7 @@ class PHPExcel_Worksheet implements PHPExcel_IComparable
|
||||||
*
|
*
|
||||||
* Please note that this will overwrite existing cell styles for cells in range!
|
* Please note that this will overwrite existing cell styles for cells in range!
|
||||||
*
|
*
|
||||||
* @param [PHPExcel_Style_Conditional] $pCellStyle Cell style to duplicate
|
* @param array of PHPExcel_Style_Conditional $pCellStyle Cell style to duplicate
|
||||||
* @param string $pRange Range of cells (i.e. "A1:B10"), or just one cell (i.e. "A1")
|
* @param string $pRange Range of cells (i.e. "A1:B10"), or just one cell (i.e. "A1")
|
||||||
* @throws PHPExcel_Exception
|
* @throws PHPExcel_Exception
|
||||||
* @return PHPExcel_Worksheet
|
* @return PHPExcel_Worksheet
|
||||||
|
@ -1899,7 +1896,7 @@ class PHPExcel_Worksheet implements PHPExcel_IComparable
|
||||||
*/
|
*/
|
||||||
public function removeAutoFilter()
|
public function removeAutoFilter()
|
||||||
{
|
{
|
||||||
$this->_autoFilter->setRange(null);
|
$this->_autoFilter->setRange(NULL);
|
||||||
return $this;
|
return $this;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -2179,7 +2176,7 @@ class PHPExcel_Worksheet implements PHPExcel_IComparable
|
||||||
/**
|
/**
|
||||||
* Set comments array for the entire sheet.
|
* Set comments array for the entire sheet.
|
||||||
*
|
*
|
||||||
* @param [PHPExcel_Comment] $pValue
|
* @param array of PHPExcel_Comment
|
||||||
* @return PHPExcel_Worksheet
|
* @return PHPExcel_Worksheet
|
||||||
*/
|
*/
|
||||||
public function setComments($pValue = array())
|
public function setComments($pValue = array())
|
||||||
|
@ -2397,10 +2394,7 @@ class PHPExcel_Worksheet implements PHPExcel_IComparable
|
||||||
* True - Return rows and columns indexed by their actual row and column IDs
|
* True - Return rows and columns indexed by their actual row and column IDs
|
||||||
* @return array
|
* @return array
|
||||||
*/
|
*/
|
||||||
public function rangeToArray(
|
public function rangeToArray($pRange = 'A1', $nullValue = null, $calculateFormulas = true, $formatData = true, $returnCellRef = false) {
|
||||||
$pRange = 'A1', $nullValue = null, $calculateFormulas = true,
|
|
||||||
$formatData = true, $returnCellRef = false)
|
|
||||||
{
|
|
||||||
// Returnvalue
|
// Returnvalue
|
||||||
$returnValue = array();
|
$returnValue = array();
|
||||||
// Identify the range that we need to extract from the worksheet
|
// Identify the range that we need to extract from the worksheet
|
||||||
|
@ -2445,7 +2439,7 @@ class PHPExcel_Worksheet implements PHPExcel_IComparable
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
// Cell holds a null
|
// Cell holds a NULL
|
||||||
$returnValue[$rRef][$cRef] = $nullValue;
|
$returnValue[$rRef][$cRef] = $nullValue;
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
|
@ -2472,20 +2466,14 @@ class PHPExcel_Worksheet implements PHPExcel_IComparable
|
||||||
* @return array
|
* @return array
|
||||||
* @throws PHPExcel_Exception
|
* @throws PHPExcel_Exception
|
||||||
*/
|
*/
|
||||||
public function namedRangeToArray(
|
public function namedRangeToArray($pNamedRange = '', $nullValue = null, $calculateFormulas = true, $formatData = true, $returnCellRef = false) {
|
||||||
$pNamedRange = '', $nullValue = null, $calculateFormulas = true,
|
|
||||||
$formatData = true, $returnCellRef = false
|
|
||||||
)
|
|
||||||
{
|
|
||||||
$namedRange = PHPExcel_NamedRange::resolveRange($pNamedRange, $this);
|
$namedRange = PHPExcel_NamedRange::resolveRange($pNamedRange, $this);
|
||||||
if ($namedRange !== null) {
|
if ($namedRange !== NULL) {
|
||||||
$pWorkSheet = $namedRange->getWorksheet();
|
$pWorkSheet = $namedRange->getWorksheet();
|
||||||
$pCellRange = $namedRange->getRange();
|
$pCellRange = $namedRange->getRange();
|
||||||
|
|
||||||
return $pWorkSheet->rangeToArray(
|
return $pWorkSheet->rangeToArray( $pCellRange,
|
||||||
$pCellRange,
|
$nullValue, $calculateFormulas, $formatData, $returnCellRef);
|
||||||
$nullValue, $calculateFormulas, $formatData, $returnCellRef
|
|
||||||
);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
throw new PHPExcel_Exception('Named Range '.$pNamedRange.' does not exist.');
|
throw new PHPExcel_Exception('Named Range '.$pNamedRange.' does not exist.');
|
||||||
|
@ -2502,8 +2490,7 @@ class PHPExcel_Worksheet implements PHPExcel_IComparable
|
||||||
* True - Return rows and columns indexed by their actual row and column IDs
|
* True - Return rows and columns indexed by their actual row and column IDs
|
||||||
* @return array
|
* @return array
|
||||||
*/
|
*/
|
||||||
public function toArray($nullValue = null, $calculateFormulas = true, $formatData = true, $returnCellRef = false)
|
public function toArray($nullValue = null, $calculateFormulas = true, $formatData = true, $returnCellRef = false) {
|
||||||
{
|
|
||||||
// Garbage collect...
|
// Garbage collect...
|
||||||
$this->garbageCollect();
|
$this->garbageCollect();
|
||||||
|
|
||||||
|
@ -2511,10 +2498,8 @@ class PHPExcel_Worksheet implements PHPExcel_IComparable
|
||||||
$maxCol = $this->getHighestColumn();
|
$maxCol = $this->getHighestColumn();
|
||||||
$maxRow = $this->getHighestRow();
|
$maxRow = $this->getHighestRow();
|
||||||
// Return
|
// Return
|
||||||
return $this->rangeToArray(
|
return $this->rangeToArray( 'A1:'.$maxCol.$maxRow,
|
||||||
'A1:'.$maxCol.$maxRow,
|
$nullValue, $calculateFormulas, $formatData, $returnCellRef);
|
||||||
$nullValue, $calculateFormulas, $formatData, $returnCellRef
|
|
||||||
);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -2523,8 +2508,7 @@ class PHPExcel_Worksheet implements PHPExcel_IComparable
|
||||||
* @param integer $startRow The row number at which to start iterating
|
* @param integer $startRow The row number at which to start iterating
|
||||||
* @return PHPExcel_Worksheet_RowIterator
|
* @return PHPExcel_Worksheet_RowIterator
|
||||||
*/
|
*/
|
||||||
public function getRowIterator($startRow = 1)
|
public function getRowIterator($startRow = 1) {
|
||||||
{
|
|
||||||
return new PHPExcel_Worksheet_RowIterator($this,$startRow);
|
return new PHPExcel_Worksheet_RowIterator($this,$startRow);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -2533,8 +2517,7 @@ class PHPExcel_Worksheet implements PHPExcel_IComparable
|
||||||
*
|
*
|
||||||
* @return PHPExcel_Worksheet
|
* @return PHPExcel_Worksheet
|
||||||
*/
|
*/
|
||||||
public function garbageCollect()
|
public function garbageCollect() {
|
||||||
{
|
|
||||||
// Flush cache
|
// Flush cache
|
||||||
$this->_cellCollection->getCacheData('A1');
|
$this->_cellCollection->getCacheData('A1');
|
||||||
// Build a reference table from images
|
// Build a reference table from images
|
||||||
|
@ -2578,8 +2561,7 @@ class PHPExcel_Worksheet implements PHPExcel_IComparable
|
||||||
*
|
*
|
||||||
* @return string Hash code
|
* @return string Hash code
|
||||||
*/
|
*/
|
||||||
public function getHashCode()
|
public function getHashCode() {
|
||||||
{
|
|
||||||
if ($this->_dirty) {
|
if ($this->_dirty) {
|
||||||
$this->_hash = md5( $this->_title .
|
$this->_hash = md5( $this->_title .
|
||||||
$this->_autoFilter .
|
$this->_autoFilter .
|
||||||
|
@ -2601,8 +2583,7 @@ class PHPExcel_Worksheet implements PHPExcel_IComparable
|
||||||
* @param bool $returnRange Return range? (see example)
|
* @param bool $returnRange Return range? (see example)
|
||||||
* @return mixed
|
* @return mixed
|
||||||
*/
|
*/
|
||||||
public static function extractSheetTitle($pRange, $returnRange = false)
|
public static function extractSheetTitle($pRange, $returnRange = false) {
|
||||||
{
|
|
||||||
// Sheet title included?
|
// Sheet title included?
|
||||||
if (($sep = strpos($pRange, '!')) === false) {
|
if (($sep = strpos($pRange, '!')) === false) {
|
||||||
return '';
|
return '';
|
||||||
|
@ -2733,8 +2714,7 @@ class PHPExcel_Worksheet implements PHPExcel_IComparable
|
||||||
* @param string $range
|
* @param string $range
|
||||||
* @return string Adjusted range value
|
* @return string Adjusted range value
|
||||||
*/
|
*/
|
||||||
public function shrinkRangeToFit($range)
|
public function shrinkRangeToFit($range) {
|
||||||
{
|
|
||||||
$maxCol = $this->getHighestColumn();
|
$maxCol = $this->getHighestColumn();
|
||||||
$maxRow = $this->getHighestRow();
|
$maxRow = $this->getHighestRow();
|
||||||
$maxCol = PHPExcel_Cell::columnIndexFromString($maxCol);
|
$maxCol = PHPExcel_Cell::columnIndexFromString($maxCol);
|
||||||
|
@ -2762,7 +2742,7 @@ class PHPExcel_Worksheet implements PHPExcel_IComparable
|
||||||
*/
|
*/
|
||||||
public function getTabColor()
|
public function getTabColor()
|
||||||
{
|
{
|
||||||
if ($this->_tabColor === null)
|
if ($this->_tabColor === NULL)
|
||||||
$this->_tabColor = new PHPExcel_Style_Color();
|
$this->_tabColor = new PHPExcel_Style_Color();
|
||||||
|
|
||||||
return $this->_tabColor;
|
return $this->_tabColor;
|
||||||
|
@ -2788,7 +2768,7 @@ class PHPExcel_Worksheet implements PHPExcel_IComparable
|
||||||
*/
|
*/
|
||||||
public function isTabColorSet()
|
public function isTabColorSet()
|
||||||
{
|
{
|
||||||
return ($this->_tabColor !== null);
|
return ($this->_tabColor !== NULL);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -2796,8 +2776,7 @@ class PHPExcel_Worksheet implements PHPExcel_IComparable
|
||||||
*
|
*
|
||||||
* @return PHPExcel_Worksheet
|
* @return PHPExcel_Worksheet
|
||||||
*/
|
*/
|
||||||
public function copy()
|
public function copy() {
|
||||||
{
|
|
||||||
$copied = clone $this;
|
$copied = clone $this;
|
||||||
|
|
||||||
return $copied;
|
return $copied;
|
||||||
|
@ -2806,8 +2785,7 @@ class PHPExcel_Worksheet implements PHPExcel_IComparable
|
||||||
/**
|
/**
|
||||||
* Implement PHP __clone to create a deep clone, not just a shallow copy.
|
* Implement PHP __clone to create a deep clone, not just a shallow copy.
|
||||||
*/
|
*/
|
||||||
public function __clone()
|
public function __clone() {
|
||||||
{
|
|
||||||
foreach ($this as $key => $val) {
|
foreach ($this as $key => $val) {
|
||||||
if ($key == '_parent') {
|
if ($key == '_parent') {
|
||||||
continue;
|
continue;
|
||||||
|
|
|
@ -102,8 +102,8 @@ class PHPExcel_Writer_CSV extends PHPExcel_Writer_Abstract implements PHPExcel_W
|
||||||
// Fetch sheet
|
// Fetch sheet
|
||||||
$sheet = $this->_phpExcel->getSheet($this->_sheetIndex);
|
$sheet = $this->_phpExcel->getSheet($this->_sheetIndex);
|
||||||
|
|
||||||
$saveDebugLog = PHPExcel_Calculation::getInstance()->writeDebugLog;
|
$saveDebugLog = PHPExcel_Calculation::getInstance($this->_phpExcel)->getDebugLog()->getWriteDebugLog();
|
||||||
PHPExcel_Calculation::getInstance()->writeDebugLog = false;
|
PHPExcel_Calculation::getInstance($this->_phpExcel)->getDebugLog()->setWriteDebugLog(FALSE);
|
||||||
$saveArrayReturnType = PHPExcel_Calculation::getArrayReturnType();
|
$saveArrayReturnType = PHPExcel_Calculation::getArrayReturnType();
|
||||||
PHPExcel_Calculation::setArrayReturnType(PHPExcel_Calculation::RETURN_ARRAY_AS_VALUE);
|
PHPExcel_Calculation::setArrayReturnType(PHPExcel_Calculation::RETURN_ARRAY_AS_VALUE);
|
||||||
|
|
||||||
|
@ -139,7 +139,7 @@ class PHPExcel_Writer_CSV extends PHPExcel_Writer_Abstract implements PHPExcel_W
|
||||||
fclose($fileHandle);
|
fclose($fileHandle);
|
||||||
|
|
||||||
PHPExcel_Calculation::setArrayReturnType($saveArrayReturnType);
|
PHPExcel_Calculation::setArrayReturnType($saveArrayReturnType);
|
||||||
PHPExcel_Calculation::getInstance()->writeDebugLog = $saveDebugLog;
|
PHPExcel_Calculation::getInstance($this->_phpExcel)->getDebugLog()->setWriteDebugLog($saveDebugLog);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
|
@ -179,8 +179,8 @@ class PHPExcel_Writer_Excel2007 extends PHPExcel_Writer_Abstract implements PHPE
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
$saveDebugLog = PHPExcel_Calculation::getInstance()->writeDebugLog;
|
$saveDebugLog = PHPExcel_Calculation::getInstance($this->_spreadSheet)->getDebugLog()->getWriteDebugLog();
|
||||||
PHPExcel_Calculation::getInstance()->writeDebugLog = false;
|
PHPExcel_Calculation::getInstance($this->_spreadSheet)->getDebugLog()->setWriteDebugLog(FALSE);
|
||||||
$saveDateReturnType = PHPExcel_Calculation_Functions::getReturnDateType();
|
$saveDateReturnType = PHPExcel_Calculation_Functions::getReturnDateType();
|
||||||
PHPExcel_Calculation_Functions::setReturnDateType(PHPExcel_Calculation_Functions::RETURNDATE_EXCEL);
|
PHPExcel_Calculation_Functions::setReturnDateType(PHPExcel_Calculation_Functions::RETURNDATE_EXCEL);
|
||||||
|
|
||||||
|
@ -341,7 +341,7 @@ class PHPExcel_Writer_Excel2007 extends PHPExcel_Writer_Abstract implements PHPE
|
||||||
}
|
}
|
||||||
|
|
||||||
PHPExcel_Calculation_Functions::setReturnDateType($saveDateReturnType);
|
PHPExcel_Calculation_Functions::setReturnDateType($saveDateReturnType);
|
||||||
PHPExcel_Calculation::getInstance()->writeDebugLog = $saveDebugLog;
|
PHPExcel_Calculation::getInstance($this->_spreadSheet)->getDebugLog()->setWriteDebugLog($saveDebugLog);
|
||||||
|
|
||||||
// Close file
|
// Close file
|
||||||
if ($objZip->close() === false) {
|
if ($objZip->close() === false) {
|
||||||
|
|
|
@ -1074,12 +1074,9 @@ class PHPExcel_Writer_Excel2007_Worksheet extends PHPExcel_Writer_Excel2007_Writ
|
||||||
$objWriter->writeAttribute('t', $mappedType);
|
$objWriter->writeAttribute('t', $mappedType);
|
||||||
break;
|
break;
|
||||||
case 'f': // Formula
|
case 'f': // Formula
|
||||||
$calculatedValue = null;
|
$calculatedValue = ($this->getParentWriter()->getPreCalculateFormulas()) ?
|
||||||
if ($this->getParentWriter()->getPreCalculateFormulas()) {
|
$pCell->getCalculatedValue() :
|
||||||
$calculatedValue = $pCell->getCalculatedValue();
|
$cellValue;
|
||||||
} else {
|
|
||||||
$calculatedValue = $cellValue;
|
|
||||||
}
|
|
||||||
if (is_string($calculatedValue)) {
|
if (is_string($calculatedValue)) {
|
||||||
$objWriter->writeAttribute('t', 'str');
|
$objWriter->writeAttribute('t', 'str');
|
||||||
}
|
}
|
||||||
|
@ -1125,7 +1122,7 @@ class PHPExcel_Writer_Excel2007_Worksheet extends PHPExcel_Writer_Excel2007_Writ
|
||||||
}
|
}
|
||||||
if ($this->getParentWriter()->getOffice2003Compatibility() === false) {
|
if ($this->getParentWriter()->getOffice2003Compatibility() === false) {
|
||||||
if ($this->getParentWriter()->getPreCalculateFormulas()) {
|
if ($this->getParentWriter()->getPreCalculateFormulas()) {
|
||||||
$calculatedValue = $pCell->getCalculatedValue();
|
// $calculatedValue = $pCell->getCalculatedValue();
|
||||||
if (!is_array($calculatedValue) && substr($calculatedValue, 0, 1) != '#') {
|
if (!is_array($calculatedValue) && substr($calculatedValue, 0, 1) != '#') {
|
||||||
$objWriter->writeElement('v', PHPExcel_Shared_String::FormatNumber($calculatedValue));
|
$objWriter->writeElement('v', PHPExcel_Shared_String::FormatNumber($calculatedValue));
|
||||||
} else {
|
} else {
|
||||||
|
|
|
@ -120,8 +120,8 @@ class PHPExcel_Writer_Excel5 extends PHPExcel_Writer_Abstract implements PHPExce
|
||||||
// garbage collect
|
// garbage collect
|
||||||
$this->_phpExcel->garbageCollect();
|
$this->_phpExcel->garbageCollect();
|
||||||
|
|
||||||
$saveDebugLog = PHPExcel_Calculation::getInstance()->writeDebugLog;
|
$saveDebugLog = PHPExcel_Calculation::getInstance($this->_phpExcel)->getDebugLog()->getWriteDebugLog();
|
||||||
PHPExcel_Calculation::getInstance()->writeDebugLog = false;
|
PHPExcel_Calculation::getInstance($this->_phpExcel)->getDebugLog()->setWriteDebugLog(FALSE);
|
||||||
$saveDateReturnType = PHPExcel_Calculation_Functions::getReturnDateType();
|
$saveDateReturnType = PHPExcel_Calculation_Functions::getReturnDateType();
|
||||||
PHPExcel_Calculation_Functions::setReturnDateType(PHPExcel_Calculation_Functions::RETURNDATE_EXCEL);
|
PHPExcel_Calculation_Functions::setReturnDateType(PHPExcel_Calculation_Functions::RETURNDATE_EXCEL);
|
||||||
|
|
||||||
|
@ -226,7 +226,7 @@ class PHPExcel_Writer_Excel5 extends PHPExcel_Writer_Abstract implements PHPExce
|
||||||
$res = $root->save($pFilename);
|
$res = $root->save($pFilename);
|
||||||
|
|
||||||
PHPExcel_Calculation_Functions::setReturnDateType($saveDateReturnType);
|
PHPExcel_Calculation_Functions::setReturnDateType($saveDateReturnType);
|
||||||
PHPExcel_Calculation::getInstance()->writeDebugLog = $saveDebugLog;
|
PHPExcel_Calculation::getInstance($this->_phpExcel)->getDebugLog()->setWriteDebugLog($saveDebugLog);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
|
@ -152,8 +152,8 @@ class PHPExcel_Writer_HTML extends PHPExcel_Writer_Abstract implements PHPExcel_
|
||||||
// garbage collect
|
// garbage collect
|
||||||
$this->_phpExcel->garbageCollect();
|
$this->_phpExcel->garbageCollect();
|
||||||
|
|
||||||
$saveDebugLog = PHPExcel_Calculation::getInstance()->writeDebugLog;
|
$saveDebugLog = PHPExcel_Calculation::getInstance($this->_phpExcel)->getDebugLog()->getWriteDebugLog();
|
||||||
PHPExcel_Calculation::getInstance()->writeDebugLog = false;
|
PHPExcel_Calculation::getInstance($this->_phpExcel)->getDebugLog()->setWriteDebugLog(FALSE);
|
||||||
$saveArrayReturnType = PHPExcel_Calculation::getArrayReturnType();
|
$saveArrayReturnType = PHPExcel_Calculation::getArrayReturnType();
|
||||||
PHPExcel_Calculation::setArrayReturnType(PHPExcel_Calculation::RETURN_ARRAY_AS_VALUE);
|
PHPExcel_Calculation::setArrayReturnType(PHPExcel_Calculation::RETURN_ARRAY_AS_VALUE);
|
||||||
|
|
||||||
|
@ -184,7 +184,7 @@ class PHPExcel_Writer_HTML extends PHPExcel_Writer_Abstract implements PHPExcel_
|
||||||
fclose($fileHandle);
|
fclose($fileHandle);
|
||||||
|
|
||||||
PHPExcel_Calculation::setArrayReturnType($saveArrayReturnType);
|
PHPExcel_Calculation::setArrayReturnType($saveArrayReturnType);
|
||||||
PHPExcel_Calculation::getInstance()->writeDebugLog = $saveDebugLog;
|
PHPExcel_Calculation::getInstance($this->_phpExcel)->getDebugLog()->setWriteDebugLog($saveDebugLog);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
|
@ -0,0 +1,126 @@
|
||||||
|
<?php
|
||||||
|
/**
|
||||||
|
* PHPExcel
|
||||||
|
*
|
||||||
|
* Copyright (C) 2006 - 2012 PHPExcel
|
||||||
|
*
|
||||||
|
* This library is free software; you can redistribute it and/or
|
||||||
|
* modify it under the terms of the GNU Lesser General Public
|
||||||
|
* License as published by the Free Software Foundation; either
|
||||||
|
* version 2.1 of the License, or (at your option) any later version.
|
||||||
|
*
|
||||||
|
* This library is distributed in the hope that it will be useful,
|
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||||
|
* Lesser General Public License for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU Lesser General Public
|
||||||
|
* License along with this library; if not, write to the Free Software
|
||||||
|
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
|
||||||
|
*
|
||||||
|
* @category PHPExcel
|
||||||
|
* @package PHPExcel
|
||||||
|
* @copyright Copyright (c) 2006 - 2012 PHPExcel (http://www.codeplex.com/PHPExcel)
|
||||||
|
* @license http://www.gnu.org/licenses/old-licenses/lgpl-2.1.txt LGPL
|
||||||
|
* @version ##VERSION##, ##DATE##
|
||||||
|
*/
|
||||||
|
|
||||||
|
/** Error reporting */
|
||||||
|
error_reporting(E_ALL);
|
||||||
|
ini_set('display_errors', TRUE);
|
||||||
|
ini_set('display_startup_errors', TRUE);
|
||||||
|
|
||||||
|
define('EOL',(PHP_SAPI == 'cli') ? PHP_EOL : '<br />');
|
||||||
|
|
||||||
|
date_default_timezone_set('Europe/London');
|
||||||
|
|
||||||
|
/** Include PHPExcel */
|
||||||
|
require_once '../Classes/PHPExcel.php';
|
||||||
|
|
||||||
|
$cacheMethod = PHPExcel_CachedObjectStorageFactory::cache_to_sqlite;
|
||||||
|
PHPExcel_Settings::setCacheStorageMethod($cacheMethod);
|
||||||
|
echo date('H:i:s') , " Enable Cell Caching using " , $cacheMethod , " method" , EOL;
|
||||||
|
|
||||||
|
|
||||||
|
// Create new PHPExcel object
|
||||||
|
echo date('H:i:s') , " Create new PHPExcel object" , EOL;
|
||||||
|
$objPHPExcel = new PHPExcel();
|
||||||
|
|
||||||
|
// Set document properties
|
||||||
|
echo date('H:i:s') , " Set properties" , EOL;
|
||||||
|
$objPHPExcel->getProperties()->setCreator("Maarten Balliauw")
|
||||||
|
->setLastModifiedBy("Maarten Balliauw")
|
||||||
|
->setTitle("Office 2007 XLSX Test Document")
|
||||||
|
->setSubject("Office 2007 XLSX Test Document")
|
||||||
|
->setDescription("Test document for Office 2007 XLSX, generated using PHP classes.")
|
||||||
|
->setKeywords("office 2007 openxml php")
|
||||||
|
->setCategory("Test result file");
|
||||||
|
|
||||||
|
|
||||||
|
// Create a first sheet
|
||||||
|
echo date('H:i:s') , " Add data" , EOL;
|
||||||
|
$objPHPExcel->setActiveSheetIndex(0);
|
||||||
|
$objPHPExcel->getActiveSheet()->setCellValue('A1', "Firstname");
|
||||||
|
$objPHPExcel->getActiveSheet()->setCellValue('B1', "Lastname");
|
||||||
|
$objPHPExcel->getActiveSheet()->setCellValue('C1', "Phone");
|
||||||
|
$objPHPExcel->getActiveSheet()->setCellValue('D1', "Fax");
|
||||||
|
$objPHPExcel->getActiveSheet()->setCellValue('E1', "Is Client ?");
|
||||||
|
|
||||||
|
|
||||||
|
// Hide "Phone" and "fax" column
|
||||||
|
echo date('H:i:s') , " Hide 'Phone' and 'fax' columns" , EOL;
|
||||||
|
$objPHPExcel->getActiveSheet()->getColumnDimension('C')->setVisible(false);
|
||||||
|
$objPHPExcel->getActiveSheet()->getColumnDimension('D')->setVisible(false);
|
||||||
|
|
||||||
|
|
||||||
|
// Set outline levels
|
||||||
|
echo date('H:i:s') , " Set outline levels" , EOL;
|
||||||
|
$objPHPExcel->getActiveSheet()->getColumnDimension('E')->setOutlineLevel(1)
|
||||||
|
->setVisible(false)
|
||||||
|
->setCollapsed(true);
|
||||||
|
|
||||||
|
// Freeze panes
|
||||||
|
echo date('H:i:s') , " Freeze panes" , EOL;
|
||||||
|
$objPHPExcel->getActiveSheet()->freezePane('A2');
|
||||||
|
|
||||||
|
|
||||||
|
// Rows to repeat at top
|
||||||
|
echo date('H:i:s') , " Rows to repeat at top" , EOL;
|
||||||
|
$objPHPExcel->getActiveSheet()->getPageSetup()->setRowsToRepeatAtTopByStartAndEnd(1, 1);
|
||||||
|
|
||||||
|
|
||||||
|
// Add data
|
||||||
|
for ($i = 2; $i <= 5000; $i++) {
|
||||||
|
$objPHPExcel->getActiveSheet()->setCellValue('A' . $i, "FName $i")
|
||||||
|
->setCellValue('B' . $i, "LName $i")
|
||||||
|
->setCellValue('C' . $i, "PhoneNo $i")
|
||||||
|
->setCellValue('D' . $i, "FaxNo $i")
|
||||||
|
->setCellValue('E' . $i, true);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// Set active sheet index to the first sheet, so Excel opens this as the first sheet
|
||||||
|
$objPHPExcel->setActiveSheetIndex(0);
|
||||||
|
|
||||||
|
|
||||||
|
// Save Excel 2007 file
|
||||||
|
echo date('H:i:s') , " Write to Excel2007 format" , EOL;
|
||||||
|
$callStartTime = microtime(true);
|
||||||
|
|
||||||
|
$objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel2007');
|
||||||
|
$objWriter->save(str_replace('.php', '.xlsx', __FILE__));
|
||||||
|
$callEndTime = microtime(true);
|
||||||
|
$callTime = $callEndTime - $callStartTime;
|
||||||
|
|
||||||
|
echo date('H:i:s') , " File written to " , str_replace('.php', '.xlsx', pathinfo(__FILE__, PATHINFO_BASENAME)) , EOL;
|
||||||
|
echo 'Call time to write Workbook was ' , sprintf('%.4f',$callTime) , " seconds" , EOL;
|
||||||
|
// Echo memory usage
|
||||||
|
echo date('H:i:s') , ' Current memory usage: ' , (memory_get_usage(true) / 1024 / 1024) , " MB" , EOL;
|
||||||
|
|
||||||
|
|
||||||
|
// Echo memory peak usage
|
||||||
|
echo date('H:i:s') , " Peak memory usage: " , (memory_get_peak_usage(true) / 1024 / 1024) , " MB" , EOL;
|
||||||
|
|
||||||
|
// Echo done
|
||||||
|
echo date('H:i:s') , " Done writing file" , EOL;
|
||||||
|
echo 'File has been created in ' , getcwd() , EOL;
|
|
@ -0,0 +1,126 @@
|
||||||
|
<?php
|
||||||
|
/**
|
||||||
|
* PHPExcel
|
||||||
|
*
|
||||||
|
* Copyright (C) 2006 - 2012 PHPExcel
|
||||||
|
*
|
||||||
|
* This library is free software; you can redistribute it and/or
|
||||||
|
* modify it under the terms of the GNU Lesser General Public
|
||||||
|
* License as published by the Free Software Foundation; either
|
||||||
|
* version 2.1 of the License, or (at your option) any later version.
|
||||||
|
*
|
||||||
|
* This library is distributed in the hope that it will be useful,
|
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||||
|
* Lesser General Public License for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU Lesser General Public
|
||||||
|
* License along with this library; if not, write to the Free Software
|
||||||
|
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
|
||||||
|
*
|
||||||
|
* @category PHPExcel
|
||||||
|
* @package PHPExcel
|
||||||
|
* @copyright Copyright (c) 2006 - 2012 PHPExcel (http://www.codeplex.com/PHPExcel)
|
||||||
|
* @license http://www.gnu.org/licenses/old-licenses/lgpl-2.1.txt LGPL
|
||||||
|
* @version ##VERSION##, ##DATE##
|
||||||
|
*/
|
||||||
|
|
||||||
|
/** Error reporting */
|
||||||
|
error_reporting(E_ALL);
|
||||||
|
ini_set('display_errors', TRUE);
|
||||||
|
ini_set('display_startup_errors', TRUE);
|
||||||
|
|
||||||
|
define('EOL',(PHP_SAPI == 'cli') ? PHP_EOL : '<br />');
|
||||||
|
|
||||||
|
date_default_timezone_set('Europe/London');
|
||||||
|
|
||||||
|
/** Include PHPExcel */
|
||||||
|
require_once '../Classes/PHPExcel.php';
|
||||||
|
|
||||||
|
$cacheMethod = PHPExcel_CachedObjectStorageFactory::cache_to_sqlite3;
|
||||||
|
PHPExcel_Settings::setCacheStorageMethod($cacheMethod);
|
||||||
|
echo date('H:i:s') , " Enable Cell Caching using " , $cacheMethod , " method" , EOL;
|
||||||
|
|
||||||
|
|
||||||
|
// Create new PHPExcel object
|
||||||
|
echo date('H:i:s') , " Create new PHPExcel object" , EOL;
|
||||||
|
$objPHPExcel = new PHPExcel();
|
||||||
|
|
||||||
|
// Set document properties
|
||||||
|
echo date('H:i:s') , " Set properties" , EOL;
|
||||||
|
$objPHPExcel->getProperties()->setCreator("Maarten Balliauw")
|
||||||
|
->setLastModifiedBy("Maarten Balliauw")
|
||||||
|
->setTitle("Office 2007 XLSX Test Document")
|
||||||
|
->setSubject("Office 2007 XLSX Test Document")
|
||||||
|
->setDescription("Test document for Office 2007 XLSX, generated using PHP classes.")
|
||||||
|
->setKeywords("office 2007 openxml php")
|
||||||
|
->setCategory("Test result file");
|
||||||
|
|
||||||
|
|
||||||
|
// Create a first sheet
|
||||||
|
echo date('H:i:s') , " Add data" , EOL;
|
||||||
|
$objPHPExcel->setActiveSheetIndex(0);
|
||||||
|
$objPHPExcel->getActiveSheet()->setCellValue('A1', "Firstname");
|
||||||
|
$objPHPExcel->getActiveSheet()->setCellValue('B1', "Lastname");
|
||||||
|
$objPHPExcel->getActiveSheet()->setCellValue('C1', "Phone");
|
||||||
|
$objPHPExcel->getActiveSheet()->setCellValue('D1', "Fax");
|
||||||
|
$objPHPExcel->getActiveSheet()->setCellValue('E1', "Is Client ?");
|
||||||
|
|
||||||
|
|
||||||
|
// Hide "Phone" and "fax" column
|
||||||
|
echo date('H:i:s') , " Hide 'Phone' and 'fax' columns" , EOL;
|
||||||
|
$objPHPExcel->getActiveSheet()->getColumnDimension('C')->setVisible(false);
|
||||||
|
$objPHPExcel->getActiveSheet()->getColumnDimension('D')->setVisible(false);
|
||||||
|
|
||||||
|
|
||||||
|
// Set outline levels
|
||||||
|
echo date('H:i:s') , " Set outline levels" , EOL;
|
||||||
|
$objPHPExcel->getActiveSheet()->getColumnDimension('E')->setOutlineLevel(1)
|
||||||
|
->setVisible(false)
|
||||||
|
->setCollapsed(true);
|
||||||
|
|
||||||
|
// Freeze panes
|
||||||
|
echo date('H:i:s') , " Freeze panes" , EOL;
|
||||||
|
$objPHPExcel->getActiveSheet()->freezePane('A2');
|
||||||
|
|
||||||
|
|
||||||
|
// Rows to repeat at top
|
||||||
|
echo date('H:i:s') , " Rows to repeat at top" , EOL;
|
||||||
|
$objPHPExcel->getActiveSheet()->getPageSetup()->setRowsToRepeatAtTopByStartAndEnd(1, 1);
|
||||||
|
|
||||||
|
|
||||||
|
// Add data
|
||||||
|
for ($i = 2; $i <= 5000; $i++) {
|
||||||
|
$objPHPExcel->getActiveSheet()->setCellValue('A' . $i, "FName $i")
|
||||||
|
->setCellValue('B' . $i, "LName $i")
|
||||||
|
->setCellValue('C' . $i, "PhoneNo $i")
|
||||||
|
->setCellValue('D' . $i, "FaxNo $i")
|
||||||
|
->setCellValue('E' . $i, true);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// Set active sheet index to the first sheet, so Excel opens this as the first sheet
|
||||||
|
$objPHPExcel->setActiveSheetIndex(0);
|
||||||
|
|
||||||
|
|
||||||
|
// Save Excel 2007 file
|
||||||
|
echo date('H:i:s') , " Write to Excel2007 format" , EOL;
|
||||||
|
$callStartTime = microtime(true);
|
||||||
|
|
||||||
|
$objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel2007');
|
||||||
|
$objWriter->save(str_replace('.php', '.xlsx', __FILE__));
|
||||||
|
$callEndTime = microtime(true);
|
||||||
|
$callTime = $callEndTime - $callStartTime;
|
||||||
|
|
||||||
|
echo date('H:i:s') , " File written to " , str_replace('.php', '.xlsx', pathinfo(__FILE__, PATHINFO_BASENAME)) , EOL;
|
||||||
|
echo 'Call time to write Workbook was ' , sprintf('%.4f',$callTime) , " seconds" , EOL;
|
||||||
|
// Echo memory usage
|
||||||
|
echo date('H:i:s') , ' Current memory usage: ' , (memory_get_usage(true) / 1024 / 1024) , " MB" , EOL;
|
||||||
|
|
||||||
|
|
||||||
|
// Echo memory peak usage
|
||||||
|
echo date('H:i:s') , " Peak memory usage: " , (memory_get_peak_usage(true) / 1024 / 1024) , " MB" , EOL;
|
||||||
|
|
||||||
|
// Echo done
|
||||||
|
echo date('H:i:s') , " Done writing file" , EOL;
|
||||||
|
echo 'File has been created in ' , getcwd() , EOL;
|
|
@ -23,7 +23,7 @@
|
||||||
**************************************************************************************
|
**************************************************************************************
|
||||||
|
|
||||||
|
|
||||||
Fixed in develop branch:
|
Fixed in develop branch for release v1.7.9:
|
||||||
- Feature: (MBaker) Include charts option for HTML Writer
|
- Feature: (MBaker) Include charts option for HTML Writer
|
||||||
- Feature: (MBaker) Added composer file
|
- Feature: (MBaker) Added composer file
|
||||||
- Bugfix: (Asker) Work item 18777 - Error in PHPEXCEL/Calculation.php script on line 2976 (stack pop check)
|
- Bugfix: (Asker) Work item 18777 - Error in PHPEXCEL/Calculation.php script on line 2976 (stack pop check)
|
||||||
|
@ -41,6 +41,8 @@ Fixed in develop branch:
|
||||||
- General: (cfhay) Work item 18958 - Memory and Speed improvements in PHPExcel_Reader_Excel5
|
- General: (cfhay) Work item 18958 - Memory and Speed improvements in PHPExcel_Reader_Excel5
|
||||||
- General: (MBaker) Work item GH-78 - Modify listWorksheetNames() and listWorksheetInfo to use XMLReader with streamed XML rather than SimpleXML
|
- General: (MBaker) Work item GH-78 - Modify listWorksheetNames() and listWorksheetInfo to use XMLReader with streamed XML rather than SimpleXML
|
||||||
- General: (dbonsch) Restructuring of PHPExcel Exceptions
|
- General: (dbonsch) Restructuring of PHPExcel Exceptions
|
||||||
|
- General: (MBaker) Work items 16926 and 15145 - Refactor Calculation Engine from singleton to a Multiton
|
||||||
|
Ensures that calculation cache is maintained independently for different workbooks
|
||||||
- Bugfix: (techhead) Work item GH-70 - Fixed formula/formatting bug when removing rows
|
- Bugfix: (techhead) Work item GH-70 - Fixed formula/formatting bug when removing rows
|
||||||
- Bugfix: (alexgann) Work item GH-63 - Fix to cellExists for non-existent namedRanges
|
- Bugfix: (alexgann) Work item GH-63 - Fix to cellExists for non-existent namedRanges
|
||||||
- Bugfix: (MBaker) Work item 18844 - cache_in_memory_gzip "eats" last worksheet line, cache_in_memory doesn't
|
- Bugfix: (MBaker) Work item 18844 - cache_in_memory_gzip "eats" last worksheet line, cache_in_memory doesn't
|
||||||
|
@ -52,6 +54,7 @@ Fixed in develop branch:
|
||||||
- Bugfix: (MBaker) Work item GH-113 - canRead() Error for GoogleDocs ODS files: in ODS files from Google Docs there is no mimetype file
|
- Bugfix: (MBaker) Work item GH-113 - canRead() Error for GoogleDocs ODS files: in ODS files from Google Docs there is no mimetype file
|
||||||
- Bugfix: (MBaker) Work item GH-80 - "Sheet index is out of bounds." Exception
|
- Bugfix: (MBaker) Work item GH-80 - "Sheet index is out of bounds." Exception
|
||||||
- Bugfix: (ccorliss) Work item GH-105 - Fixed number format fatal error
|
- Bugfix: (ccorliss) Work item GH-105 - Fixed number format fatal error
|
||||||
|
- Bugfix: (MBaker) - Add DROP TABLE in destructor for SQLite and SQLite3 cache controllers
|
||||||
|
|
||||||
--------------------------------------------------------------------------------
|
--------------------------------------------------------------------------------
|
||||||
BREAKING CHANGE! As part of the planned changes for handling array formulae in
|
BREAKING CHANGE! As part of the planned changes for handling array formulae in
|
||||||
|
|
|
@ -35,7 +35,16 @@ class AdvancedValueBinderTest extends PHPUnit_Framework_TestCase
|
||||||
*/
|
*/
|
||||||
public function testCurrency($value, $valueBinded, $format, $thousandsSeparator, $decimalSeparator, $currencyCode)
|
public function testCurrency($value, $valueBinded, $format, $thousandsSeparator, $decimalSeparator, $currencyCode)
|
||||||
{
|
{
|
||||||
$sheet = $this->getMock('PHPExcel_Worksheet', array('getStyle', 'getNumberFormat', 'setFormatCode'));
|
$sheet = $this->getMock(
|
||||||
|
'PHPExcel_Worksheet',
|
||||||
|
array('getStyle', 'getNumberFormat', 'setFormatCode','getCellCacheController')
|
||||||
|
);
|
||||||
|
$cache = $this->getMockBuilder('PHPExcel_CachedObjectStorage_Memory')
|
||||||
|
->disableOriginalConstructor()
|
||||||
|
->getMock();
|
||||||
|
$cache->expects($this->any())
|
||||||
|
->method('getParent')
|
||||||
|
->will($this->returnValue($sheet));
|
||||||
|
|
||||||
$sheet->expects($this->once())
|
$sheet->expects($this->once())
|
||||||
->method('getStyle')
|
->method('getStyle')
|
||||||
|
@ -47,12 +56,15 @@ class AdvancedValueBinderTest extends PHPUnit_Framework_TestCase
|
||||||
->method('setFormatCode')
|
->method('setFormatCode')
|
||||||
->with($format)
|
->with($format)
|
||||||
->will($this->returnSelf());
|
->will($this->returnSelf());
|
||||||
|
$sheet->expects($this->any())
|
||||||
|
->method('getCellCacheController')
|
||||||
|
->will($this->returnValue($cache));
|
||||||
|
|
||||||
PHPExcel_Shared_String::setCurrencyCode($currencyCode);
|
PHPExcel_Shared_String::setCurrencyCode($currencyCode);
|
||||||
PHPExcel_Shared_String::setDecimalSeparator($decimalSeparator);
|
PHPExcel_Shared_String::setDecimalSeparator($decimalSeparator);
|
||||||
PHPExcel_Shared_String::setThousandsSeparator($thousandsSeparator);
|
PHPExcel_Shared_String::setThousandsSeparator($thousandsSeparator);
|
||||||
|
|
||||||
$cell = new PHPExcel_Cell('A', 1, null, PHPExcel_Cell_DataType::TYPE_STRING, $sheet);
|
$cell = new PHPExcel_Cell(NULL, PHPExcel_Cell_DataType::TYPE_STRING, $sheet);
|
||||||
|
|
||||||
$binder = new PHPExcel_Cell_AdvancedValueBinder();
|
$binder = new PHPExcel_Cell_AdvancedValueBinder();
|
||||||
$binder->bindValue($cell, $value);
|
$binder->bindValue($cell, $value);
|
||||||
|
|
|
@ -18,6 +18,12 @@ class AutoFilterTest extends PHPUnit_Framework_TestCase
|
||||||
$this->_mockWorksheetObject = $this->getMockBuilder('PHPExcel_Worksheet')
|
$this->_mockWorksheetObject = $this->getMockBuilder('PHPExcel_Worksheet')
|
||||||
->disableOriginalConstructor()
|
->disableOriginalConstructor()
|
||||||
->getMock();
|
->getMock();
|
||||||
|
$this->_mockCacheController = $this->getMockBuilder('PHPExcel_CachedObjectStorage_Memory')
|
||||||
|
->disableOriginalConstructor()
|
||||||
|
->getMock();
|
||||||
|
$this->_mockWorksheetObject->expects($this->any())
|
||||||
|
->method('getCellCacheController')
|
||||||
|
->will($this->returnValue($this->_mockCacheController));
|
||||||
|
|
||||||
$this->_testAutoFilterObject = new PHPExcel_Worksheet_AutoFilter(
|
$this->_testAutoFilterObject = new PHPExcel_Worksheet_AutoFilter(
|
||||||
$this->_testInitialRange,
|
$this->_testInitialRange,
|
||||||
|
|
|
@ -35,11 +35,11 @@
|
||||||
"22 August 98", 36029
|
"22 August 98", 36029
|
||||||
"1st March 2007", 39142 // MS Excel will fail with a #VALUE return, but PHPExcel can parse this date
|
"1st March 2007", 39142 // MS Excel will fail with a #VALUE return, but PHPExcel can parse this date
|
||||||
"The 1st day of March 2007", "#VALUE!"
|
"The 1st day of March 2007", "#VALUE!"
|
||||||
"1 Jan", 40909
|
"1 Jan", 41275
|
||||||
"31/12", 41274
|
"31/12", 41639
|
||||||
"12/31", 11658 // Excel reads as 1st December 1931, not 31st December in current year
|
"12/31", 11658 // Excel reads as 1st December 1931, not 31st December in current year
|
||||||
"5-JUL", 41095
|
"5-JUL", 41460
|
||||||
"5 Jul", 41095
|
"5 Jul", 41460
|
||||||
"12/2008", 39783
|
"12/2008", 39783
|
||||||
"10/32", 11963
|
"10/32", 11963
|
||||||
11, "#VALUE!"
|
11, "#VALUE!"
|
||||||
|
|
Loading…
Reference in New Issue