Formula function contract
This page is generated from the checked version 1 sheetwrite.formula-capabilities inventory. It publishes 100 required-supported target functions and 54 incumbent functions (154 canonical functions total) without maintaining a second name list. Aliases are shown beside their canonical function.
A function's presence means only the signature and semantic profiles linked in its row. Microsoft Excel documentation supplies the naming/family taxonomy; it is not a blanket Excel claim. Google Sheets and OpenFormula behavior is unverified unless a dialect profile says otherwise.
Bounded evaluation contract
- Parsing and dependency evaluation are each capped at 256 recursive levels. Range and matrix work is capped at 1,000,000 cells, 1,048,576 rows, 16,384 columns, and 64 MiB of value/intermediate storage; excess work returns an explicit formula error rather than truncating.
- One dynamic-array recompute pass is capped at 2,000,000 cell operations. Spill installation is atomic and collision-checked; see the formula guide for admission rules.
LETpermits at most 126 bindings and 16,384 expanded AST nodes. Bindings are lexical, shadow outer bindings, and are expanded lazily, so unused reads, errors, and volatility do not become dependencies.- Generated text is capped at 16 MiB and bounded searches at 4,000,000 steps. Text case conversion and parsing are Unicode-aware and host-locale independent;
NUMBERVALUEdefaults to.decimal and,grouping separators unless supplied explicitly. IRRandRATEuse deterministic root solving: 14 bracket steps, at most 100 solve steps, fixed1e-12convergence tolerances, and a finite search domain. Non-convergence or an invalid domain returns#NUM!.
No formula throughput or latency number is published here because this contract has no checked final formula-performance artifact. Use the performance evidence protocol to capture and validate measurements; limits above are implementation ceilings, not benchmark results.
Functions by family
Dynamic array
Taxonomy/source: Lookup and reference functions.
| Function (aliases) | Contract | Signature profile | Semantics profile | Dialect profile | Implementation profile |
|---|---|---|---|---|---|
FILTER | incumbent | filter | array | excel-documented | implemented-assisted |
SORT | incumbent | sort | array | excel-documented | implemented-assisted |
UNIQUE | incumbent | unique | array | excel-documented | implemented-assisted |
TRANSPOSE | required target | array-unary | array | excel-documented | implemented-assisted |
SEQUENCE | required target | sequence | array | excel-documented | implemented-assisted |
TAKE | required target | take-drop | array | excel-documented | implemented-assisted |
DROP | required target | take-drop | array | excel-documented | implemented-assisted |
CHOOSECOLS | required target | choose-axis | array | excel-documented | implemented-assisted |
CHOOSEROWS | required target | choose-axis | array | excel-documented | implemented-assisted |
Date and time
Taxonomy/source: Date and time functions.
Financial
Taxonomy/source: Financial functions.
| Function (aliases) | Contract | Signature profile | Semantics profile | Dialect profile | Implementation profile |
|---|---|---|---|---|---|
PV | required target | pv-fv-pmt | financial | excel-documented | implemented-assisted |
FV | required target | pv-fv-pmt | financial | excel-documented | implemented-assisted |
PMT | required target | pv-fv-pmt | financial | excel-documented | implemented-assisted |
NPV | required target | npv | financial | excel-documented | implemented-assisted |
IRR | required target | irr | financial-iterative | excel-documented | implemented-assisted |
RATE | required target | rate | financial-iterative | excel-documented | implemented-assisted |
IPMT | required target | period-payment | financial | excel-documented | implemented-assisted |
PPMT | required target | period-payment | financial | excel-documented | implemented-assisted |
Information and error
Taxonomy/source: Information functions.
Logical and control flow
Taxonomy/source: Logical functions.
| Function (aliases) | Contract | Signature profile | Semantics profile | Dialect profile | Implementation profile |
|---|---|---|---|---|---|
IF | incumbent | if | lazy-control | excel-documented | implemented-assisted |
AND | incumbent | logical-variadic | logical | excel-documented | implemented-assisted |
OR | incumbent | logical-variadic | logical | excel-documented | implemented-assisted |
NOT | incumbent | unary-value | logical | excel-documented | implemented-assisted |
IFS | required target | ifs | lazy-control | excel-documented | implemented-assisted |
SWITCH | required target | switch | lazy-control | excel-documented | implemented-assisted |
XOR | required target | logical-variadic | logical | excel-documented | implemented-assisted |
TRUE | required target | zero | logical | excel-documented | implemented-assisted |
FALSE | required target | zero | logical | excel-documented | implemented-assisted |
LET | required target | let | let-binding | excel-documented | implemented-assisted |
Lookup and reference
Taxonomy/source: Lookup and reference functions.
| Function (aliases) | Contract | Signature profile | Semantics profile | Dialect profile | Implementation profile |
|---|---|---|---|---|---|
INDEX | incumbent | index | lookup | excel-documented | implemented-assisted |
MATCH | incumbent | match | lookup | excel-documented | implemented-assisted |
VLOOKUP | incumbent | table-lookup | lookup | excel-documented | implemented-assisted |
HLOOKUP | incumbent | table-lookup | lookup | excel-documented | implemented-assisted |
XLOOKUP | incumbent | xlookup | lookup | excel-documented | implemented-assisted |
XMATCH | required target | xmatch | lookup | excel-documented | implemented-assisted |
CHOOSE | required target | choose | lookup | excel-documented | implemented-assisted |
ROW | required target | optional-reference | lookup | excel-documented | implemented-assisted |
ROWS | required target | unary-value | lookup | excel-documented | implemented-assisted |
COLUMN | required target | optional-reference | lookup | excel-documented | implemented-assisted |
COLUMNS | required target | unary-value | lookup | excel-documented | implemented-assisted |
ADDRESS | required target | address | lookup | excel-documented | implemented-assisted |
Math and trigonometry
Taxonomy/source: Math and trigonometry functions.
Statistical
Taxonomy/source: Statistical functions.
Text
Taxonomy/source: Text functions.
Formula operators
Taxonomy/source: Types of operators.
| Function (aliases) | Contract | Signature profile | Semantics profile | Dialect profile | Implementation profile |
|---|
Signature profiles
Argument order, required/default state, accepted shapes, repetition, and return shape come directly from the inventory.
Signature: zero
Return shape: scalar.
| Argument | Required | Default | Accepts | Repetition |
|---|---|---|---|---|
| none | — | — | — | — |
Signature: unary-value
Return shape: scalar.
| Argument | Required | Default | Accepts | Repetition |
|---|---|---|---|---|
value | yes | none | scalar, range, array, reference | once |
Signature: unary-number
Return shape: scalar.
| Argument | Required | Default | Accepts | Repetition |
|---|---|---|---|---|
number | yes | none | scalar, reference | once |
Signature: binary-number
Return shape: scalar.
| Argument | Required | Default | Accepts | Repetition |
|---|---|---|---|---|
number1 | yes | none | scalar, reference | once |
number2 | yes | none | scalar, reference | once |
Signature: variadic-values
Return shape: scalar.
| Argument | Required | Default | Accepts | Repetition |
|---|---|---|---|---|
value | yes | none | scalar, range, array, reference | one-or-more |
Signature: optional-variadic-values
Return shape: scalar.
| Argument | Required | Default | Accepts | Repetition |
|---|---|---|---|---|
value | no | none | scalar, range, array, reference | zero-or-more |
Signature: logical-variadic
Return shape: scalar.
| Argument | Required | Default | Accepts | Repetition |
|---|---|---|---|---|
logical | yes | none | scalar, range, array, reference | one-or-more |
Signature: if
Return shape: contextual.
| Argument | Required | Default | Accepts | Repetition |
|---|---|---|---|---|
logicalTest | yes | none | scalar, reference | once |
valueIfTrue | no | true | scalar, range, array, reference | once |
valueIfFalse | no | false | scalar, range, array, reference | once |
Signature: if-error
Return shape: contextual.
| Argument | Required | Default | Accepts | Repetition |
|---|---|---|---|---|
value | yes | none | scalar, range, array, reference | once |
valueIfError | yes | none | scalar, range, array, reference | once |
Signature: ifs
Return shape: contextual.
| Argument | Required | Default | Accepts | Repetition |
|---|---|---|---|---|
testAndValue | yes | none | scalar, range, array, reference | paired |
Signature: switch
Return shape: contextual.
| Argument | Required | Default | Accepts | Repetition |
|---|---|---|---|---|
expression | yes | none | scalar, reference | once |
valueAndResult | yes | none | scalar, range, array, reference | paired |
defaultValue | no | #N/A | scalar, range, array, reference | once |
Signature: let
Return shape: contextual.
| Argument | Required | Default | Accepts | Repetition |
|---|---|---|---|---|
nameAndValue | yes | none | scalar, range, array, name, reference | paired |
calculation | yes | none | scalar, range, array, name, reference | once |
Signature: round
Return shape: scalar.
| Argument | Required | Default | Accepts | Repetition |
|---|---|---|---|---|
number | yes | none | scalar, reference | once |
digits | yes | none | scalar, reference | once |
Signature: trunc
Return shape: scalar.
| Argument | Required | Default | Accepts | Repetition |
|---|---|---|---|---|
number | yes | none | scalar, reference | once |
digits | no | 0 | scalar, reference | once |
Signature: log
Return shape: scalar.
| Argument | Required | Default | Accepts | Repetition |
|---|---|---|---|---|
number | yes | none | scalar, reference | once |
base | no | 10 | scalar, reference | once |
Signature: subtotal
Return shape: scalar.
| Argument | Required | Default | Accepts | Repetition |
|---|---|---|---|---|
functionNumber | yes | none | scalar, reference | once |
reference | yes | none | range, array, reference | one-or-more |
Signature: left-right
Return shape: scalar.
| Argument | Required | Default | Accepts | Repetition |
|---|---|---|---|---|
text | yes | none | scalar, reference | once |
count | no | 1 | scalar, reference | once |
Signature: mid
Return shape: scalar.
| Argument | Required | Default | Accepts | Repetition |
|---|---|---|---|---|
text | yes | none | scalar, reference | once |
start | yes | none | scalar, reference | once |
count | yes | none | scalar, reference | once |
Signature: text-format
Return shape: scalar.
| Argument | Required | Default | Accepts | Repetition |
|---|---|---|---|---|
value | yes | none | scalar, reference | once |
formatText | yes | none | scalar, reference | once |
Signature: text-join
Return shape: scalar.
| Argument | Required | Default | Accepts | Repetition |
|---|---|---|---|---|
delimiter | yes | none | scalar, reference | once |
ignoreEmpty | yes | none | scalar, reference | once |
text | yes | none | scalar, range, array, reference | one-or-more |
Signature: substitute
Return shape: scalar.
| Argument | Required | Default | Accepts | Repetition |
|---|---|---|---|---|
text | yes | none | scalar, reference | once |
oldText | yes | none | scalar, reference | once |
newText | yes | none | scalar, reference | once |
instance | no | all | scalar, reference | once |
Signature: replace
Return shape: scalar.
| Argument | Required | Default | Accepts | Repetition |
|---|---|---|---|---|
oldText | yes | none | scalar, reference | once |
start | yes | none | scalar, reference | once |
count | yes | none | scalar, reference | once |
newText | yes | none | scalar, reference | once |
Signature: find-search
Return shape: scalar.
| Argument | Required | Default | Accepts | Repetition |
|---|---|---|---|---|
findText | yes | none | scalar, reference | once |
withinText | yes | none | scalar, reference | once |
start | no | 1 | scalar, reference | once |
Signature: repeat-text
Return shape: scalar.
| Argument | Required | Default | Accepts | Repetition |
|---|---|---|---|---|
text | yes | none | scalar, reference | once |
count | yes | none | scalar, reference | once |
Signature: number-value
Return shape: scalar.
| Argument | Required | Default | Accepts | Repetition |
|---|---|---|---|---|
text | yes | none | scalar, reference | once |
decimalSeparator | no | . | scalar, reference | once |
groupSeparator | no | , | scalar, reference | once |
Signature: date-three
Return shape: scalar.
| Argument | Required | Default | Accepts | Repetition |
|---|---|---|---|---|
part1 | yes | none | scalar, reference | once |
part2 | yes | none | scalar, reference | once |
part3 | yes | none | scalar, reference | once |
Signature: date-pair
Return shape: scalar.
| Argument | Required | Default | Accepts | Repetition |
|---|---|---|---|---|
endDate | yes | none | scalar, reference | once |
startDate | yes | none | scalar, reference | once |
Signature: date-offset
Return shape: scalar.
| Argument | Required | Default | Accepts | Repetition |
|---|---|---|---|---|
startDate | yes | none | scalar, reference | once |
offset | yes | none | scalar, reference | once |
Signature: weekday-weeknum
Return shape: scalar.
| Argument | Required | Default | Accepts | Repetition |
|---|---|---|---|---|
serialNumber | yes | none | scalar, reference | once |
returnType | no | 1 | scalar, reference | once |
Signature: workday
Return shape: scalar.
| Argument | Required | Default | Accepts | Repetition |
|---|---|---|---|---|
startDate | yes | none | scalar, reference | once |
days | yes | none | scalar, reference | once |
holidays | no | none | range, array, reference | once |
Signature: networkdays
Return shape: scalar.
| Argument | Required | Default | Accepts | Repetition |
|---|---|---|---|---|
startDate | yes | none | scalar, reference | once |
endDate | yes | none | scalar, reference | once |
holidays | no | none | range, array, reference | once |
Signature: yearfrac-days360
Return shape: scalar.
| Argument | Required | Default | Accepts | Repetition |
|---|---|---|---|---|
startDate | yes | none | scalar, reference | once |
endDate | yes | none | scalar, reference | once |
basisOrMethod | no | 0 | scalar, reference | once |
Signature: value-k
Return shape: scalar.
| Argument | Required | Default | Accepts | Repetition |
|---|---|---|---|---|
array | yes | none | range, array, reference | once |
k | yes | none | scalar, reference | once |
Signature: rank
Return shape: scalar.
| Argument | Required | Default | Accepts | Repetition |
|---|---|---|---|---|
number | yes | none | scalar, reference | once |
reference | yes | none | range, array, reference | once |
order | no | 0 | scalar, reference | once |
Signature: percentile
Return shape: scalar.
| Argument | Required | Default | Accepts | Repetition |
|---|---|---|---|---|
array | yes | none | range, array, reference | once |
fraction | yes | none | scalar, reference | once |
Signature: pair-arrays
Return shape: scalar.
| Argument | Required | Default | Accepts | Repetition |
|---|---|---|---|---|
array1 | yes | none | range, array, reference | once |
array2 | yes | none | range, array, reference | once |
Signature: criteria-one
Return shape: scalar.
| Argument | Required | Default | Accepts | Repetition |
|---|---|---|---|---|
range | yes | none | range, array, reference | once |
criteria | yes | none | scalar, reference | once |
Signature: criteria-many
Return shape: scalar.
| Argument | Required | Default | Accepts | Repetition |
|---|---|---|---|---|
rangeAndCriteria | yes | none | scalar, range, array, reference | paired |
Signature: sumif
Return shape: scalar.
| Argument | Required | Default | Accepts | Repetition |
|---|---|---|---|---|
range | yes | none | range, array, reference | once |
criteria | yes | none | scalar, reference | once |
sumRange | no | range | range, array, reference | once |
Signature: sumifs
Return shape: scalar.
| Argument | Required | Default | Accepts | Repetition |
|---|---|---|---|---|
sumRange | yes | none | range, array, reference | once |
rangeAndCriteria | yes | none | scalar, range, array, reference | paired |
Signature: match
Return shape: scalar.
| Argument | Required | Default | Accepts | Repetition |
|---|---|---|---|---|
lookupValue | yes | none | scalar, reference | once |
lookupArray | yes | none | range, array, reference | once |
matchMode | no | 1 | scalar, reference | once |
Signature: xmatch
Return shape: scalar.
| Argument | Required | Default | Accepts | Repetition |
|---|---|---|---|---|
lookupValue | yes | none | scalar, reference | once |
lookupArray | yes | none | range, array, reference | once |
matchMode | no | 0 | scalar, reference | once |
searchMode | no | 1 | scalar, reference | once |
Signature: index
Return shape: contextual.
| Argument | Required | Default | Accepts | Repetition |
|---|---|---|---|---|
array | yes | none | range, array, reference | once |
row | yes | none | scalar, reference | once |
column | no | 1 | scalar, reference | once |
Signature: xlookup
Return shape: contextual.
| Argument | Required | Default | Accepts | Repetition |
|---|---|---|---|---|
lookupValue | yes | none | scalar, reference | once |
lookupArray | yes | none | range, array, reference | once |
returnArray | yes | none | range, array, reference | once |
ifNotFound | no | #N/A | scalar, reference | once |
matchMode | no | 0 | scalar, reference | once |
searchMode | no | 1 | scalar, reference | once |
Signature: table-lookup
Return shape: scalar.
| Argument | Required | Default | Accepts | Repetition |
|---|---|---|---|---|
lookupValue | yes | none | scalar, reference | once |
table | yes | none | range, array, reference | once |
index | yes | none | scalar, reference | once |
approximate | no | true | scalar, reference | once |
Signature: filter
Return shape: array.
| Argument | Required | Default | Accepts | Repetition |
|---|---|---|---|---|
array | yes | none | range, array, reference | once |
include | yes | none | range, array, reference | once |
ifEmpty | no | #CALC! | scalar, reference | once |
Signature: sort
Return shape: array.
| Argument | Required | Default | Accepts | Repetition |
|---|---|---|---|---|
array | yes | none | range, array, reference | once |
sortIndex | no | 1 | scalar, reference | once |
sortOrder | no | 1 | scalar, reference | once |
byColumn | no | false | scalar, reference | once |
Signature: unique
Return shape: array.
| Argument | Required | Default | Accepts | Repetition |
|---|---|---|---|---|
array | yes | none | range, array, reference | once |
byColumn | no | false | scalar, reference | once |
exactlyOnce | no | false | scalar, reference | once |
Signature: choose
Return shape: contextual.
| Argument | Required | Default | Accepts | Repetition |
|---|---|---|---|---|
index | yes | none | scalar, reference | once |
value | yes | none | scalar, range, array, reference | one-or-more |
Signature: optional-reference
Return shape: contextual.
| Argument | Required | Default | Accepts | Repetition |
|---|---|---|---|---|
reference | no | formula-cell | range, array, reference | once |
Signature: address
Return shape: scalar.
| Argument | Required | Default | Accepts | Repetition |
|---|---|---|---|---|
row | yes | none | scalar, reference | once |
column | yes | none | scalar, reference | once |
absNumber | no | 1 | scalar, reference | once |
a1 | no | true | scalar, reference | once |
sheetText | no | none | scalar, reference | once |
Signature: array-unary
Return shape: array.
| Argument | Required | Default | Accepts | Repetition |
|---|---|---|---|---|
array | yes | none | range, array, reference | once |
Signature: sequence
Return shape: array.
| Argument | Required | Default | Accepts | Repetition |
|---|---|---|---|---|
rows | yes | none | scalar, reference | once |
columns | no | 1 | scalar, reference | once |
start | no | 1 | scalar, reference | once |
step | no | 1 | scalar, reference | once |
Signature: take-drop
Return shape: array.
| Argument | Required | Default | Accepts | Repetition |
|---|---|---|---|---|
array | yes | none | range, array, reference | once |
rows | yes | none | scalar, reference | once |
columns | no | all | scalar, reference | once |
Signature: choose-axis
Return shape: array.
| Argument | Required | Default | Accepts | Repetition |
|---|---|---|---|---|
array | yes | none | range, array, reference | once |
index | yes | none | scalar, array, reference | one-or-more |
Signature: pv-fv-pmt
Return shape: scalar.
| Argument | Required | Default | Accepts | Repetition |
|---|---|---|---|---|
rate | yes | none | scalar, reference | once |
nper | yes | none | scalar, reference | once |
paymentOrPresentValue | yes | none | scalar, reference | once |
futureValue | no | 0 | scalar, reference | once |
type | no | 0 | scalar, reference | once |
Signature: npv
Return shape: scalar.
| Argument | Required | Default | Accepts | Repetition |
|---|---|---|---|---|
rate | yes | none | scalar, reference | once |
value | yes | none | scalar, range, array, reference | one-or-more |
Signature: irr
Return shape: scalar.
| Argument | Required | Default | Accepts | Repetition |
|---|---|---|---|---|
values | yes | none | range, array, reference | once |
guess | no | 0.1 | scalar, reference | once |
Signature: rate
Return shape: scalar.
| Argument | Required | Default | Accepts | Repetition |
|---|---|---|---|---|
nper | yes | none | scalar, reference | once |
payment | yes | none | scalar, reference | once |
presentValue | yes | none | scalar, reference | once |
futureValue | no | 0 | scalar, reference | once |
type | no | 0 | scalar, reference | once |
guess | no | 0.1 | scalar, reference | once |
Signature: period-payment
Return shape: scalar.
| Argument | Required | Default | Accepts | Repetition |
|---|---|---|---|---|
rate | yes | none | scalar, reference | once |
period | yes | none | scalar, reference | once |
nper | yes | none | scalar, reference | once |
presentValue | yes | none | scalar, reference | once |
futureValue | no | 0 | scalar, reference | once |
type | no | 0 | scalar, reference | once |
Semantic profiles
These values are normative for the listed Sheetwrite subset. function-defined and contextual are explicit limitations: consult the formula guide's function-specific sections rather than assuming another spreadsheet's edge behavior.
Semantics: scalar
| Dimension | Contract |
|---|---|
| shape | scalar: accepted range: contextual array: contextual broadcast: function-defined result: scalar |
| coercion | blank: zero text: number-if-parseable boolean: number error: propagate |
| text | case: not-applicable wildcard: not-applicable |
| environment | locale: invariant dateSystem: not-applicable |
| numeric | tolerance: binary64 domain: function-defined iteration: kind: none maximum: none |
| calculation | dependencies: tracked lazy: eager spill: scalar fill: relative-reference-rewrite copy: relative-reference-rewrite structuralRewrite: ast-reference-rewrite |
| persistence | snapshot: formula-source history: formula-source collaboration: formula-source xlsxSource: rewrite-on-structural-edit |
Semantics: aggregate
| Dimension | Contract |
|---|---|
| shape | scalar: accepted range: accepted array: accepted broadcast: none result: scalar |
| coercion | blank: ignored text: ignored-in-ranges boolean: ignored-in-ranges error: propagate |
| text | case: not-applicable wildcard: not-applicable |
| environment | locale: invariant dateSystem: not-applicable |
| numeric | tolerance: binary64 domain: function-defined iteration: kind: none maximum: none |
| calculation | dependencies: tracked lazy: eager spill: scalar fill: relative-reference-rewrite copy: relative-reference-rewrite structuralRewrite: ast-reference-rewrite |
| persistence | snapshot: formula-source history: formula-source collaboration: formula-source xlsxSource: rewrite-on-structural-edit |
Semantics: information
| Dimension | Contract |
|---|---|
| shape | scalar: accepted range: contextual array: contextual broadcast: function-defined result: scalar |
| coercion | blank: preserved text: preserved boolean: preserved error: function-defined |
| text | case: not-applicable wildcard: not-applicable |
| environment | locale: invariant dateSystem: not-applicable |
| numeric | tolerance: exact domain: all-inputs iteration: kind: none maximum: none |
| calculation | dependencies: tracked lazy: eager spill: scalar fill: relative-reference-rewrite copy: relative-reference-rewrite structuralRewrite: ast-reference-rewrite |
| persistence | snapshot: formula-source history: formula-source collaboration: formula-source xlsxSource: rewrite-on-structural-edit |
Semantics: logical
| Dimension | Contract |
|---|---|
| shape | scalar: accepted range: accepted array: contextual broadcast: function-defined result: scalar |
| coercion | blank: false text: function-defined boolean: preserved error: propagate |
| text | case: insensitive wildcard: literal |
| environment | locale: invariant dateSystem: not-applicable |
| numeric | tolerance: exact domain: all-inputs iteration: kind: none maximum: none |
| calculation | dependencies: tracked lazy: eager spill: scalar fill: relative-reference-rewrite copy: relative-reference-rewrite structuralRewrite: ast-reference-rewrite |
| persistence | snapshot: formula-source history: formula-source collaboration: formula-source xlsxSource: rewrite-on-structural-edit |
Semantics: lazy-control
| Dimension | Contract |
|---|---|
| shape | scalar: accepted range: contextual array: contextual broadcast: function-defined result: contextual |
| coercion | blank: function-defined text: function-defined boolean: function-defined error: trap-selected |
| text | case: insensitive wildcard: literal |
| environment | locale: invariant dateSystem: function-defined |
| numeric | tolerance: function-defined domain: function-defined iteration: kind: none maximum: none |
| calculation | dependencies: contextual lazy: lazy-branches spill: contextual fill: relative-reference-rewrite copy: relative-reference-rewrite structuralRewrite: ast-reference-rewrite |
| persistence | snapshot: formula-source history: formula-source collaboration: formula-source xlsxSource: rewrite-on-structural-edit |
Semantics: let-binding
| Dimension | Contract |
|---|---|
| shape | scalar: accepted range: accepted array: accepted broadcast: function-defined result: contextual |
| coercion | blank: preserved text: preserved boolean: preserved error: propagate |
| text | case: insensitive wildcard: literal |
| environment | locale: invariant dateSystem: function-defined |
| numeric | tolerance: function-defined domain: function-defined iteration: kind: none maximum: none |
| calculation | dependencies: contextual lazy: lazy-bindings spill: contextual fill: relative-reference-rewrite copy: relative-reference-rewrite structuralRewrite: ast-reference-rewrite |
| persistence | snapshot: formula-source history: formula-source collaboration: formula-source xlsxSource: rewrite-on-structural-edit |
Semantics: text
| Dimension | Contract |
|---|---|
| shape | scalar: accepted range: contextual array: contextual broadcast: function-defined result: scalar |
| coercion | blank: empty-text text: preserved boolean: preserved error: propagate |
| text | case: function-defined wildcard: literal |
| environment | locale: function-defined dateSystem: function-defined |
| numeric | tolerance: not-applicable domain: function-defined iteration: kind: none maximum: none |
| calculation | dependencies: tracked lazy: eager spill: scalar fill: relative-reference-rewrite copy: relative-reference-rewrite structuralRewrite: ast-reference-rewrite |
| persistence | snapshot: formula-source history: formula-source collaboration: formula-source xlsxSource: rewrite-on-structural-edit |
Semantics: text-sensitive
| Dimension | Contract |
|---|---|
| shape | scalar: accepted range: contextual array: contextual broadcast: function-defined result: scalar |
| coercion | blank: empty-text text: preserved boolean: preserved error: propagate |
| text | case: sensitive wildcard: literal |
| environment | locale: invariant dateSystem: not-applicable |
| numeric | tolerance: not-applicable domain: function-defined iteration: kind: none maximum: none |
| calculation | dependencies: tracked lazy: eager spill: scalar fill: relative-reference-rewrite copy: relative-reference-rewrite structuralRewrite: ast-reference-rewrite |
| persistence | snapshot: formula-source history: formula-source collaboration: formula-source xlsxSource: rewrite-on-structural-edit |
Semantics: text-search
| Dimension | Contract |
|---|---|
| shape | scalar: accepted range: contextual array: contextual broadcast: function-defined result: scalar |
| coercion | blank: empty-text text: preserved boolean: preserved error: propagate |
| text | case: insensitive wildcard: supported |
| environment | locale: invariant dateSystem: not-applicable |
| numeric | tolerance: not-applicable domain: function-defined iteration: kind: none maximum: none |
| calculation | dependencies: tracked lazy: eager spill: scalar fill: relative-reference-rewrite copy: relative-reference-rewrite structuralRewrite: ast-reference-rewrite |
| persistence | snapshot: formula-source history: formula-source collaboration: formula-source xlsxSource: rewrite-on-structural-edit |
Semantics: criteria
| Dimension | Contract |
|---|---|
| shape | scalar: accepted range: accepted array: accepted broadcast: pairwise result: scalar |
| coercion | blank: function-defined text: function-defined boolean: function-defined error: propagate |
| text | case: insensitive wildcard: supported |
| environment | locale: invariant dateSystem: function-defined |
| numeric | tolerance: binary64 domain: function-defined iteration: kind: none maximum: none |
| calculation | dependencies: tracked lazy: eager spill: scalar fill: relative-reference-rewrite copy: relative-reference-rewrite structuralRewrite: ast-reference-rewrite |
| persistence | snapshot: formula-source history: formula-source collaboration: formula-source xlsxSource: rewrite-on-structural-edit |
Semantics: date-time
| Dimension | Contract |
|---|---|
| shape | scalar: accepted range: contextual array: contextual broadcast: function-defined result: scalar |
| coercion | blank: zero text: number-if-parseable boolean: number error: propagate |
| text | case: insensitive wildcard: literal |
| environment | locale: invariant dateSystem: excel-1900 |
| numeric | tolerance: binary64 domain: bounded iteration: kind: none maximum: none |
| calculation | dependencies: tracked lazy: eager spill: scalar fill: relative-reference-rewrite copy: relative-reference-rewrite structuralRewrite: ast-reference-rewrite |
| persistence | snapshot: formula-source history: formula-source collaboration: formula-source xlsxSource: rewrite-on-structural-edit |
Semantics: volatile-date
| Dimension | Contract |
|---|---|
| shape | scalar: accepted range: rejected array: rejected broadcast: none result: scalar |
| coercion | blank: preserved text: preserved boolean: preserved error: propagate |
| text | case: not-applicable wildcard: not-applicable |
| environment | locale: not-applicable dateSystem: host-clock |
| numeric | tolerance: binary64 domain: bounded iteration: kind: none maximum: none |
| calculation | dependencies: none lazy: not-applicable spill: scalar fill: source-preserved copy: source-preserved structuralRewrite: source-preserved |
| persistence | snapshot: formula-source history: formula-source collaboration: formula-source xlsxSource: rewrite-on-structural-edit |
Semantics: lookup
| Dimension | Contract |
|---|---|
| shape | scalar: accepted range: accepted array: accepted broadcast: function-defined result: contextual |
| coercion | blank: function-defined text: function-defined boolean: function-defined error: propagate |
| text | case: insensitive wildcard: function-defined |
| environment | locale: invariant dateSystem: function-defined |
| numeric | tolerance: exact domain: function-defined iteration: kind: none maximum: none |
| calculation | dependencies: tracked lazy: eager spill: contextual fill: relative-reference-rewrite copy: relative-reference-rewrite structuralRewrite: ast-reference-rewrite |
| persistence | snapshot: formula-source history: formula-source collaboration: formula-source xlsxSource: rewrite-on-structural-edit |
Semantics: array
| Dimension | Contract |
|---|---|
| shape | scalar: contextual range: accepted array: accepted broadcast: function-defined result: array |
| coercion | blank: preserved text: preserved boolean: preserved error: propagate |
| text | case: function-defined wildcard: function-defined |
| environment | locale: invariant dateSystem: function-defined |
| numeric | tolerance: function-defined domain: bounded iteration: kind: none maximum: none |
| calculation | dependencies: tracked lazy: eager spill: array fill: relative-reference-rewrite copy: relative-reference-rewrite structuralRewrite: ast-reference-rewrite |
| persistence | snapshot: formula-source history: formula-source collaboration: formula-source xlsxSource: rewrite-on-structural-edit |
Semantics: financial
| Dimension | Contract |
|---|---|
| shape | scalar: accepted range: contextual array: contextual broadcast: function-defined result: scalar |
| coercion | blank: zero text: number-if-parseable boolean: number error: propagate |
| text | case: not-applicable wildcard: not-applicable |
| environment | locale: invariant dateSystem: not-applicable |
| numeric | tolerance: binary64 domain: bounded iteration: kind: none maximum: none |
| calculation | dependencies: tracked lazy: eager spill: scalar fill: relative-reference-rewrite copy: relative-reference-rewrite structuralRewrite: ast-reference-rewrite |
| persistence | snapshot: formula-source history: formula-source collaboration: formula-source xlsxSource: rewrite-on-structural-edit |
Semantics: financial-iterative
| Dimension | Contract |
|---|---|
| shape | scalar: accepted range: accepted array: accepted broadcast: none result: scalar |
| coercion | blank: zero text: number-if-parseable boolean: number error: propagate |
| text | case: not-applicable wildcard: not-applicable |
| environment | locale: invariant dateSystem: not-applicable |
| numeric | tolerance: binary64 domain: bounded iteration: kind: bounded maximum: 100 |
| calculation | dependencies: tracked lazy: eager spill: scalar fill: relative-reference-rewrite copy: relative-reference-rewrite structuralRewrite: ast-reference-rewrite |
| persistence | snapshot: formula-source history: formula-source collaboration: formula-source xlsxSource: rewrite-on-structural-edit |
Dialect profiles
Dialect: excel-documented
| Dialect | Status |
|---|---|
| Microsoft Excel | documented |
| Google Sheets | unverified |
| OpenFormula | unverified |
Limitations: Google Sheets and OpenFormula results require producer evidence before compatibility is claimed.
Implementation profiles
Implementation: implemented-assisted
| Layer | Status and source/evidence |
|---|---|
| Parser | implementedpackages/wasm/src/calc.rs |
| Evaluator | implementedpackages/wasm/src/eval/mod.rspackages/wasm/src/eval/functions.rs |
| Formula assist | implementedpackages/core/src/formula-assist.ts |
| Evidence | source-linkedpackages/wasm/src/tests.rspackages/core/test/formula-assist.test.ts |
Implementation: parser-assisted-evaluator-declared
| Layer | Status and source/evidence |
|---|---|
| Parser | implementedpackages/wasm/src/calc.rs |
| Evaluator | declared |
| Formula assist | implementedpackages/core/src/formula-assist.ts |
| Evidence | source-linkedpackages/core/src/formula-assist.ts |
Implementation: parser-declared-target
| Layer | Status and source/evidence |
|---|---|
| Parser | implementedpackages/wasm/src/calc.rs |
| Evaluator | declared |
| Formula assist | missingpackages/core/src/formula-assist.ts |
| Evidence | registration-testedscripts/formula-contract.test.ts |
Unsupported categories
Unknown functions retain their source and evaluate to #NAME?; Sheetwrite does not silently execute a network, custom-code, or compatibility fallback.
| Category | Scope | Examples | Source | Evidence |
|---|---|---|---|---|
Volatile recalculation (volatile) | Automatic volatility semantics beyond the existing clock functions are outside the supported contract. | INDIRECT, OFFSET, RAND, RANDBETWEEN, RANDARRAY | Math and trigonometry functions | scripts/formula-contract.test.ts |
Network functions (network) | Formula evaluation never performs network requests. | ENCODEURL, FILTERXML, IMAGE, WEBSERVICE | Web functions | scripts/formula-contract.test.ts |
External data functions (external) | Functions that query external providers or live data connections are not evaluated. | GOOGLEFINANCE, IMPORTDATA, IMPORTHTML, IMPORTXML, RTD | Add-in and Automation functions | scripts/formula-contract.test.ts |
Database functions (database) | D-prefixed database aggregation functions are not evaluated. | DAVERAGE, DCOUNT, DGET, DSUM, DVAR | Database functions | scripts/formula-contract.test.ts |
Cube functions (cube) | OLAP cube members, sets, and values are not resolved. | CUBEMEMBER, CUBESET, CUBEVALUE | Cube functions | scripts/formula-contract.test.ts |
LAMBDA and higher-order functions (lambda) | User-defined lambdas and higher-order array execution are not evaluated. | BYCOL, BYROW, LAMBDA, MAKEARRAY, MAP, REDUCE, SCAN | Logical functions | scripts/formula-contract.test.ts |
Arbitrary external workbook references (external-workbook) | References to arbitrary workbook files are not loaded or dereferenced. | '[Book.xlsx]Sheet1'!A1 | Lookup and reference functions | scripts/formula-contract.test.ts |
In particular, automatic volatile functions beyond the explicit host-clock barrier, network/external-data functions, arbitrary external workbook links, database functions, cube/OLAP functions, and LAMBDA/higher-order execution are unsupported. TODAY and NOW are the documented clock-function exception; LET is supported and is not a LAMBDA fallback.