Crates.io | office |
lib.rs | office |
version | 0.8.2 |
source | src |
created_at | 2016-11-08 01:21:47.116387 |
updated_at | 2016-11-09 05:26:37.25479 |
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