From c643d2702cb00bd09f9ed16377613cd51214f819 Mon Sep 17 00:00:00 2001 From: Dave Umrysh Date: Tue, 15 Nov 2022 07:34:13 -0700 Subject: [PATCH] Fixes for PHP 8 --- PHPExcel/Calculation.php | 40 ++++++++++++------------- PHPExcel/Calculation/Functions.php | 8 ++--- PHPExcel/Cell.php | 12 ++++---- PHPExcel/Cell/DefaultValueBinder.php | 2 +- PHPExcel/Shared/String.php | 8 ++--- PHPExcel/Worksheet/AutoFilter.php | 2 +- PHPExcel/Writer/Excel2007/Worksheet.php | 2 +- 7 files changed, 37 insertions(+), 37 deletions(-) diff --git a/PHPExcel/Calculation.php b/PHPExcel/Calculation.php index b609b0d..072f69e 100644 --- a/PHPExcel/Calculation.php +++ b/PHPExcel/Calculation.php @@ -2183,7 +2183,7 @@ class PHPExcel_Calculation { */ public static function _unwrapResult($value) { if (is_string($value)) { - if ((isset($value{0})) && ($value{0} == '"') && (substr($value,-1) == '"')) { + if ((isset($value[0])) && ($value[0] == '"') && (substr($value,-1) == '"')) { return substr($value,1,-1); } // Convert numeric errors to NaN error @@ -2291,9 +2291,9 @@ class PHPExcel_Calculation { // Basic validation that this is indeed a formula // We return an empty array if not $formula = trim($formula); - if ((!isset($formula{0})) || ($formula{0} != '=')) return array(); + if ((!isset($formula[0])) || ($formula[0] != '=')) return array(); $formula = ltrim(substr($formula,1)); - if (!isset($formula{0})) return array(); + if (!isset($formula[0])) return array(); // Parse the formula and return the token stack return $this->_parseFormula($formula); @@ -2369,9 +2369,9 @@ class PHPExcel_Calculation { // Basic validation that this is indeed a formula // We simply return the cell value if not $formula = trim($formula); - if ($formula{0} != '=') return self::_wrapResult($formula); + if ($formula[0] != '=') return self::_wrapResult($formula); $formula = ltrim(substr($formula,1)); - if (!isset($formula{0})) return self::_wrapResult($formula); + if (!isset($formula[0])) return self::_wrapResult($formula); $pCellParent = ($pCell !== NULL) ? $pCell->getWorksheet() : NULL; $wsTitle = ($pCellParent !== NULL) ? $pCellParent->getTitle() : "\x00Wrk"; @@ -2380,7 +2380,7 @@ class PHPExcel_Calculation { return $cellValue; } - if (($wsTitle{0} !== "\x00") && ($this->_cyclicReferenceStack->onStack($wsTitle.'!'.$cellID))) { + if (($wsTitle[0] !== "\x00") && ($this->_cyclicReferenceStack->onStack($wsTitle.'!'.$cellID))) { if ($this->cyclicFormulaCount <= 0) { return $this->_raiseFormulaError('Cyclic Reference in Formula'); } elseif (($this->_cyclicFormulaCount >= $this->cyclicFormulaCount) && @@ -2629,7 +2629,7 @@ class PHPExcel_Calculation { } else { if ($value == '') { return 'an empty string'; - } elseif ($value{0} == '#') { + } elseif ($value[0] == '#') { return 'a '.$value.' error'; } else { $typeString = 'a string'; @@ -2758,10 +2758,10 @@ class PHPExcel_Calculation { // Loop through the formula extracting each operator and operand in turn while(TRUE) { //echo 'Assessing Expression '.substr($formula, $index),PHP_EOL; - $opCharacter = $formula{$index}; // Get the first character of the value at the current index position + $opCharacter = $formula[$index]; // Get the first character of the value at the current index position //echo 'Initial character of expression block is '.$opCharacter,PHP_EOL; - if ((isset(self::$_comparisonOperators[$opCharacter])) && (strlen($formula) > $index) && (isset(self::$_comparisonOperators[$formula{$index+1}]))) { - $opCharacter .= $formula{++$index}; + if ((isset(self::$_comparisonOperators[$opCharacter])) && (strlen($formula) > $index) && (isset(self::$_comparisonOperators[$formula[$index+1]]))) { + $opCharacter .= $formula[++$index]; //echo 'Initial character of expression block is comparison operator '.$opCharacter.PHP_EOL; } @@ -2804,7 +2804,7 @@ class PHPExcel_Calculation { else $output[] = $o2; } $d = $stack->last(2); - if (preg_match('/^'.self::CALCULATION_REGEXP_FUNCTION.'$/i', $d['value'], $matches)) { // Did this parenthesis just close a function? + if (!is_null($d) && preg_match('/^'.self::CALCULATION_REGEXP_FUNCTION.'$/i', $d['value'], $matches)) { // Did this parenthesis just close a function? $functionName = $matches[1]; // Get the function name //echo 'Closed Function is '.$functionName,PHP_EOL; $d = $stack->pop(); @@ -2934,7 +2934,7 @@ class PHPExcel_Calculation { // If the last entry on the stack was a : operator, then we have a cell range reference $testPrevOp = $stack->last(1); - if ($testPrevOp['value'] == ':') { + if (!is_null($testPrevOp) && $testPrevOp['value'] == ':') { // If we have a worksheet reference, then we're playing with a 3D reference if ($matches[2] == '') { // Otherwise, we 'inherit' the worksheet reference from the start cell reference @@ -3036,11 +3036,11 @@ class PHPExcel_Calculation { } } // Ignore white space - while (($formula{$index} == "\n") || ($formula{$index} == "\r")) { + while (($formula[$index] == "\n") || ($formula[$index] == "\r")) { ++$index; } - if ($formula{$index} == ' ') { - while ($formula{$index} == ' ') { + if ($formula[$index] == ' ') { + while ($formula[$index] == ' ') { ++$index; } // If we're expecting an operator, but only have a space between the previous and next operands (and both are @@ -3456,7 +3456,7 @@ class PHPExcel_Calculation { // echo 'Token is a PHPExcel constant: '.$excelConstant.'
'; $stack->push('Constant Value',self::$_ExcelConstants[$excelConstant]); $this->_debugLog->writeDebugLog('Evaluating Constant ', $excelConstant, ' as ', $this->_showTypeDetails(self::$_ExcelConstants[$excelConstant])); - } elseif ((is_numeric($token)) || ($token === NULL) || (is_bool($token)) || ($token == '') || ($token{0} == '"') || ($token{0} == '#')) { + } elseif ((is_numeric($token)) || ($token === NULL) || (is_bool($token)) || ($token == '') || ($token[0] == '"') || ($token[0] == '#')) { // echo 'Token is a number, boolean, string, null or an Excel error
'; $stack->push('Value',$token); // if the token is a named range, push the named range name onto the stack @@ -3498,11 +3498,11 @@ class PHPExcel_Calculation { if (is_string($operand)) { // We only need special validations for the operand if it is a string // Start by stripping off the quotation marks we use to identify true excel string values internally - if ($operand > '' && $operand{0} == '"') { $operand = self::_unwrapResult($operand); } + if ($operand > '' && $operand[0] == '"') { $operand = self::_unwrapResult($operand); } // If the string is a numeric value, we treat it as a numeric, so no further testing if (!is_numeric($operand)) { // If not a numeric, test to see if the value is an Excel error, and so can't be used in normal binary operations - if ($operand > '' && $operand{0} == '#') { + if ($operand > '' && $operand[0] == '#') { $stack->push('Value', $operand); $this->_debugLog->writeDebugLog('Evaluation Result is ', $this->_showTypeDetails($operand)); return FALSE; @@ -3555,8 +3555,8 @@ class PHPExcel_Calculation { } // Simple validate the two operands if they are string values - if (is_string($operand1) && $operand1 > '' && $operand1{0} == '"') { $operand1 = self::_unwrapResult($operand1); } - if (is_string($operand2) && $operand2 > '' && $operand2{0} == '"') { $operand2 = self::_unwrapResult($operand2); } + if (is_string($operand1) && $operand1 > '' && $operand1[0] == '"') { $operand1 = self::_unwrapResult($operand1); } + if (is_string($operand2) && $operand2 > '' && $operand2[0] == '"') { $operand2 = self::_unwrapResult($operand2); } // Use case insensitive comparaison if not OpenOffice mode if (PHPExcel_Calculation_Functions::getCompatibilityMode() != PHPExcel_Calculation_Functions::COMPATIBILITY_OPENOFFICE) diff --git a/PHPExcel/Calculation/Functions.php b/PHPExcel/Calculation/Functions.php index 59dd75d..b5ec226 100644 --- a/PHPExcel/Calculation/Functions.php +++ b/PHPExcel/Calculation/Functions.php @@ -308,9 +308,9 @@ class PHPExcel_Calculation_Functions { public static function _ifCondition($condition) { $condition = PHPExcel_Calculation_Functions::flattenSingleValue($condition); - if (!isset($condition{0})) + if (!isset($condition[0])) $condition = '=""'; - if (!in_array($condition{0},array('>', '<', '='))) { + if (!in_array($condition[0],array('>', '<', '='))) { if (!is_numeric($condition)) { $condition = PHPExcel_Calculation::_wrapResult(strtoupper($condition)); } return '='.$condition; } else { @@ -531,7 +531,7 @@ class PHPExcel_Calculation_Functions { break; case 'string' : // Errors - if ((strlen($value) > 0) && ($value{0} == '#')) { + if ((strlen($value) > 0) && ($value[0] == '#')) { return $value; } break; @@ -580,7 +580,7 @@ class PHPExcel_Calculation_Functions { return 64; } elseif(is_string($value)) { // Errors - if ((strlen($value) > 0) && ($value{0} == '#')) { + if ((strlen($value) > 0) && ($value[0] == '#')) { return 16; } return 2; diff --git a/PHPExcel/Cell.php b/PHPExcel/Cell.php index 1788559..165dd87 100644 --- a/PHPExcel/Cell.php +++ b/PHPExcel/Cell.php @@ -769,19 +769,19 @@ class PHPExcel_Cell // We also use the language construct isset() rather than the more costly strlen() function to match the length of $pString // for improved performance - if (isset($pString{0})) { - if (!isset($pString{1})) { + if (isset($pString[0])) { + if (!isset($pString[1])) { $_indexCache[$pString] = $_columnLookup[$pString]; return $_indexCache[$pString]; - } elseif(!isset($pString{2})) { - $_indexCache[$pString] = $_columnLookup[$pString{0}] * 26 + $_columnLookup[$pString{1}]; + } elseif(!isset($pString[2])) { + $_indexCache[$pString] = $_columnLookup[$pString[0]] * 26 + $_columnLookup[$pString[1]]; return $_indexCache[$pString]; } elseif(!isset($pString{3})) { - $_indexCache[$pString] = $_columnLookup[$pString{0}] * 676 + $_columnLookup[$pString{1}] * 26 + $_columnLookup[$pString{2}]; + $_indexCache[$pString] = $_columnLookup[$pString[0]] * 676 + $_columnLookup[$pString[1]] * 26 + $_columnLookup[$pString[2]]; return $_indexCache[$pString]; } } - throw new PHPExcel_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")); } /** diff --git a/PHPExcel/Cell/DefaultValueBinder.php b/PHPExcel/Cell/DefaultValueBinder.php index f1880fa..b4acffa 100644 --- a/PHPExcel/Cell/DefaultValueBinder.php +++ b/PHPExcel/Cell/DefaultValueBinder.php @@ -83,7 +83,7 @@ class PHPExcel_Cell_DefaultValueBinder implements PHPExcel_Cell_IValueBinder } elseif ($pValue instanceof PHPExcel_RichText) { return PHPExcel_Cell_DataType::TYPE_INLINE; - } elseif ($pValue{0} === '=' && strlen($pValue) > 1) { + } elseif (is_string($pValue) && $pValue[0] === '=' && strlen($pValue) > 1) { return PHPExcel_Cell_DataType::TYPE_FORMULA; } elseif (is_bool($pValue)) { diff --git a/PHPExcel/Shared/String.php b/PHPExcel/Shared/String.php index 49d217a..57fc630 100644 --- a/PHPExcel/Shared/String.php +++ b/PHPExcel/Shared/String.php @@ -526,15 +526,15 @@ class PHPExcel_Shared_String */ public static function utf16_decode($str, $bom_be = TRUE) { if( strlen($str) < 2 ) return $str; - $c0 = ord($str{0}); - $c1 = ord($str{1}); + $c0 = ord($str[0]); + $c1 = ord($str[1]); if( $c0 == 0xfe && $c1 == 0xff ) { $str = substr($str,2); } elseif( $c0 == 0xff && $c1 == 0xfe ) { $str = substr($str,2); $bom_be = false; } $len = strlen($str); $newstr = ''; for($i=0;$i<$len;$i+=2) { - if( $bom_be ) { $val = ord($str{$i}) << 4; $val += ord($str{$i+1}); } - else { $val = ord($str{$i+1}) << 4; $val += ord($str{$i}); } + if( $bom_be ) { $val = ord($str[$i]) << 4; $val += ord($str[$i+1]); } + else { $val = ord($str[$i+1]) << 4; $val += ord($str[$i]); } $newstr .= ($val == 0x228) ? "\n" : chr($val); } return $newstr; diff --git a/PHPExcel/Worksheet/AutoFilter.php b/PHPExcel/Worksheet/AutoFilter.php index 03055e1..abde9ad 100644 --- a/PHPExcel/Worksheet/AutoFilter.php +++ b/PHPExcel/Worksheet/AutoFilter.php @@ -726,7 +726,7 @@ class PHPExcel_Worksheet_AutoFilter ); } else { // Date based - if ($dynamicRuleType{0} == 'M' || $dynamicRuleType{0} == 'Q') { + if ($dynamicRuleType[0] == 'M' || $dynamicRuleType[0] == 'Q') { // Month or Quarter sscanf($dynamicRuleType,'%[A-Z]%d', $periodType, $period); if ($periodType == 'M') { diff --git a/PHPExcel/Writer/Excel2007/Worksheet.php b/PHPExcel/Writer/Excel2007/Worksheet.php index 7d93f5a..663ddf6 100644 --- a/PHPExcel/Writer/Excel2007/Worksheet.php +++ b/PHPExcel/Writer/Excel2007/Worksheet.php @@ -1115,7 +1115,7 @@ class PHPExcel_Writer_Excel2007_Worksheet extends PHPExcel_Writer_Excel2007_Writ break; case 'f': // Formula $attributes = $pCell->getFormulaAttributes(); - if($attributes['t'] == 'array') { + if(!is_null($attributes) && $attributes['t'] == 'array') { $objWriter->startElement('f'); $objWriter->writeAttribute('t', 'array'); $objWriter->writeAttribute('ref', $pCellAddress);