SUBTOTAL options for ignoring hidden cells
This commit is contained in:
parent
7b90bb9394
commit
08ced34dfd
|
@ -1767,6 +1767,7 @@ class Calculation
|
||||||
'category' => Category::CATEGORY_MATH_AND_TRIG,
|
'category' => Category::CATEGORY_MATH_AND_TRIG,
|
||||||
'functionCall' => [MathTrig::class, 'SUBTOTAL'],
|
'functionCall' => [MathTrig::class, 'SUBTOTAL'],
|
||||||
'argumentCount' => '2+',
|
'argumentCount' => '2+',
|
||||||
|
'passCellReference' => true,
|
||||||
],
|
],
|
||||||
'SUM' => [
|
'SUM' => [
|
||||||
'category' => Category::CATEGORY_MATH_AND_TRIG,
|
'category' => Category::CATEGORY_MATH_AND_TRIG,
|
||||||
|
@ -3721,6 +3722,7 @@ class Calculation
|
||||||
}
|
}
|
||||||
// Reverse the order of the arguments
|
// Reverse the order of the arguments
|
||||||
krsort($args);
|
krsort($args);
|
||||||
|
|
||||||
if (($passByReference) && ($argCount == 0)) {
|
if (($passByReference) && ($argCount == 0)) {
|
||||||
$args[] = $cellID;
|
$args[] = $cellID;
|
||||||
$argArrayVals[] = $this->showValue($cellID);
|
$argArrayVals[] = $this->showValue($cellID);
|
||||||
|
@ -3744,7 +3746,6 @@ class Calculation
|
||||||
}
|
}
|
||||||
unset($arg);
|
unset($arg);
|
||||||
}
|
}
|
||||||
|
|
||||||
$result = call_user_func_array($functionCall, $args);
|
$result = call_user_func_array($functionCall, $args);
|
||||||
|
|
||||||
if ($functionName != 'MKMATRIX') {
|
if ($functionName != 'MKMATRIX') {
|
||||||
|
|
|
@ -1123,6 +1123,16 @@ class MathTrig
|
||||||
return Functions::VALUE();
|
return Functions::VALUE();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
protected static function filterHiddenArgs($cellReference, $args) {
|
||||||
|
return array_filter($args,
|
||||||
|
function ($index) use ($cellReference) {
|
||||||
|
list(, $row, $column) = explode('.', $index);
|
||||||
|
return $cellReference->getWorksheet()->getRowDimension($row)->getVisible() &&
|
||||||
|
$cellReference->getWorksheet()->getColumnDimension($column)->getVisible();
|
||||||
|
},
|
||||||
|
ARRAY_FILTER_USE_KEY
|
||||||
|
);
|
||||||
|
}
|
||||||
/**
|
/**
|
||||||
* SUBTOTAL.
|
* SUBTOTAL.
|
||||||
*
|
*
|
||||||
|
@ -1136,33 +1146,56 @@ class MathTrig
|
||||||
*/
|
*/
|
||||||
public static function SUBTOTAL(...$args)
|
public static function SUBTOTAL(...$args)
|
||||||
{
|
{
|
||||||
$aArgs = Functions::flattenArray($args);
|
$aArgs = Functions::flattenArrayIndexed($args);
|
||||||
|
$cellReference = array_pop($aArgs);
|
||||||
|
$subtotal = array_shift($aArgs);
|
||||||
|
// var_dump($cellReference->getValue(), $aArgs); die();
|
||||||
|
|
||||||
// Calculate
|
// Calculate
|
||||||
$subtotal = array_shift($aArgs);
|
|
||||||
|
|
||||||
if ((is_numeric($subtotal)) && (!is_string($subtotal))) {
|
if ((is_numeric($subtotal)) && (!is_string($subtotal))) {
|
||||||
switch ($subtotal) {
|
switch ($subtotal) {
|
||||||
|
case 101:
|
||||||
|
$aArgs = self::filterHiddenArgs($cellReference, $aArgs);
|
||||||
case 1:
|
case 1:
|
||||||
return Statistical::AVERAGE($aArgs);
|
return Statistical::AVERAGE($aArgs);
|
||||||
|
case 102:
|
||||||
|
$aArgs = self::filterHiddenArgs($cellReference, $aArgs);
|
||||||
case 2:
|
case 2:
|
||||||
return Statistical::COUNT($aArgs);
|
return Statistical::COUNT($aArgs);
|
||||||
|
case 103:
|
||||||
|
$aArgs = self::filterHiddenArgs($cellReference, $aArgs);
|
||||||
case 3:
|
case 3:
|
||||||
return Statistical::COUNTA($aArgs);
|
return Statistical::COUNTA($aArgs);
|
||||||
|
case 104:
|
||||||
|
$aArgs = self::filterHiddenArgs($cellReference, $aArgs);
|
||||||
case 4:
|
case 4:
|
||||||
return Statistical::MAX($aArgs);
|
return Statistical::MAX($aArgs);
|
||||||
|
case 105:
|
||||||
|
$aArgs = self::filterHiddenArgs($cellReference, $aArgs);
|
||||||
case 5:
|
case 5:
|
||||||
return Statistical::MIN($aArgs);
|
return Statistical::MIN($aArgs);
|
||||||
|
case 106:
|
||||||
|
$aArgs = self::filterHiddenArgs($cellReference, $aArgs);
|
||||||
case 6:
|
case 6:
|
||||||
return self::PRODUCT($aArgs);
|
return self::PRODUCT($aArgs);
|
||||||
|
case 107:
|
||||||
|
$aArgs = self::filterHiddenArgs($cellReference, $aArgs);
|
||||||
case 7:
|
case 7:
|
||||||
return Statistical::STDEV($aArgs);
|
return Statistical::STDEV($aArgs);
|
||||||
|
case 108:
|
||||||
|
$aArgs = self::filterHiddenArgs($cellReference, $aArgs);
|
||||||
case 8:
|
case 8:
|
||||||
return Statistical::STDEVP($aArgs);
|
return Statistical::STDEVP($aArgs);
|
||||||
|
case 109:
|
||||||
|
$aArgs = self::filterHiddenArgs($cellReference, $aArgs);
|
||||||
case 9:
|
case 9:
|
||||||
return self::SUM($aArgs);
|
return self::SUM($aArgs);
|
||||||
|
case 110:
|
||||||
|
$aArgs = self::filterHiddenArgs($cellReference, $aArgs);
|
||||||
case 10:
|
case 10:
|
||||||
return Statistical::VARFunc($aArgs);
|
return Statistical::VARFunc($aArgs);
|
||||||
|
case 111:
|
||||||
|
$aArgs = self::filterHiddenArgs($cellReference, $aArgs);
|
||||||
case 11:
|
case 11:
|
||||||
return Statistical::VARP($aArgs);
|
return Statistical::VARP($aArgs);
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue