| Crates.io | rust_xlsxwriter |
| lib.rs | rust_xlsxwriter |
| version | 0.90.1 |
| created_at | 2022-06-17 19:44:08.079196+00 |
| updated_at | 2025-09-17 18:28:16.550601+00 |
| description | A Rust library for writing Excel 2007 xlsx files |
| homepage | https://rustxlsxwriter.github.io |
| repository | https://github.com/jmcnamara/rust_xlsxwriter |
| max_upload_size | |
| id | 608145 |
| size | 17,520,658 |
The rust_xlsxwriter library is a Rust crate for writing Excel files in the
xlsx format.
The rust_xlsxwriter crate 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 fidelity with the file format created by Excel. It
cannot be used to modify an existing file.
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 rewrite of the Python XlsxWriter library in Rust
by the same author, with additional Rust-like features and APIs. The
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.
Data validation.
Cell Notes.
Textboxes.
Checkboxes.
Sparklines.
Worksheet PNG/JPEG/GIF/BMP images.
Rich multi-format strings.
Outline groupings.
Defined names.
Autofilters.
Worksheet Tables.
Serde serialization support.
Support for macros.
Memory optimization mode for writing large files.
The rust_xlsxwriter crate was designed and implemented based around the
following design considerations:
rust_xlsxwriter library has sister
libraries written in C (libxlsxwriter), Python (XlsxWriter), and Perl
(Excel::Writer::XLSX), by the same author. Bug fixes and improvements in
one get transferred to the others.As mentioned above the rust_xlsxwriter library has sister libraries
written natively in C, Python, and Perl.
A relative performance comparison between the C, Rust, and Python versions is shown below. The Perl performance is similar to the Python library, so it has been omitted.
| Library | Relative to C | Relative to Rust |
|---|---|---|
| C/libxlsxwriter | 1.00 | |
rust_xlsxwriter |
1.14 | 1.00 |
| Python/XlsxWriter | 4.36 | 3.81 |
The C version is the fastest: it is 1.14 times faster than the Rust version and 4.36 times faster than the Python version. The Rust version is 3.81 times faster than the Python version.
See the Performance section for more details.
The following is a list of the features supported by the rust_xlsxwriter
crate.
Default
default: This includes all the standard functionality. The only
dependency is the zip crate.rust_xlsxwriter can be added to a Rust project as follows:
cargo add rust_xlsxwriter
Optional features
These are all off by default.
constant_memory: Keeps memory usage to a minimum when writing large files.
See Constant Memory Mode.serde: Adds support for Serde serialization.chrono: Adds support for Chrono date/time types to the API. See
IntoExcelDateTime.jiff: Adds support for Jiff date/time types to the API. See
IntoExcelDateTime.zlib: Improves performance of the zlib crate but adds a dependency on
zlib and a C compiler. This can be up to 1.5 times faster for large files.polars: Adds support for mapping between PolarsError and
rust_xlsxwriter::XlsxError. See also
polars_excel_writer.wasm: Adds a dependency on js-sys and wasm-bindgen to allow
compilation for wasm/JavaScript targets. See also
wasm-xlsxwriter.rust_decimal: Adds support for writing the
rust_decimal Decimal.ryu: Adds a dependency on ryu. This speeds up writing numeric
worksheet cells for large data files. See the Performance documentation.A rust_xlsxwriter feature can be enabled in your Cargo.toml file as
follows:
cargo add rust_xlsxwriter -F constant_memory
Recent changes:
Jiff date/time civil types.See the full Release Notes and Changelog.
rust_xlsxwriter library.
rust_xlsxwriter in a project and write a Hello World example.rust_xlsxwriter to write some
expense data to a spreadsheet.