diff --git a/Classes/PHPExcel/Cell.php b/Classes/PHPExcel/Cell.php index b6c8fcf8..e63d821b 100644 --- a/Classes/PHPExcel/Cell.php +++ b/Classes/PHPExcel/Cell.php @@ -1,108 +1,112 @@ _parent->getCellCacheController()->updateCacheData($this); @@ -110,7 +114,7 @@ class PHPExcel_Cell } public function detach() { - $this->_parent = null; + $this->_parent = NULL; } public function attach($parent) { @@ -119,16 +123,16 @@ class PHPExcel_Cell /** - * Create a new Cell + * Create a new Cell * - * @param string $pColumn - * @param int $pRow - * @param mixed $pValue - * @param string $pDataType - * @param PHPExcel_Worksheet $pSheet - * @throws Exception + * @param string $pColumn + * @param int $pRow + * @param mixed $pValue + * @param string $pDataType + * @param PHPExcel_Worksheet $pSheet + * @throws PHPExcel_Exception */ - public function __construct($pColumn = 'A', $pRow = 1, $pValue = null, $pDataType = null, PHPExcel_Worksheet $pSheet = null) + public function __construct($pColumn = 'A', $pRow = 1, $pValue = NULL, $pDataType = NULL, PHPExcel_Worksheet $pSheet = NULL) { // Initialise cell coordinate $this->_column = strtoupper($pColumn); @@ -141,13 +145,13 @@ class PHPExcel_Cell $this->_parent = $pSheet; // Set datatype? - if ($pDataType !== null) { + if ($pDataType !== NULL) { if ($pDataType == PHPExcel_Cell_DataType::TYPE_STRING2) $pDataType = PHPExcel_Cell_DataType::TYPE_STRING; $this->_dataType = $pDataType; } else { if (!self::getValueBinder()->bindValue($this, $pValue)) { - throw new Exception("Value could not be bound to cell."); + throw new PHPExcel_Exception("Value could not be bound to cell."); } } @@ -156,9 +160,9 @@ class PHPExcel_Cell } /** - * Get cell coordinate column + * Get cell coordinate column * - * @return string + * @return string */ public function getColumn() { @@ -166,9 +170,9 @@ class PHPExcel_Cell } /** - * Get cell coordinate row + * Get cell coordinate row * - * @return int + * @return int */ public function getRow() { @@ -176,9 +180,9 @@ class PHPExcel_Cell } /** - * Get cell coordinate + * Get cell coordinate * - * @return string + * @return string */ public function getCoordinate() { @@ -186,9 +190,9 @@ class PHPExcel_Cell } /** - * Get cell value + * Get cell value * - * @return mixed + * @return mixed */ public function getValue() { @@ -196,42 +200,45 @@ class PHPExcel_Cell } /** - * Get cell value with formatting + * Get cell value with formatting * - * @return string + * @return string */ public function getFormattedValue() { - return (string) PHPExcel_Style_NumberFormat::toFormattedString( $this->getCalculatedValue(), - $this->_parent->getParent()->getCellXfByIndex($this->getXfIndex())->getNumberFormat()->getFormatCode() - ); + return (string) PHPExcel_Style_NumberFormat::toFormattedString( + $this->getCalculatedValue(), + $this->_parent->getParent()->getCellXfByIndex($this->getXfIndex()) + ->getNumberFormat()->getFormatCode() + ); } /** - * Set cell value + * Set cell value * - * Sets the value for a cell, automatically determining the datatype using the value binder + * Sets the value for a cell, automatically determining the datatype using the value binder * - * @param mixed $pValue Value - * @return PHPExcel_Cell + * @param mixed $pValue Value + * @return PHPExcel_Cell + * @throws PHPExcel_Exception */ - public function setValue($pValue = null) + public function setValue($pValue = NULL) { if (!self::getValueBinder()->bindValue($this, $pValue)) { - throw new Exception("Value could not be bound to cell."); + throw new PHPExcel_Exception("Value could not be bound to cell."); } return $this; } /** - * Set the value for a cell, with the explicit data type passed to the method (bypassing any use of the value binder) + * Set the value for a cell, with the explicit data type passed to the method (bypassing any use of the value binder) * - * @param mixed $pValue Value - * @param string $pDataType Explicit data type - * @return PHPExcel_Cell - * @throws Exception + * @param mixed $pValue Value + * @param string $pDataType Explicit data type + * @return PHPExcel_Cell + * @throws PHPExcel_Exception */ - public function setValueExplicit($pValue = null, $pDataType = PHPExcel_Cell_DataType::TYPE_STRING) + public function setValueExplicit($pValue = NULL, $pDataType = PHPExcel_Cell_DataType::TYPE_STRING) { // set the value according to data type switch ($pDataType) { @@ -242,25 +249,20 @@ class PHPExcel_Cell case PHPExcel_Cell_DataType::TYPE_INLINE: $this->_value = PHPExcel_Cell_DataType::checkString($pValue); break; - case PHPExcel_Cell_DataType::TYPE_NUMERIC: $this->_value = (float)$pValue; break; - case PHPExcel_Cell_DataType::TYPE_FORMULA: $this->_value = (string)$pValue; break; - case PHPExcel_Cell_DataType::TYPE_BOOL: $this->_value = (bool)$pValue; break; - case PHPExcel_Cell_DataType::TYPE_ERROR: $this->_value = PHPExcel_Cell_DataType::checkErrorCode($pValue); break; - default: - throw new Exception('Invalid datatype: ' . $pDataType); + throw new PHPExcel_Exception('Invalid datatype: ' . $pDataType); break; } @@ -271,13 +273,14 @@ class PHPExcel_Cell } /** - * Get calculated cell value + * Get calculated cell value * * @deprecated Since version 1.7.8 for planned changes to cell for array formula handling * - * @return mixed + * @return mixed + * @throws PHPExcel_Exception */ - public function getCalculatedValue($resetLog=true) + public function getCalculatedValue($resetLog = TRUE) { // echo 'Cell '.$this->getCoordinate().' value is a '.$this->_dataType.' with a value of '.$this->getValue().'
'; if ($this->_dataType == PHPExcel_Cell_DataType::TYPE_FORMULA) { @@ -292,7 +295,11 @@ class PHPExcel_Cell } // echo 'Calculation Exception: '.$ex->getMessage().'
'; $result = '#N/A'; - throw(new Exception($this->getParent()->getTitle().'!'.$this->getCoordinate().' -> '.$ex->getMessage())); + throw( + new PHPExcel_Exception( + $this->getParent()->getTitle().'!'.$this->getCoordinate().' -> '.$ex->getMessage() + ) + ); } if ($result === '#Not Yet Implemented') { @@ -305,21 +312,19 @@ class PHPExcel_Cell // if ($this->_value === NULL) { // echo 'Cell '.$this->getCoordinate().' has no value, formula or otherwise
'; -// return null; +// return NULL; // } // echo 'Cell value for '.$this->getCoordinate().' is not a formula: Returning data value of '.$this->_value.'
'; return $this->_value; } /** - * Set calculated value (used for caching) + * Set old calculated value (cached) * - * @deprecated Since version 1.7.8 for planned changes to cell for array formula handling - * - * @param mixed $pValue Value - * @return PHPExcel_Cell + * @param mixed $pValue Value + * @return PHPExcel_Cell */ - public function setCalculatedValue($pValue = null) + public function setCalculatedValue($pValue = NULL) { if ($pValue !== NULL) { $this->_calculatedValue = (is_numeric($pValue)) ? (float) $pValue : $pValue; @@ -329,9 +334,14 @@ class PHPExcel_Cell } /** - * Get old calculated value (cached) + * Get old calculated value (cached) + * This returns the value last calculated by MS Excel or whichever spreadsheet program was used to + * create the original spreadsheet file. + * Note that this value is not guaranteed to refelect the actual calculated value because it is + * possible that auto-calculation was disabled in the original spreadsheet, and underlying data + * values used by the formula have changed since it was last calculated. * - * @return mixed + * @return mixed */ public function getOldCalculatedValue() { @@ -339,9 +349,9 @@ class PHPExcel_Cell } /** - * Get cell data type + * Get cell data type * - * @return string + * @return string */ public function getDataType() { @@ -349,10 +359,10 @@ class PHPExcel_Cell } /** - * Set cell data type + * Set cell data type * - * @param string $pDataType - * @return PHPExcel_Cell + * @param string $pDataType + * @return PHPExcel_Cell */ public function setDataType($pDataType = PHPExcel_Cell_DataType::TYPE_STRING) { @@ -365,44 +375,46 @@ class PHPExcel_Cell } /** - * Has Data validation? + * Does this cell contain Data validation rules? * - * @return boolean + * @return boolean + * @throws PHPExcel_Exception */ public function hasDataValidation() { if (!isset($this->_parent)) { - throw new 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()); } /** - * Get Data validation + * Get Data validation rules * - * @return PHPExcel_Cell_DataValidation + * @return PHPExcel_Cell_DataValidation + * @throws PHPExcel_Exception */ public function getDataValidation() { if (!isset($this->_parent)) { - throw new 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()); } /** - * Set Data validation + * Set Data validation rules * - * @param PHPExcel_Cell_DataValidation $pDataValidation - * @throws Exception - * @return PHPExcel_Cell + * @param PHPExcel_Cell_DataValidation $pDataValidation + * @return PHPExcel_Cell + * @throws PHPExcel_Exception */ - public function setDataValidation(PHPExcel_Cell_DataValidation $pDataValidation = null) + public function setDataValidation(PHPExcel_Cell_DataValidation $pDataValidation = NULL) { if (!isset($this->_parent)) { - throw new 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); @@ -411,45 +423,46 @@ class PHPExcel_Cell } /** - * Has Hyperlink + * Does this cell contain a Hyperlink? * - * @return boolean + * @return boolean + * @throws PHPExcel_Exception */ public function hasHyperlink() { if (!isset($this->_parent)) { - throw new 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()); } /** - * Get Hyperlink + * Get Hyperlink * - * @throws Exception - * @return PHPExcel_Cell_Hyperlink + * @return PHPExcel_Cell_Hyperlink + * @throws PHPExcel_Exception */ public function getHyperlink() { if (!isset($this->_parent)) { - throw new 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()); } /** - * Set Hyperlink + * Set Hyperlink * - * @param PHPExcel_Cell_Hyperlink $pHyperlink - * @throws Exception - * @return PHPExcel_Cell + * @param PHPExcel_Cell_Hyperlink $pHyperlink + * @return PHPExcel_Cell + * @throws PHPExcel_Exception */ - public function setHyperlink(PHPExcel_Cell_Hyperlink $pHyperlink = null) + public function setHyperlink(PHPExcel_Cell_Hyperlink $pHyperlink = NULL) { if (!isset($this->_parent)) { - throw new 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); @@ -458,19 +471,19 @@ class PHPExcel_Cell } /** - * Get parent + * Get parent worksheet * - * @return PHPExcel_Worksheet + * @return PHPExcel_Worksheet */ public function getParent() { return $this->_parent; } /** - * Re-bind parent + * Re-bind parent * - * @param PHPExcel_Worksheet $parent - * @return PHPExcel_Cell + * @param PHPExcel_Worksheet $parent + * @return PHPExcel_Cell */ public function rebindParent(PHPExcel_Worksheet $parent) { $this->_parent = $parent; @@ -479,17 +492,17 @@ class PHPExcel_Cell } /** - * Is cell in a specific range? + * Is cell in a specific range? * - * @param string $pRange Cell range (e.g. A1:A1) - * @return boolean + * @param string $pRange Cell range (e.g. A1:A1) + * @return boolean */ public function isInRange($pRange = 'A1:A1') { - list($rangeStart,$rangeEnd) = PHPExcel_Cell::rangeBoundaries($pRange); + list($rangeStart,$rangeEnd) = self::rangeBoundaries($pRange); // Translate properties - $myColumn = PHPExcel_Cell::columnIndexFromString($this->getColumn()); + $myColumn = self::columnIndexFromString($this->getColumn()); $myRow = $this->getRow(); // Verify if cell is in range @@ -499,80 +512,90 @@ class PHPExcel_Cell } /** - * Coordinate from string + * Coordinate from string * - * @param string $pCoordinateString - * @return array Array containing column and row (indexes 0 and 1) - * @throws Exception + * @param string $pCoordinateString + * @return array Array containing column and row (indexes 0 and 1) + * @throws PHPExcel_Exception */ public static function coordinateFromString($pCoordinateString = 'A1') { if (preg_match("/^([$]?[A-Z]{1,3})([$]?\d{1,7})$/", $pCoordinateString, $matches)) { return array($matches[1],$matches[2]); - } elseif ((strpos($pCoordinateString,':') !== false) || (strpos($pCoordinateString,',') !== false)) { - throw new Exception('Cell coordinate string can not be a range of cells.'); + } elseif ((strpos($pCoordinateString,':') !== FALSE) || (strpos($pCoordinateString,',') !== FALSE)) { + throw new PHPExcel_Exception('Cell coordinate string can not be a range of cells'); } elseif ($pCoordinateString == '') { - throw new Exception('Cell coordinate can not be zero-length string.'); - } else { - throw new Exception('Invalid cell coordinate '.$pCoordinateString); + throw new PHPExcel_Exception('Cell coordinate can not be zero-length string'); } + + throw new PHPExcel_Exception('Invalid cell coordinate '.$pCoordinateString); } /** - * Make string row, column or cell coordinate absolute + * Make string row, column or cell coordinate absolute * - * @param string $pCoordinateString e.g. 'A' or '1' or 'A1' - * @return string Absolute coordinate e.g. '$A' or '$1' or '$A$1' - * @throws Exception + * @param string $pCoordinateString e.g. 'A' or '1' or 'A1' + * Note that this value can be a row or column reference as well as a cell reference + * @return string Absolute coordinate e.g. '$A' or '$1' or '$A$1' + * @throws PHPExcel_Exception */ public static function absoluteReference($pCoordinateString = 'A1') { - if (strpos($pCoordinateString,':') === false && strpos($pCoordinateString,',') === false) { + if (strpos($pCoordinateString,':') === FALSE && strpos($pCoordinateString,',') === FALSE) { + // Split out any worksheet name from the reference + $worksheet = ''; + $cellAddress = explode('!',$pCoordinateString); + if (count($cellAddress) > 1) { + list($worksheet,$pCoordinateString) = $cellAddress; + } + if ($worksheet > '') $worksheet .= '!'; + // Create absolute coordinate if (ctype_digit($pCoordinateString)) { - return '$'.$pCoordinateString; + return $worksheet . '$' . $pCoordinateString; } elseif (ctype_alpha($pCoordinateString)) { - return '$'.strtoupper($pCoordinateString); + return $worksheet . '$' . strtoupper($pCoordinateString); } - return self::absoluteCoordinate($pCoordinateString); - } else { - throw new Exception("Coordinate string should not be a cell range."); + return $worksheet . self::absoluteCoordinate($pCoordinateString); } + + throw new PHPExcel_Exception('Cell coordinate string can not be a range of cells'); } /** - * Make string coordinate absolute + * Make string coordinate absolute * - * @param string $pCoordinateString e.g. 'A1' - * @return string Absolute coordinate e.g. '$A$1' - * @throws Exception + * @param string $pCoordinateString e.g. 'A1' + * @return string Absolute coordinate e.g. '$A$1' + * @throws PHPExcel_Exception */ public static function absoluteCoordinate($pCoordinateString = 'A1') { - if (strpos($pCoordinateString,':') === false && strpos($pCoordinateString,',') === false) { - // Create absolute coordinate + if (strpos($pCoordinateString,':') === FALSE && strpos($pCoordinateString,',') === FALSE) { + // Split out any worksheet name from the coordinate $worksheet = ''; $cellAddress = explode('!',$pCoordinateString); - if (count($cellAddress) == 2) { + if (count($cellAddress) > 1) { list($worksheet,$pCoordinateString) = $cellAddress; } + if ($worksheet > '') $worksheet .= '!'; - list($column, $row) = PHPExcel_Cell::coordinateFromString($pCoordinateString); - if ($column[0] == '$') $column = substr($column,1); - if ($row[0] == '$') $row = substr($row,1); - if ($worksheet > '') - $worksheet .= '!'; + // Create absolute coordinate + list($column, $row) = self::coordinateFromString($pCoordinateString); + $column = ltrim($column,'$'); + $row = ltrim($row,'$'); return $worksheet . '$' . $column . '$' . $row; - } else { - throw new Exception("Coordinate string should not be a cell range."); } + + throw new PHPExcel_Exception('Cell coordinate string can not be a range of cells'); } /** - * Split range into coordinate strings + * Split range into coordinate strings * - * @param string $pRange - * @return array Array containg one or more arrays containing one or two coordinate strings + * @param string $pRange e.g. 'B4:D9' or 'B4:D9,H2:O11' + * @return array Array containg one or more arrays containing one or two coordinate strings + * e.g. array('B4','D9') or array(array('B4','D9'),array('H2','O11')) */ public static function splitRange($pRange = 'A1:A1') { @@ -585,17 +608,17 @@ class PHPExcel_Cell } /** - * Build range from coordinate strings + * Build range from coordinate strings * - * @param array $pRange Array containg one or more arrays containing one or two coordinate strings - * @return string String representation of $pRange - * @throws Exception + * @param array $pRange Array containg one or more arrays containing one or two coordinate strings + * @return string String representation of $pRange + * @throws PHPExcel_Exception */ public static function buildRange($pRange) { // Verify range if (!is_array($pRange) || empty($pRange) || !is_array($pRange[0])) { - throw new Exception('Range does not contain any information.'); + throw new PHPExcel_Exception('Range does not contain any information'); } // Build range @@ -610,10 +633,10 @@ class PHPExcel_Cell } /** - * Calculate range boundaries + * Calculate range boundaries * - * @param string $pRange Cell range (e.g. A1:A1) - * @return array Range coordinates (Start Cell, End Cell) where Start Cell and End Cell are arrays (Column Number, Row Number) + * @param string $pRange Cell range (e.g. A1:A1) + * @return array Range coordinates (Start Cell, End Cell) where Start Cell and End Cell are arrays (Column Number, Row Number) */ public static function rangeBoundaries($pRange = 'A1:A1') { @@ -621,42 +644,42 @@ class PHPExcel_Cell $pRange = strtoupper($pRange); // Extract range - if (strpos($pRange, ':') === false) { + if (strpos($pRange, ':') === FALSE) { $rangeA = $rangeB = $pRange; } else { list($rangeA, $rangeB) = explode(':', $pRange); } // Calculate range outer borders - $rangeStart = PHPExcel_Cell::coordinateFromString($rangeA); - $rangeEnd = PHPExcel_Cell::coordinateFromString($rangeB); + $rangeStart = self::coordinateFromString($rangeA); + $rangeEnd = self::coordinateFromString($rangeB); // Translate column into index - $rangeStart[0] = PHPExcel_Cell::columnIndexFromString($rangeStart[0]); - $rangeEnd[0] = PHPExcel_Cell::columnIndexFromString($rangeEnd[0]); + $rangeStart[0] = self::columnIndexFromString($rangeStart[0]); + $rangeEnd[0] = self::columnIndexFromString($rangeEnd[0]); return array($rangeStart, $rangeEnd); } /** - * Calculate range dimension + * Calculate range dimension * - * @param string $pRange Cell range (e.g. A1:A1) - * @return array Range dimension (width, height) + * @param string $pRange Cell range (e.g. A1:A1) + * @return array Range dimension (width, height) */ public static function rangeDimension($pRange = 'A1:A1') { // Calculate range outer borders - list($rangeStart,$rangeEnd) = PHPExcel_Cell::rangeBoundaries($pRange); + list($rangeStart,$rangeEnd) = self::rangeBoundaries($pRange); return array( ($rangeEnd[0] - $rangeStart[0] + 1), ($rangeEnd[1] - $rangeStart[1] + 1) ); } /** - * Calculate range boundaries + * Calculate range boundaries * - * @param string $pRange Cell range (e.g. A1:A1) - * @return array Range boundaries (staring Column, starting Row, Final Column, Final Row) + * @param string $pRange Cell range (e.g. A1:A1) + * @return array Range boundaries (staring Column, starting Row, Final Column, Final Row) */ public static function getRangeBoundaries($pRange = 'A1:A1') { @@ -664,7 +687,7 @@ class PHPExcel_Cell $pRange = strtoupper($pRange); // Extract range - if (strpos($pRange, ':') === false) { + if (strpos($pRange, ':') === FALSE) { $rangeA = $rangeB = $pRange; } else { list($rangeA, $rangeB) = explode(':', $pRange); @@ -674,11 +697,11 @@ class PHPExcel_Cell } /** - * Column index from string + * Column index from string * - * @param string $pString - * @return int Column index (base 1 !!!) - * @throws Exception + * @param string $pString + * @return int Column index (base 1 !!!) + * @throws Exception */ public static function columnIndexFromString($pString = 'A') { @@ -714,14 +737,14 @@ class PHPExcel_Cell return $_indexCache[$pString]; } } - throw new Exception("Column string index can not be " . ((isset($pString{0})) ? "longer than 3 characters" : "empty") . "."); + throw new PHPExcel_Exception("Column string index can not be " . ((isset($pString{0})) ? "longer than 3 characters" : "empty")); } /** - * String from columnindex + * String from columnindex * - * @param int $pColumnIndex Column index (base 0 !!!) - * @return string + * @param int $pColumnIndex Column index (base 0 !!!) + * @return string */ public static function stringFromColumnIndex($pColumnIndex = 0) { @@ -747,10 +770,10 @@ class PHPExcel_Cell } /** - * Extract all cell references in range + * Extract all cell references in range * - * @param string $pRange Range (e.g. A1 or A1:A10 or A1:A10 A100:A1000) - * @return array Array containing single cell references + * @param string $pRange Range (e.g. A1 or A1:A10 or A1:A10 A100:A1000) + * @return array Array containing single cell references */ public static function extractAllCellReferencesInRange($pRange = 'A1') { // Returnvalue @@ -760,13 +783,13 @@ class PHPExcel_Cell $cellBlocks = explode(' ', str_replace('$', '', strtoupper($pRange))); foreach ($cellBlocks as $cellBlock) { // Single cell? - if (strpos($cellBlock,':') === false && strpos($cellBlock,',') === false) { + if (strpos($cellBlock,':') === FALSE && strpos($cellBlock,',') === FALSE) { $returnValue[] = $cellBlock; continue; } // Range... - $ranges = PHPExcel_Cell::splitRange($cellBlock); + $ranges = self::splitRange($cellBlock); foreach($ranges as $range) { // Single cell? if (!isset($range[1])) { @@ -813,7 +836,7 @@ class PHPExcel_Cell return -1; } elseif ($a->_row > $b->_row) { return 1; - } elseif (PHPExcel_Cell::columnIndexFromString($a->_column) < PHPExcel_Cell::columnIndexFromString($b->_column)) { + } elseif (self::columnIndexFromString($a->_column) < self::columnIndexFromString($b->_column)) { return -1; } else { return 1; @@ -839,7 +862,7 @@ class PHPExcel_Cell * @param PHPExcel_Cell_IValueBinder $binder * @throws Exception */ - public static function setValueBinder(PHPExcel_Cell_IValueBinder $binder = null) { + public static function setValueBinder(PHPExcel_Cell_IValueBinder $binder = NULL) { if ($binder === NULL) { throw new Exception("A PHPExcel_Cell_IValueBinder is required for PHPExcel to function correctly."); } diff --git a/Classes/PHPExcel/Exception.php b/Classes/PHPExcel/Exception.php new file mode 100644 index 00000000..a4354531 --- /dev/null +++ b/Classes/PHPExcel/Exception.php @@ -0,0 +1,52 @@ +line = $line; + $e->file = $file; + throw $e; + } +} diff --git a/unitTests/PHPExcel/CellTest.php b/unitTests/PHPExcel/CellTest.php new file mode 100644 index 00000000..0f7f3eb7 --- /dev/null +++ b/unitTests/PHPExcel/CellTest.php @@ -0,0 +1,259 @@ +assertEquals($expectedResult, $result); + } + + public function providerColumnString() + { + return new testDataFileIterator('rawTestData/ColumnString.data'); + } + + public function testColumnIndexFromStringTooLong() + { + $cellAddress = 'ABCD'; + try { + $result = call_user_func(array('PHPExcel_Cell','columnIndexFromString'),$cellAddress); + } catch (PHPExcel_Exception $e) { + $this->assertEquals($e->getMessage(), 'Column string index can not be longer than 3 characters'); + return; + } + $this->fail('An expected exception has not been raised.'); + } + + public function testColumnIndexFromStringTooShort() + { + $cellAddress = ''; + try { + $result = call_user_func(array('PHPExcel_Cell','columnIndexFromString'),$cellAddress); + } catch (PHPExcel_Exception $e) { + $this->assertEquals($e->getMessage(), 'Column string index can not be empty'); + return; + } + $this->fail('An expected exception has not been raised.'); + } + + /** + * @dataProvider providerColumnIndex + */ + public function testStringFromColumnIndex() + { + $args = func_get_args(); + $expectedResult = array_pop($args); + $result = call_user_func_array(array('PHPExcel_Cell','stringFromColumnIndex'),$args); + $this->assertEquals($expectedResult, $result); + } + + public function providerColumnIndex() + { + return new testDataFileIterator('rawTestData/ColumnIndex.data'); + } + + /** + * @dataProvider providerCoordinates + */ + public function testCoordinateFromString() + { + $args = func_get_args(); + $expectedResult = array_pop($args); + $result = call_user_func_array(array('PHPExcel_Cell','coordinateFromString'),$args); + $this->assertEquals($expectedResult, $result); + } + + public function providerCoordinates() + { + return new testDataFileIterator('rawTestData/CellCoordinates.data'); + } + + public function testCoordinateFromStringWithRangeAddress() + { + $cellAddress = 'A1:AI2012'; + try { + $result = call_user_func(array('PHPExcel_Cell','coordinateFromString'),$cellAddress); + } catch (PHPExcel_Exception $e) { + $this->assertEquals($e->getMessage(), 'Cell coordinate string can not be a range of cells'); + return; + } + $this->fail('An expected exception has not been raised.'); + } + + public function testCoordinateFromStringWithEmptyAddress() + { + $cellAddress = ''; + try { + $result = call_user_func(array('PHPExcel_Cell','coordinateFromString'),$cellAddress); + } catch (PHPExcel_Exception $e) { + $this->assertEquals($e->getMessage(), 'Cell coordinate can not be zero-length string'); + return; + } + $this->fail('An expected exception has not been raised.'); + } + + public function testCoordinateFromStringWithInvalidAddress() + { + $cellAddress = 'AI'; + try { + $result = call_user_func(array('PHPExcel_Cell','coordinateFromString'),$cellAddress); + } catch (PHPExcel_Exception $e) { + $this->assertEquals($e->getMessage(), 'Invalid cell coordinate '.$cellAddress); + return; + } + $this->fail('An expected exception has not been raised.'); + } + + /** + * @dataProvider providerAbsoluteCoordinates + */ + public function testAbsoluteCoordinateFromString() + { + $args = func_get_args(); + $expectedResult = array_pop($args); + $result = call_user_func_array(array('PHPExcel_Cell','absoluteCoordinate'),$args); + $this->assertEquals($expectedResult, $result); + } + + public function providerAbsoluteCoordinates() + { + return new testDataFileIterator('rawTestData/CellAbsoluteCoordinate.data'); + } + + public function testAbsoluteCoordinateFromStringWithRangeAddress() + { + $cellAddress = 'A1:AI2012'; + try { + $result = call_user_func(array('PHPExcel_Cell','absoluteCoordinate'),$cellAddress); + } catch (PHPExcel_Exception $e) { + $this->assertEquals($e->getMessage(), 'Cell coordinate string can not be a range of cells'); + return; + } + $this->fail('An expected exception has not been raised.'); + } + + /** + * @dataProvider providerAbsoluteReferences + */ + public function testAbsoluteReferenceFromString() + { + $args = func_get_args(); + $expectedResult = array_pop($args); + $result = call_user_func_array(array('PHPExcel_Cell','absoluteReference'),$args); + $this->assertEquals($expectedResult, $result); + } + + public function providerAbsoluteReferences() + { + return new testDataFileIterator('rawTestData/CellAbsoluteReference.data'); + } + + public function testAbsoluteReferenceFromStringWithRangeAddress() + { + $cellAddress = 'A1:AI2012'; + try { + $result = call_user_func(array('PHPExcel_Cell','absoluteReference'),$cellAddress); + } catch (PHPExcel_Exception $e) { + $this->assertEquals($e->getMessage(), 'Cell coordinate string can not be a range of cells'); + return; + } + $this->fail('An expected exception has not been raised.'); + } + + /** + * @dataProvider providerSplitRange + */ + public function testSplitRange() + { + $args = func_get_args(); + $expectedResult = array_pop($args); + $result = call_user_func_array(array('PHPExcel_Cell','splitRange'),$args); + foreach($result as $key => $split) { + $this->assertEquals($expectedResult[$key], $split); + } + } + + public function providerSplitRange() + { + return new testDataFileIterator('rawTestData/CellSplitRange.data'); + } + + /** + * @dataProvider providerBuildRange + */ + public function testBuildRange() + { + $args = func_get_args(); + $expectedResult = array_pop($args); + $result = call_user_func_array(array('PHPExcel_Cell','buildRange'),$args); + $this->assertEquals($expectedResult, $result); + } + + public function providerBuildRange() + { + return new testDataFileIterator('rawTestData/CellBuildRange.data'); + } + + public function testBuildRangeInvalid() + { + $cellRange = ''; + try { + $result = call_user_func(array('PHPExcel_Cell','buildRange'),$cellRange); + } catch (PHPExcel_Exception $e) { + $this->assertEquals($e->getMessage(), 'Range does not contain any information'); + return; + } + $this->fail('An expected exception has not been raised.'); + } + + /** + * @dataProvider providerRangeBoundaries + */ + public function testRangeBoundaries() + { + $args = func_get_args(); + $expectedResult = array_pop($args); + $result = call_user_func_array(array('PHPExcel_Cell','rangeBoundaries'),$args); + $this->assertEquals($expectedResult, $result); + } + + public function providerRangeBoundaries() + { + return new testDataFileIterator('rawTestData/CellRangeBoundaries.data'); + } + + /** + * @dataProvider providerRangeDimension + */ + public function testRangeDimension() + { + $args = func_get_args(); + $expectedResult = array_pop($args); + $result = call_user_func_array(array('PHPExcel_Cell','rangeDimension'),$args); + $this->assertEquals($expectedResult, $result); + } + + public function providerRangeDimension() + { + return new testDataFileIterator('rawTestData/CellRangeDimension.data'); + } + +} diff --git a/unitTests/rawTestData/CellAbsoluteCoordinate.data b/unitTests/rawTestData/CellAbsoluteCoordinate.data new file mode 100644 index 00000000..ad642947 --- /dev/null +++ b/unitTests/rawTestData/CellAbsoluteCoordinate.data @@ -0,0 +1,12 @@ +"A1", "$A$1" +"A12", "$A$12" +"J1", "$J$1" +"J20", "$J$20" +"AI1", "$AI$1" +"AI2012", "$AI$2012" +"'Worksheet1'!AI256", "'Worksheet1'!$AI$256" +"Worksheet1!AI256", "Worksheet1!$AI$256" +"'Data Worksheet'!AI256", "'Data Worksheet'!$AI$256" +"'Worksheet1'!$AI256", "'Worksheet1'!$AI$256" +"'Worksheet1'!AI$256", "'Worksheet1'!$AI$256" +"'Worksheet1'!$AI$256", "'Worksheet1'!$AI$256" diff --git a/unitTests/rawTestData/CellAbsoluteReference.data b/unitTests/rawTestData/CellAbsoluteReference.data new file mode 100644 index 00000000..8aa314a2 --- /dev/null +++ b/unitTests/rawTestData/CellAbsoluteReference.data @@ -0,0 +1,16 @@ +"A1", "$A$1" +"A12", "$A$12" +"J1", "$J$1" +"J20", "$J$20" +"AI1", "$AI$1" +"AI2012", "$AI$2012" +"'Worksheet1'!AI256", "'Worksheet1'!$AI$256" +"Worksheet1!AI256", "Worksheet1!$AI$256" +"'Data Worksheet'!AI256", "'Data Worksheet'!$AI$256" +"AI", "$AI" +2012, "$2012" +"Worksheet1!AI", "Worksheet1!$AI" +"Worksheet1!256", "Worksheet1!$256" +"'Worksheet1'!$AI256", "'Worksheet1'!$AI$256" +"'Worksheet1'!AI$256", "'Worksheet1'!$AI$256" +"'Worksheet1'!$AI$256", "'Worksheet1'!$AI$256" diff --git a/unitTests/rawTestData/CellBuildRange.data b/unitTests/rawTestData/CellBuildRange.data new file mode 100644 index 00000000..78e951ba --- /dev/null +++ b/unitTests/rawTestData/CellBuildRange.data @@ -0,0 +1,2 @@ +{"B4"|"E9"}, "B4:E9" +{"B4"|"E9";"H2"|"O11"}, "B4:E9,H2:O11" diff --git a/unitTests/rawTestData/CellCoordinates.data b/unitTests/rawTestData/CellCoordinates.data new file mode 100644 index 00000000..e64ce559 --- /dev/null +++ b/unitTests/rawTestData/CellCoordinates.data @@ -0,0 +1,6 @@ +"A1", {"A";1} +"A12", {"A";12} +"J1", {"J";1} +"J20", {"J";20} +"AI1", {"AI";1} +"AI2012", {"AI";2012} diff --git a/unitTests/rawTestData/CellRangeBoundaries.data b/unitTests/rawTestData/CellRangeBoundaries.data new file mode 100644 index 00000000..2fca6dc2 --- /dev/null +++ b/unitTests/rawTestData/CellRangeBoundaries.data @@ -0,0 +1,2 @@ +"B4:E9", {2|4;5|9} +"B4", {2|4;2|4} diff --git a/unitTests/rawTestData/CellRangeDimension.data b/unitTests/rawTestData/CellRangeDimension.data new file mode 100644 index 00000000..1718f121 --- /dev/null +++ b/unitTests/rawTestData/CellRangeDimension.data @@ -0,0 +1,2 @@ +"B4:E9", {4;6} +"B4", {1;1} diff --git a/unitTests/rawTestData/CellSplitRange.data b/unitTests/rawTestData/CellSplitRange.data new file mode 100644 index 00000000..b055d4ae --- /dev/null +++ b/unitTests/rawTestData/CellSplitRange.data @@ -0,0 +1,3 @@ +"B4:E9", {"B4"|"E9"} +"B4", {"B4"} +"B4:E9,H2:O11", {"B4"|"E9";"H2"|"O11"} diff --git a/unitTests/rawTestData/ColumnIndex.data b/unitTests/rawTestData/ColumnIndex.data new file mode 100644 index 00000000..9a1679b6 --- /dev/null +++ b/unitTests/rawTestData/ColumnIndex.data @@ -0,0 +1,9 @@ +0, "A" +25, "Z" +26, "AA" +27, "AB" +51, "AZ" +52, "BA" +701, "ZZ" +702, "AAA" +1378, "BAA" diff --git a/unitTests/rawTestData/ColumnString.data b/unitTests/rawTestData/ColumnString.data new file mode 100644 index 00000000..5573759e --- /dev/null +++ b/unitTests/rawTestData/ColumnString.data @@ -0,0 +1,9 @@ +"A", 1 +"Z", 26 +"AA", 27 +"AB", 28 +"AZ", 52 +"BA", 53 +"ZZ", 702 +"AAA", 703 +"BAA", 1379