Commit Graph

18 Commits

Author SHA1 Message Date
Nicolás Hatcher
0be7d9b85a FIX: Make clippy happy 2025-06-29 11:07:05 +02:00
Nicolás Hatcher
c554d929f4 FIX: Renaming a sheet updates formula in defined name 2025-04-16 09:56:17 +02:00
Nicolás Hatcher
da017b6113 UPDATE: Implement the implicit Intersection Operator
The II operator takes a range and returns a single cell that is in the same column or the same row
as the present cell.

This is needed for backwards compatibility with old Excel models and as a first step towards dynamic arrays.

In the past Excel would evaluate `=A1:A10` in cell `C3` as `A3`, but today in results in an array containing all
values in the range. To be compatible with old workbooks Excel inserts the II operator
on those cases.

So this PR performs an static analysis on all formulas inserting on import automatically the II operator
where necessary. This we call the _automatic implicit operator_. When exporting to Excel the operator is striped away.
You can also manually use the II. For instance `=SUM(@A1:A10)` in cell `C3`.
This was not possible before and such a formula would break backwards compatibility with Excel. To Excel that "non automatic"
form of the II is exported as `_xlfn.SINGLE()`.

Th static analysis has to be done for all arithmetic operations and all functions.
This is a bit of a daunting task and it is not done fully in this PR. We also need to implement arrays and dynamic arrays.
My believe is that once the core operations have been implemented we can go formula by formula writing proper tests and documentation.

After this PR formulas like `=A1:A10` for instance will return `#N/IMPL!` instead of performing the implicit intersection
2025-03-03 21:59:42 +01:00
Nicolás Hatcher
23ab5dfef2 UPDATE: Add rows/column style APIs 2025-02-15 09:46:39 +00:00
Nicolás Hatcher
690032c811 FIX: Remove optional context in parser
The context was optional because I thought that paring an RC formula
did not need context.

You at least need the sheet in which you are parsing
For instance toknow if a defined name is local
2024-12-26 10:21:21 +01:00
Nicolás Hatcher
86213a8434 FIX: Add test for get_defined_name_list
Also uses the scope instead of the opaque sheet_id
2024-12-26 10:21:21 +01:00
Nicolás Hatcher
e455ed14ea UPDATE: API for defined names 2024-12-26 10:21:21 +01:00
Sinan Yumurtaci
075760b7ba typo 2024-12-12 05:49:25 +01:00
Nicolás Hatcher
49ae2d8915 FIX: Forbid unwrap, expect and panic in the base code 2024-11-17 11:59:10 +01:00
Nicolás Hatcher Andrés
dc23a7f29c UPDATE: Adds web app (#79)
Things missing:

* Browse mode
* Front end tests
* Storybook
2024-08-18 11:44:16 +02:00
Nicolás Hatcher Andrés
b37397acb8 UPDATE: Adds ability to show/hide grid lines (#71) 2024-05-26 21:28:00 +02:00
Nicolás Hatcher Andrés
49c3b14bf0 UPDATE: Adds get/set views to the user model API (#69) 2024-05-20 17:51:09 +02:00
Nicolás Hatcher Andrés
f752c90058 UPDATE: Parses selected row/column/range and selected sheet (#67)
* FIX: Update to Rust 1.78.0

* UPDATE: Parses selected row/column/range and selected sheet
2024-05-09 11:46:26 +02:00
Nicolás Hatcher Andrés
489027991c UPDATE: Adds Web browser wasm bindings (#30)
* UPDATE: Adds Web browser wasm bindings

* FIX: install wasm-pack in the GitHub actions
2024-04-07 12:41:33 +02:00
Nicolás Hatcher Andrés
d445553d85 UPDATE: Adds 'user model' API (#27)
* bump version for documentation
* Fixes wrong doc comment
* renames old APIs to be consistent
2024-04-03 22:41:15 +02:00
Nicolas Hatcher
55a963e360 FIX: Adds more documentation 2024-02-20 15:19:05 +01:00
Nicolás Hatcher
67e8b0ce14 FIX: Adds shared_strings dict for performance reasons
NB: There are not benchmarks yet
2023-12-08 11:27:21 +01:00
Nicolás Hatcher
c5b8efd83d UPDATE: Dump of initial files 2023-11-20 10:46:19 +01:00