Skip to content

Latest commit

 

History

History
143 lines (99 loc) · 5.91 KB

File metadata and controls

143 lines (99 loc) · 5.91 KB

MiniExcel pour Rust

English | 简体中文 | 繁體中文 | 日本語 | Español

Crates.io Téléchargements Documentation CI GitHub Stars Licence

Traitement XLSX et CSV rapide, avec mémoire bornée.


Ce projet fait partie de l'écosystème MiniExcel et utilise la bibliothèque .NET comme référence de compatibilité.


Ouvrir Browser Lab pour inspecter ou générer des XLSX localement. Les données restent dans le navigateur.


Présentation

MiniExcel pour Rust est une bibliothèque de lecture/écriture XLSX et CSV avec flux à mémoire bornée, Serde, analyse et exports RAG.

Installation

cargo add miniexcel

Nécessite Rust 1.85.0 ou ultérieur.

Package .NET

Le dépôt construit également le package NuGet préliminaire MiniExcel.Rust. Il dépend exactement de MiniExcel v1 1.46.0, réutilise ses types de configuration et de mapping, et transmet les appels MiniExcelRust à la bibliothèque native 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 utilise l'implémentation managée d'origine ; MiniExcelRust.Query utilise le backend Rust. Construisez et testez un package local avec ./scripts/dotnet/Test-Package.ps1 -Rid win-x64.

Démarrage Rapide

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

Capacités

  • Requêtes dynamiques, typées, structurées, Table et CSV à mémoire bornée.
  • API par chemin, octets et reader/writer emprunté.
  • Lecture/écriture Serde, helpers date/heure et mapping de cells précis.
  • Création multi-feuilles, options de format et visibilité.
  • Ajout/remplacement, renommage, ordre, copie et visibilité atomiques des feuilles.
  • Templates, blocs conditionnels/groupés et fusion pilotée par marqueurs.
  • Analyses groupées en flux avec limites explicites.
  • Exports JSONL et Markdown adressés à la source pour LLM/RAG.
  • Streams async optionnels et indépendants du runtime ; ZIP/XML/filesystem restent bloquants.

Sémantique Clé

  • Les requêtes par chemin lisent le XML en flux sans conserver toutes les lignes.
  • La feuille par défaut est la première, pas l'onglet actif.
  • La lecture renvoie les valeurs de formule en cache ; la lecture structurée expose aussi texte et formats. MiniExcel ne calcule pas les formules.
  • Save crée un workbook et refuse les chemins existants par défaut ; Insert modifie les .xlsx atomiquement après validation.
  • Les grandes shared strings peuvent utiliser des fichiers temporaires indexés ; les requêtes bytes/WASM les gardent en mémoire.
  • Non pris en charge : .xls, .xlsb, .ods, macros, création d'images, calcul de formules ou système général de styles.

Voir la matrice de compatibilité, le contrat analyse/RAG et le guide de migration Insert.

Benchmark Rust Et .NET

Derniers Résultats NuGet

Le dernier test Windows x64 compare MiniExcel 1.46.0, le wrapper .NET MiniExcel.Rust 0.1.0-preview.2 et MiniExcel Rust 0.4.0 natif sur un workbook avec dimension déclarée de 100 000 lignes x 10 colonnes, avec cinq processus neufs par runtime et scénario. Toutes les valeurs sont vérifiées avant la mesure.

Scénario Runtime Temps médian Lignes/s Première ligne Allocation managée Working set maximal
Cold MiniExcel 2 145,90 ms 46 600 38,77 ms 1 167,07 MB 51,26 MB
Cold MiniExcel.Rust (.NET) 1 047,67 ms 95 450 12,05 ms 107,04 MB 44,59 MB
Cold MiniExcel.Rust 855,09 ms 116 947 0,42 ms n/a 3,70 MB
Steady MiniExcel 4 341,55 ms 69 100 3,95 ms 3 500,58 MB 54,74 MB
Steady MiniExcel.Rust (.NET) 2 972,94 ms 100 910 5,50 ms 321,09 MB 48,08 MB
Steady MiniExcel.Rust 2 143,31 ms 139 970 0,41 ms n/a 3,79 MB

Pour une Query complète, preview.2 est 2,05 fois plus rapide en Cold et 1,46 fois plus rapide en Steady que MiniExcel v1, avec 90,8 % d'allocation managée en moins dans les deux scénarios.

Les résultats dépendent de la machine. Relancez pwsh ./scripts/compare-nuget-v1-rust.ps1 sur des workbooks représentatifs ; voir la méthodologie.

Placez ce dépôt à côté de .NET MiniExcel, puis exécutez :

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

Le rapport est écrit dans target/benchmarks/dotnet-v1-vs-rust.json. Comparez uniquement des résultats de la même machine ; voir la méthodologie.