Move the FormulaEvaluator code out of scratchpad
[poi.git] / src / java / org / apache / poi / hssf / record / formula / functions / Rows.java
blobaabffab2f6a8867d5e2c07555d021670440c5ad2
1 /*
2 * Licensed to the Apache Software Foundation (ASF) under one or more
3 * contributor license agreements. See the NOTICE file distributed with
4 * this work for additional information regarding copyright ownership.
5 * The ASF licenses this file to You under the Apache License, Version 2.0
6 * (the "License"); you may not use this file except in compliance with
7 * the License. You may obtain a copy of the License at
9 * http://www.apache.org/licenses/LICENSE-2.0
11 * Unless required by applicable law or agreed to in writing, software
12 * distributed under the License is distributed on an "AS IS" BASIS,
13 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14 * See the License for the specific language governing permissions and
15 * limitations under the License.
19 package org.apache.poi.hssf.record.formula.functions;
21 import org.apache.poi.hssf.record.formula.eval.AreaEval;
22 import org.apache.poi.hssf.record.formula.eval.ErrorEval;
23 import org.apache.poi.hssf.record.formula.eval.Eval;
24 import org.apache.poi.hssf.record.formula.eval.NumberEval;
25 import org.apache.poi.hssf.record.formula.eval.RefEval;
27 /**
28 * Implementation for Excel ROWS function.
30 * @author Josh Micich
32 public final class Rows implements Function {
34 public Eval evaluate(Eval[] args, int srcCellRow, short srcCellCol) {
35 switch(args.length) {
36 case 1:
37 // expected
38 break;
39 case 0:
40 // too few arguments
41 return ErrorEval.VALUE_INVALID;
42 default:
43 // too many arguments
44 return ErrorEval.VALUE_INVALID;
46 Eval firstArg = args[0];
48 int result;
49 if (firstArg instanceof AreaEval) {
50 AreaEval ae = (AreaEval) firstArg;
51 result = ae.getLastRow() - ae.getFirstRow() + 1;
52 } else if (firstArg instanceof RefEval) {
53 result = 1;
54 } else { // anything else is not valid argument
55 return ErrorEval.VALUE_INVALID;
57 return new NumberEval(result);