예제 #1
0
  private void validateNumArgs(int numArgs, FunctionMetadata fm) {
    if (numArgs < fm.getMinParams()) {
      String msg = "Too few arguments to function '" + fm.getName() + "'. ";
      if (fm.hasFixedArgsLength()) {
        msg += "Expected " + fm.getMinParams();
      } else {
        msg += "At least " + fm.getMinParams() + " were expected";
      }
      msg += " but got " + numArgs + ".";
      throw new FormulaParseException(msg);
    }
    // the maximum number of arguments depends on the Excel version
    int maxArgs;
    if (fm.hasUnlimitedVarags()) {
      if (_book != null) {
        maxArgs = _book.getSpreadsheetVersion().getMaxFunctionArgs();
      } else {
        // _book can be omitted by test cases
        maxArgs = fm.getMaxParams(); // just use BIFF8
      }
    } else {
      maxArgs = fm.getMaxParams();
    }

    if (numArgs > maxArgs) {
      String msg = "Too many arguments to function '" + fm.getName() + "'. ";
      if (fm.hasFixedArgsLength()) {
        msg += "Expected " + maxArgs;
      } else {
        msg += "At most " + maxArgs + " were expected";
      }
      msg += " but got " + numArgs + ".";
      throw new FormulaParseException(msg);
    }
  }