Unverified Commit b6dd7648 authored by xuri's avatar xuri

fn: COUNTA

parent b62950a3
......@@ -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",
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment