The (Data) Science Behind SheetXL
A Unified Range Model
SheetXL introduces the Range, a unified data model that combines the power of interactive spreadsheets and data science computation, enabling you to easily build high-performance, user-driven data applications.
The Range concept comes in two "flavors".
Flavor | Inspired By | Responsibilities |
---|---|---|
IRange | Data Science Libraries (NumPy, pandas) | High-speed, in-memory computation. |
ICellRange | Traditional Spreadsheets (Excel, Sheets) | Live interaction with worksheet cells. |
Both flavors share the same set of design principles with aligned APIS that operate using vectorized operations to ensure speed and data integrity while also providing methods to access individual scalar values when a finer level of control is needed.
IRange: The Data API 🚀
For pure computation and data manipulation, use the IRange
.
An IRange
is a lightweight, immutable snapshot of data that lives entirely in memory. Because it's disconnected from the live sheet, its operations are extremely fast and guaranteed to be safe—you never have to worry about a formula accidentally changing your source data.
ICellRange: The Interactive API 🎨
To interact with the spreadsheet itself, use the ICellRange
.
An ICellRange
is a live connection to your worksheet. It gives you direct, "remote control" access to the cells, allowing you to mutate the sheet. Its methods allow you to change formulas, formatting, and layouts through safe,
transactional mutations, which are automatic or controlled explicitly with doBatch()
.
Switching between the two
The real power of this model comes from how the two flavors work together. The typical workflow is a clear, three-step process: read, compute, and write.
- Read from the sheet: Start with an
ICellRange
to select a live range of cells. - Compute in memory: Call
.toIRange()
on theICellRange
to create a safe, high-performanceIRange
snapshot for calculations. - Write back to the sheet: Use a destination
ICellRange
with a method like.setValues()
to write your results back into the workbook.
IRange
is the API used when creating formula functions and ICellRange
is typically used for macros.
Core Concepts & Features
Here's a deeper look at the design principles that make the Range model so powerful.
IRange Features
IRange
is built for performance and safety, borrowing proven concepts from modern data science tools.
-
Vectorized & Columnar: An
IRange
stores data in columns, similar to Apache Arrow and pandas. This columnar layout optimizes memory access, allowing for highly efficient vectorized computations that operate on entire datasets at once, rather than looping through individual cells. -
Immutable & Functional:
IRange
is immutable by design. Every transformation (e.g.,resize()
,filter()
) returns a newIRange
instance instead of changing the original. This functional approach eliminates side effects, making your code safer and more predictable. It also enables expressive workflows through method chaining. -
Zero-Copy Architecture: Most transformations are "zero-copy," meaning they don't duplicate data in memory. This makes operations like
broadcast()
andmap()
incredibly fast and memory-efficient.
ICellRange Features
ICellRange
extends the power of the vector engine with the interactive features needed for a rich spreadsheet experience.
-
UI-Aware Functionality: It provides the complete API for visual and interactive operations. This includes managing cell styles, values, formulas, and worksheet layout with methods like
getStyle()
orautoFit()
. -
Transactional Mutations: While
IRange
is immutable,ICellRange
is designed to perform safe mutations. Its methods provide an interface for changing the underlying data with automatic transactions or withindoBatch()
operations.
The Best of Both Worlds
The Unified Range Model gives you the best of two worlds, without compromise:
- The Data Science World: You get the raw computational power, speed, and safety of modern data analysis libraries
through the
IRange
API. - The Spreadsheet World: You get the familiar, interactive, and visually rich experience of a traditional spreadsheet,
powered by
ICellRange
.