From 5cf797d382b0ecd6b19ed8cbd78343746267f976 Mon Sep 17 00:00:00 2001 From: "fosdick.io" <67963637+fosdickio@users.noreply.github.com> Date: Tue, 20 Feb 2024 23:01:00 -0700 Subject: [PATCH] Adding new example counting formulas and errors (#6) --- base/examples/formulas_and_errors.rs | 46 ++++++++++++++++++++++++++++ base/src/lib.rs | 6 ++++ base/src/model.rs | 1 + 3 files changed, 53 insertions(+) create mode 100644 base/examples/formulas_and_errors.rs diff --git a/base/examples/formulas_and_errors.rs b/base/examples/formulas_and_errors.rs new file mode 100644 index 0000000..8333a88 --- /dev/null +++ b/base/examples/formulas_and_errors.rs @@ -0,0 +1,46 @@ +use ironcalc_base::{model::Model, types::CellType}; + +fn main() -> Result<(), Box> { + let mut model = Model::new_empty("formulas-and-errors", "en", "UTC")?; + // A1 + model.set_user_input(0, 1, 1, "1".to_string()); + // A2 + model.set_user_input(0, 2, 1, "2".to_string()); + // A3 + model.set_user_input(0, 3, 1, "3".to_string()); + // B1 + model.set_user_input(0, 1, 2, "=SUM(A1:A3)".to_string()); + // B2 + model.set_user_input(0, 2, 2, "=B1/0".to_string()); + // Evaluate + model.evaluate(); + + let cells = model.get_all_cells(); + + let mut cells_count = 0; + let mut formula_count = 0; + let mut error_count = 0; + + for cell in cells { + if let Some(cell) = model + .workbook + .worksheet(cell.index)? + .cell(cell.row, cell.column) + { + if cell.get_type() == CellType::ErrorValue { + error_count += 1; + } + if cell.has_formula() { + formula_count += 1; + } + + cells_count += 1; + } + } + + assert_eq!(cells_count, 5); + assert_eq!(formula_count, 2); + assert_eq!(error_count, 1); + + Ok(()) +} diff --git a/base/src/lib.rs b/base/src/lib.rs index 2e4dd72..e16f282 100644 --- a/base/src/lib.rs +++ b/base/src/lib.rs @@ -18,6 +18,12 @@ //! ```rust #![doc = include_str!("../examples/hello_world.rs")] //! ``` +//! +//! In this example, we demonstrate our ability to handle formulas and errors: +//! +//! ```rust +#![doc = include_str!("../examples/formulas_and_errors.rs")] +//! ``` pub mod calc_result; pub mod cell; diff --git a/base/src/model.rs b/base/src/model.rs index 35ce3cd..c04872c 100644 --- a/base/src/model.rs +++ b/base/src/model.rs @@ -1608,6 +1608,7 @@ impl Model { None => Ok(cell.get_text(&self.workbook.shared_strings, &self.language)), } } + /// Returns a list of all cells pub fn get_all_cells(&self) -> Vec { let mut cells = Vec::new();