Following Testoft’s book Spreadsheet Implementation Technology: Basics and Extensions.
The main class is ra_ref
which holds a single
relative, absolute, or mixed cell
reference. Two logical indicators, rowAbs
and colAbs
, which report whether the row (column) reference
is absolute. Also integers rowRef
and colRef
,
which either hold absolute row and column or, for a relative reference,
an offset.
Two other very convenient, but less general forms for holding cell references:
B4
, B$4
,
$B4
, $B$4
(let’s assume found in cell
D5
, shall we?)R[1]C[-2]
, R4C[-2]
,
R[1]C2
, R4C2
to_string.ra_ref()
converts a single ra_ref
to character.
as.ra_ref.character()
converts a single cell reference in
string form to a ra_ref
object.
Note there can be problems converting to/from character, specifically
A1 formatted strings, because we don’t know the host cell. A relative
row or column reference cannot be resolved without knowing the host
cell. So this is a source of warnings and NA
, going both
directions.
The cell_addr
class is for absolute cell addresses. It’s
a list with two synchronized, equal length integer vectors,
row
and col
. It could be a data frame or
matrix (and mabye it should be?), but it’s not. Methods [
,
[[
, and length
exist. Note that a single
cell_addr
object could hold many absolute references.
to_string.cell_addr
converts a cell_addr
object to character, in a vectorized way. The format fo
is
an argument. Under the hood, this actually converts each individual cell
address into an ra_ref
object, then calls
to_string
on it, and returns them as character vector.
as.ra_ref.cell_addr
converts a cell_addr
object to a ra_ref
object and is NOT vectorized.
WIP!