diff options
Diffstat (limited to 'calc.go')
-rw-r--r-- | calc.go | 34 |
1 files changed, 31 insertions, 3 deletions
@@ -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: // |