forked from p30928647/excelize
fn: COUNTA
This commit is contained in:
parent
b62950a39e
commit
b6dd7648a1
34
calc.go
34
calc.go
|
@ -313,7 +313,7 @@ func calcAdd(opdStack *Stack) error {
|
|||
return nil
|
||||
}
|
||||
|
||||
// calcAdd evaluate subtraction arithmetic operations.
|
||||
// calcSubtract evaluate subtraction arithmetic operations.
|
||||
func calcSubtract(opdStack *Stack) error {
|
||||
if opdStack.Len() < 2 {
|
||||
return errors.New("formula not valid")
|
||||
|
@ -333,7 +333,7 @@ func calcSubtract(opdStack *Stack) error {
|
|||
return nil
|
||||
}
|
||||
|
||||
// calcAdd evaluate multiplication arithmetic operations.
|
||||
// calcMultiply evaluate multiplication arithmetic operations.
|
||||
func calcMultiply(opdStack *Stack) error {
|
||||
if opdStack.Len() < 2 {
|
||||
return errors.New("formula not valid")
|
||||
|
@ -353,7 +353,7 @@ func calcMultiply(opdStack *Stack) error {
|
|||
return nil
|
||||
}
|
||||
|
||||
// calcAdd evaluate division arithmetic operations.
|
||||
// calcDivide evaluate division arithmetic operations.
|
||||
func calcDivide(opdStack *Stack) error {
|
||||
if opdStack.Len() < 2 {
|
||||
return errors.New("formula not valid")
|
||||
|
@ -2840,6 +2840,34 @@ func (fn *formulaFuncs) TRUNC(argsList *list.List) (result string, err error) {
|
|||
|
||||
// Statistical functions
|
||||
|
||||
// COUNTA function returns the number of non-blanks within a supplied set of
|
||||
// cells or values. The syntax of the function is:
|
||||
//
|
||||
// COUNTA(value1,[value2],...)
|
||||
//
|
||||
func (fn *formulaFuncs) COUNTA(argsList *list.List) (result string, err error) {
|
||||
var count int
|
||||
for token := argsList.Front(); token != nil; token = token.Next() {
|
||||
arg := token.Value.(formulaArg)
|
||||
switch arg.Type {
|
||||
case ArgString:
|
||||
if arg.String != "" {
|
||||
count++
|
||||
}
|
||||
case ArgMatrix:
|
||||
for _, row := range arg.Matrix {
|
||||
for _, value := range row {
|
||||
if value.String != "" {
|
||||
count++
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
result = fmt.Sprintf("%d", count)
|
||||
return
|
||||
}
|
||||
|
||||
// MEDIAN function returns the statistical median (the middle value) of a list
|
||||
// of supplied numbers. The syntax of the function is:
|
||||
//
|
||||
|
|
|
@ -385,6 +385,9 @@ func TestCalcCellValue(t *testing.T) {
|
|||
"=TRUNC(-99.999,2)": "-99.99",
|
||||
"=TRUNC(-99.999,-1)": "-90",
|
||||
// Statistical functions
|
||||
// COUNTA
|
||||
`=COUNTA()`: "0",
|
||||
`=COUNTA(A1:A5,B2:B5,"text",1,2)`: "8",
|
||||
// MEDIAN
|
||||
"=MEDIAN(A1:A5,12)": "2",
|
||||
"=MEDIAN(A1:A5)": "1.5",
|
||||
|
|
Loading…
Reference in New Issue