A Excel file reader, in Rust.
office is a pure Rust library to process excel files.
As long as your files are simple enough, this library should just work.
let mut excel = Excel::open("file.xlsx").unwrap();
let r = excel.worksheet_range("Sheet1").unwrap();
for row in r.rows() {
println!("row={:?}, row[0]={:?}", row, row[0]);
}
use office::{Excel, Range, DataType};
// opens a new workbook
let path = "/path/to/my/excel/file.xlsm";
let mut workbook = Excel::open(path).unwrap();
// Read whole worksheet data and provide some statistics
if let Ok(range) = workbook.worksheet_range("Sheet1") {
let total_cells = range.get_size().0 * range.get_size().1;
let non_empty_cells: usize = range.rows().map(|r| {
r.iter().filter(|cell| cell != &&DataType::Empty).count()
}).sum();
println!("Found {} cells in 'Sheet1', including {} non empty cells",
total_cells, non_empty_cells);
}
// Check if the workbook has a vba project
if workbook.has_vba() {
let mut vba = workbook.vba_project().expect("Cannot find VbaProjec");
let vba = vba.to_mut();
let module1 = vba.get_module("Module 1").unwrap();
println!("Module 1 code:");
println!("{}", module1);
for r in vba.get_references() {
if r.is_missing() {
println!("Reference {} is broken or not accessible", r.name);
}
}
}
Browse the examples directory.
While there is no official benchmark yet, my first tests show a significant boost compared to official C# libraries:
- Reading cell values: at least 3 times faster
- Reading vba code: office does not read all sheets when opening your workbook, this is not fair
This library is very young and is not a transcription of an existing library. As a result there is a large room for improvement: only items related to either cell values or vba is implemented.
Many (most) part of the specifications are not implemented, the attention has been put on reading cell values and vba code.
The main unsupported items are:
- no support for writing excel files, this is a read-only libray
- no support for decoding MBSC vba code, office tries to decode as normal utf8, which is ok most of the time but not accurate
MIT