Skip to content

Latest commit

 

History

History
84 lines (61 loc) · 2.64 KB

README.md

File metadata and controls

84 lines (61 loc) · 2.64 KB

office

A Excel file reader, in Rust.

Build Status Build status

Description

office is a pure Rust library to process excel files.

As long as your files are simple enough, this library should just work.

Examples

Simple

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]);
}

More complex

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);
        }
    }
}

Others

Browse the examples directory.

Performance

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

Warning

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.

Unsupported

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

License

MIT