Crate ironcalc

source ·
Expand description

§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

§Basic usage

Add the dependency in Cargo.toml:

[dependencies]
ironcalc = { git = "https://github.com/ironcalc/IronCalc", version = "0.1"}

until version 0.5.0 you should use the git dependencies as stated

A simple example with some numbers, a new sheet and a formula:

use ironcalc::{
    base::{expressions::utils::number_to_column, model::Model},
    export::save_to_xlsx,
};

fn main() -> Result<(), Box<dyn std::error::Error>> {
    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(())
}

§Styling the workbook

Adding colors, to cells, full columns or full rows is easy

use ironcalc::{base::model::Model, export::save_to_xlsx};

fn main() -> Result<(), Box<dyn std::error::Error>> {
    let mut model = Model::new_empty("hello_styles", "en", "UTC")?;

    // We are going to change styles in cell A1
    let sheet = 0;
    let row = 1;
    let column = 1;
    let mut style = model.get_style_for_cell(sheet, row, column);
    style.fill.fg_color = Some("#FFEE11".to_string());
    style.font.b = true;
    style.font.color = Some("#EEFF22".to_string());
    model.set_cell_style(sheet, row, column, &style)?;

    // evaluates (unnecessary in this case)
    model.evaluate();

    // saves to disk
    save_to_xlsx(&model, "hello-styles.xlsx")?;
    Ok(())
}

Changing column width and row heigh

use ironcalc::{base::model::Model, export::save_to_xlsx};

fn main() -> Result<(), Box<dyn std::error::Error>> {
    let mut model = Model::new_empty("widths-and-heights", "en", "UTC")?;
    // Cell C5
    let column = 3;
    let row = 5;
    // Make the first column 4 times as width
    let worksheet = model.workbook.worksheet_mut(0)?;
    let column_width = worksheet.column_width(column)? * 4.0;
    worksheet.set_column_width(column, column_width)?;

    // and the first row twice as high.
    let row_height = worksheet.row_height(row)? * 2.0;
    worksheet.set_row_height(row, row_height)?;

    // evaluates
    model.evaluate();

    // saves to disk
    save_to_xlsx(&model, "widths-and-heights.xlsx")?;
    Ok(())
}

Re-exports§

Modules§