init
This commit is contained in:
commit
72a26edcff
22092 changed files with 2101903 additions and 0 deletions
110
lib/PhpSpreadsheet/Calculation/MathTrig/Sum.php
Normal file
110
lib/PhpSpreadsheet/Calculation/MathTrig/Sum.php
Normal file
|
|
@ -0,0 +1,110 @@
|
|||
<?php
|
||||
|
||||
namespace PhpOffice\PhpSpreadsheet\Calculation\MathTrig;
|
||||
|
||||
use PhpOffice\PhpSpreadsheet\Calculation\Functions;
|
||||
use PhpOffice\PhpSpreadsheet\Calculation\Information\ErrorValue;
|
||||
use PhpOffice\PhpSpreadsheet\Calculation\Information\ExcelError;
|
||||
|
||||
class Sum
|
||||
{
|
||||
/**
|
||||
* SUM, ignoring non-numeric non-error strings. This is eventually used by SUMIF.
|
||||
*
|
||||
* SUM computes the sum of all the values and cells referenced in the argument list.
|
||||
*
|
||||
* Excel Function:
|
||||
* SUM(value1[,value2[, ...]])
|
||||
*
|
||||
* @param mixed ...$args Data values
|
||||
*/
|
||||
public static function sumIgnoringStrings(mixed ...$args): float|int|string
|
||||
{
|
||||
$returnValue = 0;
|
||||
|
||||
// Loop through the arguments
|
||||
foreach (Functions::flattenArray($args) as $arg) {
|
||||
// Is it a numeric value?
|
||||
if (is_numeric($arg)) {
|
||||
$returnValue += $arg;
|
||||
} elseif (ErrorValue::isError($arg)) {
|
||||
return $arg;
|
||||
}
|
||||
}
|
||||
|
||||
return $returnValue;
|
||||
}
|
||||
|
||||
/**
|
||||
* SUM, returning error for non-numeric strings. This is used by Excel SUM function.
|
||||
*
|
||||
* SUM computes the sum of all the values and cells referenced in the argument list.
|
||||
*
|
||||
* Excel Function:
|
||||
* SUM(value1[,value2[, ...]])
|
||||
*
|
||||
* @param mixed ...$args Data values
|
||||
*/
|
||||
public static function sumErroringStrings(mixed ...$args): float|int|string|array
|
||||
{
|
||||
$returnValue = 0;
|
||||
// Loop through the arguments
|
||||
$aArgs = Functions::flattenArrayIndexed($args);
|
||||
foreach ($aArgs as $k => $arg) {
|
||||
// Is it a numeric value?
|
||||
if (is_numeric($arg)) {
|
||||
$returnValue += $arg;
|
||||
} elseif (is_bool($arg)) {
|
||||
$returnValue += (int) $arg;
|
||||
} elseif (ErrorValue::isError($arg)) {
|
||||
return $arg;
|
||||
} elseif ($arg !== null && !Functions::isCellValue($k)) {
|
||||
// ignore non-numerics from cell, but fail as literals (except null)
|
||||
return ExcelError::VALUE();
|
||||
}
|
||||
}
|
||||
|
||||
return $returnValue;
|
||||
}
|
||||
|
||||
/**
|
||||
* SUMPRODUCT.
|
||||
*
|
||||
* Excel Function:
|
||||
* SUMPRODUCT(value1[,value2[, ...]])
|
||||
*
|
||||
* @param mixed ...$args Data values
|
||||
*
|
||||
* @return float|int|string The result, or a string containing an error
|
||||
*/
|
||||
public static function product(mixed ...$args): string|int|float
|
||||
{
|
||||
$arrayList = $args;
|
||||
|
||||
$wrkArray = Functions::flattenArray(array_shift($arrayList));
|
||||
$wrkCellCount = count($wrkArray);
|
||||
|
||||
for ($i = 0; $i < $wrkCellCount; ++$i) {
|
||||
if ((!is_numeric($wrkArray[$i])) || (is_string($wrkArray[$i]))) {
|
||||
$wrkArray[$i] = 0;
|
||||
}
|
||||
}
|
||||
|
||||
foreach ($arrayList as $matrixData) {
|
||||
$array2 = Functions::flattenArray($matrixData);
|
||||
$count = count($array2);
|
||||
if ($wrkCellCount != $count) {
|
||||
return ExcelError::VALUE();
|
||||
}
|
||||
|
||||
foreach ($array2 as $i => $val) {
|
||||
if ((!is_numeric($val)) || (is_string($val))) {
|
||||
$val = 0;
|
||||
}
|
||||
$wrkArray[$i] *= $val;
|
||||
}
|
||||
}
|
||||
|
||||
return array_sum($wrkArray);
|
||||
}
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue