1
+ <?php
2
+
3
+ namespace PhpOffice \PhpSpreadsheet \Calculation \MathTrig ;
4
+
5
+ use PhpOffice \PhpSpreadsheet \Calculation \Functions ;
6
+ use PhpOffice \PhpSpreadsheet \Calculation \Information \ErrorValue ;
7
+ use PhpOffice \PhpSpreadsheet \Calculation \Information \ExcelError ;
8
+
9
+ class Llm
10
+ {
11
+ /**
12
+ * SUM, ignoring non-numeric non-error strings. This is eventually used by SUMIF.
13
+ *
14
+ * SUM computes the sum of all the values and cells referenced in the argument list.
15
+ *
16
+ * Excel Function:
17
+ * SUM(value1[,value2[, ...]])
18
+ *
19
+ * @param mixed ...$args Data values
20
+ */
21
+ public static function sumIgnoringStrings (mixed ...$ args ): float |int |string
22
+ {
23
+ $ returnValue = 0 ;
24
+
25
+ // Loop through the arguments
26
+ foreach (Functions::flattenArray ($ args ) as $ arg ) {
27
+ // Is it a numeric value?
28
+ if (is_numeric ($ arg )) {
29
+ $ returnValue += $ arg ;
30
+ } elseif (ErrorValue::isError ($ arg )) {
31
+ return $ arg ;
32
+ }
33
+ }
34
+
35
+ return $ returnValue ;
36
+ }
37
+
38
+ /**
39
+ * SUM, returning error for non-numeric strings. This is used by Excel SUM function.
40
+ *
41
+ * SUM computes the sum of all the values and cells referenced in the argument list.
42
+ *
43
+ * Excel Function:
44
+ * SUM(value1[,value2[, ...]])
45
+ *
46
+ * @param mixed ...$args Data values
47
+ */
48
+ public static function sumErroringStrings (mixed ...$ args ): float |int |string |array
49
+ {
50
+ $ returnValue = 0 ;
51
+ // Loop through the arguments
52
+ $ aArgs = Functions::flattenArrayIndexed ($ args );
53
+ foreach ($ aArgs as $ k => $ arg ) {
54
+ // Is it a numeric value?
55
+ if (is_numeric ($ arg )) {
56
+ $ returnValue += $ arg ;
57
+ } elseif (is_bool ($ arg )) {
58
+ $ returnValue += (int ) $ arg ;
59
+ } elseif (ErrorValue::isError ($ arg )) {
60
+ return $ arg ;
61
+ } elseif ($ arg !== null && !Functions::isCellValue ($ k )) {
62
+ // ignore non-numerics from cell, but fail as literals (except null)
63
+ return ExcelError::VALUE ();
64
+ }
65
+ }
66
+
67
+ return $ returnValue ;
68
+ }
69
+
70
+ /**
71
+ * SUMPRODUCT.
72
+ *
73
+ * Excel Function:
74
+ * SUMPRODUCT(value1[,value2[, ...]])
75
+ *
76
+ * @param mixed ...$args Data values
77
+ *
78
+ * @return float|int|string The result, or a string containing an error
79
+ */
80
+ public static function product (mixed ...$ args ): string |int |float
81
+ {
82
+ $ arrayList = $ args ;
83
+
84
+ $ wrkArray = Functions::flattenArray (array_shift ($ arrayList ));
85
+ $ wrkCellCount = count ($ wrkArray );
86
+
87
+ for ($ i = 0 ; $ i < $ wrkCellCount ; ++$ i ) {
88
+ if ((!is_numeric ($ wrkArray [$ i ])) || (is_string ($ wrkArray [$ i ]))) {
89
+ $ wrkArray [$ i ] = 0 ;
90
+ }
91
+ }
92
+
93
+ foreach ($ arrayList as $ matrixData ) {
94
+ $ array2 = Functions::flattenArray ($ matrixData );
95
+ $ count = count ($ array2 );
96
+ if ($ wrkCellCount != $ count ) {
97
+ return ExcelError::VALUE ();
98
+ }
99
+
100
+ foreach ($ array2 as $ i => $ val ) {
101
+ if ((!is_numeric ($ val )) || (is_string ($ val ))) {
102
+ $ val = 0 ;
103
+ }
104
+ $ wrkArray [$ i ] *= $ val ;
105
+ }
106
+ }
107
+
108
+ return array_sum ($ wrkArray );
109
+ }
110
+ }
0 commit comments