63 breaking releases

0.64.2 Apr 13, 2024
0.64.1 Mar 26, 2024
0.63.0 Feb 25, 2024
0.59.0 Dec 15, 2023
0.1.0 Jun 17, 2022

#56 in Encoding

Download history 1115/week @ 2023-12-25 2049/week @ 2024-01-01 3208/week @ 2024-01-08 2584/week @ 2024-01-15 2908/week @ 2024-01-22 2676/week @ 2024-01-29 2501/week @ 2024-02-05 3304/week @ 2024-02-12 3588/week @ 2024-02-19 3091/week @ 2024-02-26 3985/week @ 2024-03-04 3240/week @ 2024-03-11 3774/week @ 2024-03-18 3221/week @ 2024-03-25 3619/week @ 2024-04-01 2632/week @ 2024-04-08

13,500 downloads per month
Used in 13 crates (12 directly)

MIT/Apache

3MB
33K SLoC

rust_xlsxwriter

The rust_xlsxwriter library is a Rust library for writing Excel files in the xlsx format.

The rust_xlsxwriter library can be used to write text, numbers, dates and formulas to multiple worksheets in a new Excel 2007+ xlsx file. It has a focus on performance and on fidelity with the file format created by Excel. It cannot be used to modify an existing file.

Example

Sample code to generate the Excel file shown above.

use rust_xlsxwriter::*;

fn main() -> Result<(), XlsxError> {
    // Create a new Excel file object.
    let mut workbook = Workbook::new();

    // Create some formats to use in the worksheet.
    let bold_format = Format::new().set_bold();
    let decimal_format = Format::new().set_num_format("0.000");
    let date_format = Format::new().set_num_format("yyyy-mm-dd");
    let merge_format = Format::new()
        .set_border(FormatBorder::Thin)
        .set_align(FormatAlign::Center);

    // Add a worksheet to the workbook.
    let worksheet = workbook.add_worksheet();

    // Set the column width for clarity.
    worksheet.set_column_width(0, 22)?;

    // Write a string without formatting.
    worksheet.write(0, 0, "Hello")?;

    // Write a string with the bold format defined above.
    worksheet.write_with_format(1, 0, "World", &bold_format)?;

    // Write some numbers.
    worksheet.write(2, 0, 1)?;
    worksheet.write(3, 0, 2.34)?;

    // Write a number with formatting.
    worksheet.write_with_format(4, 0, 3.00, &decimal_format)?;

    // Write a formula.
    worksheet.write(5, 0, Formula::new("=SIN(PI()/4)"))?;

    // Write a date.
    let date = ExcelDateTime::from_ymd(2023, 1, 25)?;
    worksheet.write_with_format(6, 0, &date, &date_format)?;

    // Write some links.
    worksheet.write(7, 0, Url::new("https://www.rust-lang.org"))?;
    worksheet.write(8, 0, Url::new("https://www.rust-lang.org").set_text("Rust"))?;

    // Write some merged cells.
    worksheet.merge_range(9, 0, 9, 1, "Merged cells", &merge_format)?;

    // Insert an image.
    let image = Image::new("examples/rust_logo.png")?;
    worksheet.insert_image(1, 2, &image)?;

    // Save the file to disk.
    workbook.save("demo.xlsx")?;

    Ok(())
}

rust_xlsxwriter is a port of the XlsxWriter Python module by the same author. Feature porting is a work in progress. The currently supported features are:

  • Support for writing all basic Excel data types.
  • Full cell formatting support.
  • Formula support, including new Excel 365 dynamic functions.
  • Charts.
  • Hyperlink support.
  • Page/Printing Setup support.
  • Merged ranges.
  • Conditional formatting.
  • Sparklines.
  • Worksheet PNG/JPEG/GIF/BMP images.
  • Rich multi-format strings.
  • Defined names.
  • Autofilters.
  • Worksheet Tables.
  • Serde serialization support.

rust_xlsxwriter is under active development and new features will be added frequently.

Features

  • default: Includes all the standard functionality. Has dependencies on zip, regex and lazy_static.

  • serde: Adds supports for Serde serialization. This is off by default.

  • chrono: Adds supports for Chrono date/time types to the API. This is off by default.

  • zlib: Adds a dependency on zlib and a C compiler. This includes the same features as default but is 1.5x faster for large files.

  • polars: Add support for mapping between PolarsError and rust_xlsxwriter::XlsxError to make code that handles both types of error easier to write.

  • wasm: Adds a dependency on js-sys and wasm-bindgen to allow compilation for wasm/JavaScript targets.

Release notes

Recent changes:

  • Added support for worksheet sparklines.
  • Added support for Excel 365 embedded worksheet images.
  • Added support for Serde serialization.

See the full Release Notes and Changelog.

See also

Dependencies

~3–13MB
~126K SLoC