From 73d2757728af7ed226857004efa97774e1f5ec4c Mon Sep 17 00:00:00 2001 From: Mark Baker Date: Mon, 29 Apr 2013 22:47:36 +0100 Subject: [PATCH] Fix for quoted worksheet names in INDIRECT and OFFSET methods; and Docblock fixes --- Classes/PHPExcel/Calculation/DateTime.php | 12 +++++++++ Classes/PHPExcel/Calculation/Engineering.php | 17 +++++++----- Classes/PHPExcel/Calculation/Financial.php | 4 --- Classes/PHPExcel/Calculation/LookupRef.php | 28 +++++++++++--------- 4 files changed, 38 insertions(+), 23 deletions(-) diff --git a/Classes/PHPExcel/Calculation/DateTime.php b/Classes/PHPExcel/Calculation/DateTime.php index 854f8f84..3902924d 100644 --- a/Classes/PHPExcel/Calculation/DateTime.php +++ b/Classes/PHPExcel/Calculation/DateTime.php @@ -56,6 +56,18 @@ class PHPExcel_Calculation_DateTime { } // function _isLeapYear() + /** + * Return the number of days between two dates based on a 360 day calendar + * + * @param integer $startDay Day of month of the start date + * @param integer $startMonth Month of the start date + * @param integer $startYear Year of the start date + * @param integer $endDay Day of month of the start date + * @param integer $endMonth Month of the start date + * @param integer $endYear Year of the start date + * @param boolean $methodUS Whether to use the US method or the European method of calculation + * @return integer Number of days between the start date and the end date + */ private static function _dateDiff360($startDay, $startMonth, $startYear, $endDay, $endMonth, $endYear, $methodUS) { if ($startDay == 31) { --$startDay; diff --git a/Classes/PHPExcel/Calculation/Engineering.php b/Classes/PHPExcel/Calculation/Engineering.php index 50c49026..b96f16d3 100644 --- a/Classes/PHPExcel/Calculation/Engineering.php +++ b/Classes/PHPExcel/Calculation/Engineering.php @@ -741,8 +741,6 @@ class PHPExcel_Calculation_Engineering { /** - * _cleanComplex - * * Cleans the leading characters in a complex number string * * @param string $complexNumber The complex number to clean @@ -756,20 +754,25 @@ class PHPExcel_Calculation_Engineering { return $complexNumber; } - - private static function _nbrConversionFormat($xVal,$places) { + /** + * Formats a number base string value with leading zeroes + * + * @param string $xVal The "number" to pad + * @param integer $places The length that we want to pad this value + * @return string The padded "number" + */ + private static function _nbrConversionFormat($xVal, $places) { if (!is_null($places)) { if (strlen($xVal) <= $places) { - return substr(str_pad($xVal,$places,'0',STR_PAD_LEFT),-10); + return substr(str_pad($xVal, $places, '0', STR_PAD_LEFT), -10); } else { return PHPExcel_Calculation_Functions::NaN(); } } - return substr($xVal,-10); + return substr($xVal, -10); } // function _nbrConversionFormat() - /** * BESSELI * diff --git a/Classes/PHPExcel/Calculation/Financial.php b/Classes/PHPExcel/Calculation/Financial.php index d8e5195a..4c42277c 100644 --- a/Classes/PHPExcel/Calculation/Financial.php +++ b/Classes/PHPExcel/Calculation/Financial.php @@ -1523,14 +1523,11 @@ class PHPExcel_Calculation_Financial { } } // function NPER() - /** * NPV * * Returns the Net Present Value of a cash flow series given a discount rate. * - * @param float Discount interest rate - * @param array Cash flow series * @return float */ public static function NPV() { @@ -1553,7 +1550,6 @@ class PHPExcel_Calculation_Financial { return $returnValue; } // function NPV() - /** * PMT * diff --git a/Classes/PHPExcel/Calculation/LookupRef.php b/Classes/PHPExcel/Calculation/LookupRef.php index ba89a114..a22faff3 100644 --- a/Classes/PHPExcel/Calculation/LookupRef.php +++ b/Classes/PHPExcel/Calculation/LookupRef.php @@ -251,8 +251,9 @@ class PHPExcel_Calculation_LookupRef { * * @access public * @category Logical Functions - * @param string $linkURL Value to check, is also the value returned when no error - * @param string $displayName Value to return when testValue is an error condition + * @param string $linkURL Value to check, is also the value returned when no error + * @param string $displayName Value to return when testValue is an error condition + * @param PHPExcel_Cell $pCell The cell to set the hyperlink in * @return mixed The value of $displayName (or $linkURL if $displayName was blank) */ public static function HYPERLINK($linkURL = '', $displayName = null, PHPExcel_Cell $pCell = null) { @@ -287,13 +288,14 @@ class PHPExcel_Calculation_LookupRef { * * NOTE - INDIRECT() does not yet support the optional a1 parameter introduced in Excel 2010 * - * @param cellAddress An array or array formula, or a reference to a range of cells for which you want the number of rows + * @param cellAddress $cellAddress The cell address of the current cell (containing this formula) + * @param PHPExcel_Cell $pCell The current cell (containing this formula) * @return mixed The cells referenced by cellAddress * * @todo Support for the optional a1 parameter introduced in Excel 2010 * */ - public static function INDIRECT($cellAddress=Null, PHPExcel_Cell $pCell = null) { + public static function INDIRECT($cellAddress = NULL, PHPExcel_Cell $pCell = NULL) { $cellAddress = PHPExcel_Calculation_Functions::flattenSingleValue($cellAddress); if (is_null($cellAddress) || $cellAddress === '') { return PHPExcel_Calculation_Functions::REF(); @@ -307,29 +309,30 @@ class PHPExcel_Calculation_LookupRef { if ((!preg_match('/^'.PHPExcel_Calculation::CALCULATION_REGEXP_CELLREF.'$/i', $cellAddress1, $matches)) || ((!is_null($cellAddress2)) && (!preg_match('/^'.PHPExcel_Calculation::CALCULATION_REGEXP_CELLREF.'$/i', $cellAddress2, $matches)))) { - if (!preg_match('/^'.PHPExcel_Calculation::CALCULATION_REGEXP_NAMEDRANGE.'$/i', $cellAddress1, $matches)) { return PHPExcel_Calculation_Functions::REF(); } - if (strpos($cellAddress,'!') !== false) { - list($sheetName,$cellAddress) = explode('!',$cellAddress); + if (strpos($cellAddress,'!') !== FALSE) { + list($sheetName, $cellAddress) = explode('!',$cellAddress); + $sheetName = trim($sheetName, "'"); $pSheet = $pCell->getParent()->getParent()->getSheetByName($sheetName); } else { $pSheet = $pCell->getParent(); } - return PHPExcel_Calculation::getInstance()->extractNamedRange($cellAddress, $pSheet, False); + return PHPExcel_Calculation::getInstance()->extractNamedRange($cellAddress, $pSheet, FALSE); } - if (strpos($cellAddress,'!') !== false) { + if (strpos($cellAddress,'!') !== FALSE) { list($sheetName,$cellAddress) = explode('!',$cellAddress); + $sheetName = trim($sheetName, "'"); $pSheet = $pCell->getParent()->getParent()->getSheetByName($sheetName); } else { $pSheet = $pCell->getParent(); } - return PHPExcel_Calculation::getInstance()->extractCellRange($cellAddress, $pSheet, False); + return PHPExcel_Calculation::getInstance()->extractCellRange($cellAddress, $pSheet, FALSE); } // function INDIRECT() @@ -373,9 +376,10 @@ class PHPExcel_Calculation_LookupRef { return PHPExcel_Calculation_Functions::REF(); } - $sheetName = null; + $sheetName = NULL; if (strpos($cellAddress,"!")) { list($sheetName,$cellAddress) = explode("!",$cellAddress); + $sheetName = trim($sheetName, "'"); } if (strpos($cellAddress,":")) { list($startCell,$endCell) = explode(":",$cellAddress); @@ -416,7 +420,7 @@ class PHPExcel_Calculation_LookupRef { $cellAddress .= ':'.$endCellColumn.$endCellRow; } - if ($sheetName !== null) { + if ($sheetName !== NULL) { $pSheet = $pCell->getParent()->getParent()->getSheetByName($sheetName); } else { $pSheet = $pCell->getParent();