MiniExcel for Rust

September 10, 2026 · View on GitHub

MiniExcel for Rust

English | 简体中文 | 繁體中文 | Français | Español

Crates.io ダウンロード ドキュメント CI GitHub Stars ライセンス

高速かつ省メモリな XLSX/CSV 処理。


MiniExcel プロジェクトファミリーの一員であり、.NET ライブラリを互換性の基準としています。


Browser Lab を開く と、XLSX をブラウザー内で確認・生成できます。データはブラウザー外へ送信されません。


はじめに

MiniExcel for Rust は、有界メモリストリーミング、Serde、分析、RAG エクスポートに対応する XLSX/CSV reader/writer です。

インストール

cargo add miniexcel

Rust 1.85.0 以降が必要です。

.NET パッケージ

このリポジトリはプレビュー版 MiniExcel.Rust NuGet パッケージもビルドします。MiniExcel v1 1.46.0 に固定して依存し、その設定型と mapping 型を再利用しながら、 MiniExcelRust の呼び出しを Rust ネイティブライブラリで実行します。

dotnet add package MiniExcel.Rust --version 0.1.0-preview.2
using MiniExcelLibs;
using MiniExcelLibs.OpenXml;

var rows = MiniExcelRust.Query(
    "book.xlsx",
    useHeaderRow: true,
    configuration: new OpenXmlConfiguration { IgnoreEmptyRows = true });

MiniExcel.Query は元の managed 実装を、MiniExcelRust.Query は Rust backend を使用します。 ローカルパッケージは ./scripts/dotnet/Test-Package.ps1 -Rid win-x64 でビルドして検証できます。

クイックスタート

use miniexcel::MiniExcel;

for row in MiniExcel::query("book.xlsx")? {
    println!("{:?}", row?["A"]);
}
use miniexcel::{CellValue, DynamicRow, MiniExcel};

let mut row = DynamicRow::new();
row.insert("Name".into(), CellValue::String("MiniExcel".into()));
MiniExcel::save_as("book.xlsx", &[row])?;

主な機能

  • 動的、型付き、構造化、Table、CSV の有界メモリクエリ。
  • Path、bytes、borrowed reader/writer API。
  • Serde 読み書き、日時 helper、exact-cell mapping。
  • 複数 worksheet 作成、format option、visibility。
  • Worksheet の原子的な追加/置換、rename、reorder、copy、visibility 変更。
  • Template、条件/グループ block、marker ベースの cell merge。
  • 明示的な上限を持つ streaming grouped analytics。
  • LLM/RAG 向けソースアドレス付き JSONL・Markdown export。
  • 任意の runtime-neutral async stream。ZIP/XML/filesystem 処理は blocking のまま。

重要なセマンティクス

  • Path query は worksheet XML をストリーミングし、全行を保持しない。
  • 既定 worksheet は最初の worksheet で、active tab ではない。
  • 通常の読み取りは式の cache 値を返し、structured read は式テキストと format も返す。MiniExcel は式を計算しない。
  • Save は新しい workbook を作成し、既定で既存 path を拒否する。Insert は検証後に .xlsx を原子的に変更する。
  • 大きな shared-string table は indexed temporary file に spill できる。Bytes/WASM query はメモリに保持する。
  • 未対応:.xls、.xlsb、.ods、macro、画像作成、式計算、汎用 style system。

互換性マトリクス、分析/RAG contract、Insert migration guide を参照してください。

Rust と .NET の Benchmark

最新 NuGet 結果

最新の Windows x64 テストでは、dimension を宣言した 100,000 行 x 10 列の workbook で MiniExcel 1.46.0、.NET wrapper MiniExcel.Rust 0.1.0-preview.2、native MiniExcel Rust 0.4.0 を比較しました。 runtime とシナリオごとに 5 個の新規 process を使用し、計測前にすべての値を検証しています。

シナリオRuntime中央値行/秒最初の行Managed allocationPeak working set
ColdMiniExcel2,145.90 ms46,60038.77 ms1,167.07 MB51.26 MB
ColdMiniExcel.Rust (.NET)1,047.67 ms95,45012.05 ms107.04 MB44.59 MB
ColdMiniExcel.Rust855.09 ms116,9470.42 msn/a3.70 MB
SteadyMiniExcel4,341.55 ms69,1003.95 ms3,500.58 MB54.74 MB
SteadyMiniExcel.Rust (.NET)2,972.94 ms100,9105.50 ms321.09 MB48.08 MB
SteadyMiniExcel.Rust2,143.31 ms139,9700.41 msn/a3.79 MB

完全な Query では、preview.2 は MiniExcel v1 より Cold で 2.05 倍、Steady で 1.46 倍高速で、 managed allocation は両シナリオで 90.8% 少なくなりました。

結果はマシンに依存します。代表的な workbook で pwsh ./scripts/compare-nuget-v1-rust.ps1 を実行し、 測定方法を参照してください。

このリポジトリを .NET MiniExcel と隣接配置して実行します。

pwsh ./scripts/compare-dotnet-v1-rust.ps1 -DotNetRepository D:\git\MiniExcel

レポートは target/benchmarks/dotnet-v1-vs-rust.json に出力されます。同一マシンの結果だけを比較し、測定方法を参照してください。