Skip to main content

3.5.7 Lookup functions

Org has three predefined Emacs Lisp functions for lookups in tables.

‘(org-lookup-first VAL S-LIST R-LIST &optional PREDICATE)’​

Searches for the first element S in list S-LIST for which

(PREDICATE VAL S)

is non-nil; returns the value from the corresponding position in list R-LIST. The default PREDICATE is equal. Note that the parameters VAL and S are passed to PREDICATE in the same order as the corresponding parameters are in the call to org-lookup-first, where VAL precedes S-LIST. If R-LIST is nil, the matching element S of S-LIST is returned.

‘(org-lookup-last VAL S-LIST R-LIST &optional PREDICATE)’​

Similar to org-lookup-first above, but searches for the last element for which PREDICATE is non-nil.

‘(org-lookup-all VAL S-LIST R-LIST &optional PREDICATE)’​

Similar to org-lookup-first, but searches for all elements for which PREDICATE is non-nil, and returns all corresponding values. This function can not be used by itself in a formula, because it returns a list of values. However, powerful lookups can be built when this function is combined with other Emacs Lisp functions.

If the ranges used in these functions contain empty fields, the ‘E’ mode for the formula should usually be specified: otherwise empty fields are not included in S-LIST and/or R-LIST which can, for example, result in an incorrect mapping from an element of S-LIST to the corresponding element of R-LIST.

These three functions can be used to implement associative arrays, count matching cells, rank results, group data, etc. For practical examples see this tutorial on Worg.