| Crates.io | office |
| lib.rs | office |
| version | 0.8.2 |
| created_at | 2016-11-08 01:21:47.116387+00 |
| updated_at | 2016-11-09 05:26:37.25479+00 |
| description | See 'calamine' crate. Contact me for 'office' ownership |
| homepage | |
| repository | https://github.com/tafia/calamine |
| max_upload_size | |
| id | 7165 |
| size | 195,636 |
A Excel file reader, in pure Rust.
office is a pure Rust library to read any excel file (xls, xlsx, xlsm, xlsb).
As long as your files are simple enough, this library should just work. For anything else, please file an issue with a failing test or send a pull request!
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 VbaProject");
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:
Many (most) part of the specifications are not implemented, the focus has been put on reading cell values and vba code.
The main unsupported items are:
Thanks to xlsx-js developpers! This library is by far the simplest open source implementation I could find and helps making sense out of official documentation.
MIT