From c4aef8fec104b7df6cfb91bce1821bcf76d215a1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Nicol=C3=A1s=20Hatcher?= Date: Sat, 17 Feb 2024 17:50:08 +0100 Subject: [PATCH] FIX: Adds minimal example and logo! --- assets/favicon.ico | Bin 0 -> 3966 bytes assets/first-logo.png | Bin 0 -> 10448 bytes xlsx/src/lib.rs | 106 ++++++++++++++++++++++-------------------- 3 files changed, 56 insertions(+), 50 deletions(-) create mode 100644 assets/favicon.ico create mode 100644 assets/first-logo.png diff --git a/assets/favicon.ico b/assets/favicon.ico new file mode 100644 index 0000000000000000000000000000000000000000..be340ff7ae781ed05ec30d7d180421f486de88c4 GIT binary patch literal 3966 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 B+fe`j literal 0 HcmV?d00001 diff --git a/xlsx/src/lib.rs b/xlsx/src/lib.rs index e2f90e3..a4f9db0 100644 --- a/xlsx/src/lib.rs +++ b/xlsx/src/lib.rs @@ -1,58 +1,64 @@ -//! This crate reads an xlsx file and transforms it into an internal representation ([`Model`]). -//! An `xlsx` is a zip file containing a set of folders and `xml` files. The IronCalc json structure mimics the relevant parts of the Excel zip. -//! Although the xlsx structure is quite complicated, it's essentials regarding the spreadsheet technology are easier to grasp. -//! -//! The simplest workbook folder structure might look like this: -//! -//! ```text -//! docProps -//! app.xml -//! core.xml -//! -//! _rels -//! .rels -//! -//! xl -//! _rels -//! workbook.xml.rels -//! theme -//! theme1.xml -//! worksheets -//! sheet1.xml -//! calcChain.xml -//! styles.xml -//! workbook.xml -//! sharedStrings.xml -//! -//! [Content_Types].xml +//! # IronCalc - Core API documentation +//! +//! This technical API documentation in aimed at developers who want to develop bindings for a different language, +//! build a UI based on the engine or just use the library in a Rust program +//! +//! ## Usage +//! +//! Add the dependency in `Cargo.toml`: +//! +//! ```toml +//! [dependencies] +//! ironcalc = { git = "https://github.com/ironcalc/IronCalc", version = "0.1.0"} //! ``` +//! +//! until version 0.5.0 you should use the git dependencies as stated +//! +//! A simple example: +//! +//! +//! ```rust +//! use ironcalc::{ +//! base::{expressions::utils::number_to_column, model::Model}, +//! export::save_to_xlsx, +//! }; //! -//! Note that more complicated workbooks will have many more files and folders. -//! For instance charts, pivot tables, comments, tables,... -//! -//! The relevant json structure in IronCalc will be: -//! -//! ```json -//! { -//! "name": "Workbook1", -//! "defined_names": [], -//! "shared_strings": [], -//! "worksheets": [], -//! "styles": { -//! "num_fmts": [], -//! "fonts": [], -//! "fills": [], -//! "borders": [], -//! "cell_style_xfs": [], -//! "cell_styles" : [], -//! "cell_xfs": [] +//! fn main() -> Result<(), Box> { +//! let mut model = Model::new_empty("hello-calc.xlsx", "en", "UTC")?; +//! // Adds a square of numbers in the first sheet +//! for row in 1..100 { +//! for column in 1..100 { +//! let value = row * column; +//! model.set_user_input(0, row, column, format!("{}", value)); //! } //! } +//! // Adds a new sheet +//! model.add_sheet("Calculation")?; +//! // column 100 is CV +//! let last_column = number_to_column(100).unwrap(); +//! let formula = format!("=SUM(Sheet1!A1:{}100)", last_column); +//! model.set_user_input(1, 1, 1, formula); +//! +//! // evaluates +//! model.evaluate(); +//! +//! // saves to disk +//! save_to_xlsx(&model, "hello-calc.xlsx")?; +//! Ok(()) +//! } //! ``` -//! -//! Note that there is not a 1-1 correspondence but there is a close resemblance. -//! -//! [`Model`]: ../ironcalc/struct.Model.html +//! +//! You can then just: +//! +//! ```bash +//! cargo run +//! ``` + + +#![doc( + html_logo_url = "https://raw.githubusercontent.com/ironcalc/ironcalc/main/assets/logo.png", + html_favicon_url = "https://raw.githubusercontent.com/ironcalc/ironcalc/main/assets/favicon.ico" +)] pub mod compare; pub mod error;