AFC - Abacus Formula Compiler for Java

Current Limitations

This document describes the current limitations of AFC as of the latest release mentioned in the release notes.


  • Only the subset of Excel documented in this reference is guaranteed to be supported.
  • Null values (empty cells) are not yet supported. In particular, an AVERAGE involving empty cells will return a different result than Excel.
  • In Excel, a formula like (A1 = 0) returns false when A1 is FALSE. In AFC it is true. In both AFC and Excel, (A1 + 0 = 0) returns true.
  • In Excel, SUM ignores booleans. In AFC it does not. In both, numeric operators like + treat booleans as numbers.
  • String comparisons don’t sort umlauts and such the way Excel does (see String Comparisons).
  • The options flag “Precision as displayed” is not supported. AFC always uses the full precision of the configured numeric type internally and only rounds final outputs.
  • The Excel .xls loader does not yet handle references to labels in formulas.
  • Range intersections are parsed but not evaluated correctly.
  • Ranges specified using named cells as endpoints are not supported. Named ranges, however, are.
  • Named range unions are not supported. They are ignored when the spreadsheet is loaded and their name will therefore not be known to AFC.
  • Array expressions are not supported (such as {=INDEX({1,2;3,4};0;2)}).
Repeating Sections
  • AND and OR cannot be used as aggregators over repeating sections.
  • Functions like NPV(), MIRR(), and IRR() cannot be used over repeating sections.
  • The last argument (the match type) must be constant, and the second argument (the match range) cannot reference a repeating section.
  • The range must be strictly ascending or descending for sorted searches to ensure results consistent with Excel.
  • The range argument cannot reference a repeating section.
  • No 3-dimensional lookups.
  • Does not return arrays (as in =SUM(INDEX(A1:B2;2))).
  • For 1-dimensional lookups, the index argument for the other direction must be either omitted, set to the constant value 0 (Excel accepts any expression returning 0), or set to an expression returning 1 (as in =INDEX(HorizVector;0;A1)).
  • Does not slice ranges into relative vectors for 1-dimensional lookups (as in =INDEX(Data;0;3) where this formula is in a row intersecting Data).

Numeric Types

Scaled Long
  • Currently computes exponentiation and conversion from and to dates using the double type.
  • Scaled division currently swaps arguments on the stack a little too much.
  • POWER() and the ^ operator with non-integer exponents are converted to double operations.
  • IRR() throws IllegalArgumentException when the function does not converge.
  • MIRR() is not supported because it needs fractional exponents.

Interfacing with Java

  • There is no support for null yet (see also the note on empty cells).
  • When binding a String-valued output method to a date field in Excel, the resulting value is not formatted as a date, but as a number. This is because, internally, dates are treated as numbers. This is the same behaviour as that shown by CONCATENATE and & in Excel itself.
  • When binding a String-valued output method to a numeric field with a special cell format, that format is not respected. This is the same behaviour as that shown by CONCATENATE and & in Excel itself.
  • Aggregators spanning nested sections are not yet supported, except for the special case which is useful for DSUM et al..


  • The interactive demo is still somewhat broken (because of missing info methods on the spreadsheet query interface).