2 个版本
使用旧的 Rust 2015
0.8.2 |
|
---|---|
0.8.1 | 2016年11月8日 |
0.8.0 | 2016年11月8日 |
#5 in #vba
232 每月下载量
74KB
1.5K SLoC
包含 (Zip 文件, 18KB) tests/issues.xlsb
office
一个纯 Rust 编写的 Excel 文件读取器。
描述
office 是一个纯 Rust 库,用于读取任何 Excel 文件(xls
、xlsx
、xlsm
、xlsb
)。
只要你的文件足够简单,这个库应该就能正常工作。对于其他情况,请提交一个包含失败测试用例或发送一个 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