#excel #xlsx #string-formatting #api-bindings

xlsxwriter

Write xlsx file with number, formula, string, formatting, autofilter, merged cells, data validation and more

11 unstable releases (5 breaking)

0.6.0 Apr 11, 2023
0.5.0 Nov 13, 2022
0.4.0 Aug 19, 2022
0.3.5 Jul 13, 2021
0.2.0 Nov 19, 2019

#159 in Encoding

Download history 3802/week @ 2023-12-11 3946/week @ 2023-12-18 3646/week @ 2023-12-25 5274/week @ 2024-01-01 6423/week @ 2024-01-08 5587/week @ 2024-01-15 6669/week @ 2024-01-22 6009/week @ 2024-01-29 4649/week @ 2024-02-05 4773/week @ 2024-02-12 5051/week @ 2024-02-19 5763/week @ 2024-02-26 6851/week @ 2024-03-04 5799/week @ 2024-03-11 5782/week @ 2024-03-18 7054/week @ 2024-03-25

25,623 downloads per month
Used in 15 crates (12 directly)

Apache-2.0

2.5MB
48K SLoC

C 41K SLoC // 0.2% comments Rust 5.5K SLoC // 0.0% comments Bitbake 526 SLoC Shell 424 SLoC // 0.2% comments Perl 236 SLoC // 0.2% comments Automake 33 SLoC

xlsxwriter-rs

Build GitHub GitHub top language Crates.io Docs.rs

Rust binding of libxlsxwriter

Supported Features

  • 100% compatible Excel XLSX files.
  • Full Excel formatting.
  • Merged cells.
  • Autofilters.
  • Data validation and drop down lists.
  • Worksheet PNG/JPEG images.

Coming soon

  • Charts.

Feature Flags

  • no-md5: Disable image de-duplication and remove md5 function. (See upstream document to learn more).
  • use-openssl-md5: Use OpenSSL implementation of md5 function. (See upstream document to learn more).
  • system-zlib: Use system zlib instead of included zlib.

Build requirements

  • LLVM and clang

How to build on windows

  1. Install Visual Studio
  2. Install LLVM
  3. Set environment variable LIBCLANG_PATH as C:\Program Files\LLVM\bin
  4. Run build

Example

Result Image

let workbook = Workbook::new("target/simple1.xlsx")?;
let format1 = workbook.add_format().set_font_color(FormatColor::Red);

let format2 = workbook
    .add_format()
    .set_font_color(FormatColor::Blue)
    .set_underline(FormatUnderline::Single);

let format3 = workbook
    .add_format()
    .set_font_color(FormatColor::Green)
    .set_align(FormatAlignment::CenterAcross)
    .set_align(FormatAlignment::VerticalCenter);

let mut sheet1 = workbook.add_worksheet(None)?;
sheet1.write_string(0, 0, "Red text", Some(&format1))?;
sheet1.write_number(0, 1, 20., None)?;
sheet1.write_formula_num(1, 0, "=10+B1", None, 30.)?;
sheet1.write_url(
    1,
    1,
    "https://github.com/informationsea/xlsxwriter-rs",
    Some(&format2),
)?;
sheet1.merge_range(2, 0, 3, 2, "Hello, world", Some(&format3))?;

sheet1.set_selection(1, 0, 1, 2);
sheet1.set_tab_color(FormatColor::Cyan);
workbook.close()?;

Run Example with Cargo

You can explore this example locally following the steps below:

  1. Install LLVM and set LIBCLANG_PATH if you are using windows. (see bindgen doc for details)
  2. clone or fork this repository
  3. git submodule update --init --recursive
    • The above command downloads the required C library so we can compile
  4. cargo run --example hello_spreadsheet

You should then see the example in target/simple1.xlsx. Enjoy!

Dependencies