2 个版本

使用旧的 Rust 2015

0.8.2 2016年11月9日
0.8.1 2016年11月8日
0.8.0 2016年11月8日

#5 in #vba

Download history • Rust 包仓库 81/week @ 2024-03-14 • Rust 包仓库 169/week @ 2024-03-21 • Rust 包仓库 537/week @ 2024-03-28 • Rust 包仓库 131/week @ 2024-04-04 • Rust 包仓库 140/week @ 2024-04-11 • Rust 包仓库 71/week @ 2024-04-18 • Rust 包仓库 78/week @ 2024-04-25 • Rust 包仓库 52/week @ 2024-05-02 • Rust 包仓库 33/week @ 2024-05-09 • Rust 包仓库 61/week @ 2024-05-16 • Rust 包仓库 70/week @ 2024-05-23 • Rust 包仓库 44/week @ 2024-05-30 • Rust 包仓库 47/week @ 2024-06-06 • Rust 包仓库 41/week @ 2024-06-13 • Rust 包仓库 93/week @ 2024-06-20 • Rust 包仓库 47/week @ 2024-06-27 • Rust 包仓库

232 每月下载量

MIT 许可证

74KB
1.5K SLoC

包含 (Zip 文件, 18KB) tests/issues.xlsb

office

一个纯 Rust 编写的 Excel 文件读取器。

Build Status Build status

文档

描述

office 是一个纯 Rust 库,用于读取任何 Excel 文件(xlsxlsxxlsmxlsb)。

只要你的文件足够简单,这个库应该就能正常工作。对于其他情况,请提交一个包含失败测试用例或发送一个 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);
        }
    }
}

其他

浏览 示例目录

性能

虽然没有官方基准测试,但我的初步测试显示,与官方 C# 库相比,性能有显著提升

  • 读取单元格值:至少快 3 倍
  • 读取 VBA 代码:office 在打开你的工作簿时不会读取所有工作表,这并不公平

不支持

很多(大多数)规范部分都没有实现,重点放在读取单元格 VBA 代码上。

主要不支持的项目包括

  • 不支持写入 Excel 文件,这是一个只读库
  • 不支持读取额外内容,例如格式、Excel 参数、加密组件等 ...
  • 不支持解码 MBSC VBA 代码,仅尝试将其解码为正常的 utf8,这在大多数情况下是可行的,但并不准确

致谢

感谢 xlsx-js 开发者!这个库是目前我能找到的最简单的开源实现,有助于理解官方文档。

许可证

MIT

依赖

~5.5MB
~91K SLoC