Zum Inhalt springen

XLSX-Dateien mit Rust oder Python lesen, schreiben und bearbeiten.

CrabXL verwendet eine Rust-Engine für ein Rust-Crate und ein Python-Paket. Das Python-Paket folgt openpyxl. CrabXL liest große Tabellen mit begrenztem Speicher. Beim Speichern einer Änderung bleiben unveränderte Teile erhalten.

Installation

Verwenden Sie Rust 1.88 oder neuer.

Codebeispiele

In Rust beginnen Zeilen- und Spaltennummern bei null. In Python folgen unterstützte Aufrufe openpyxl. Für kompatiblen openpyxl-Code ändern Sie einen Import.

use crabxl::{CellAddress, CellValue, SaveOptions, WorkbookEditor, WorkbookReader};

fn main() -> crabxl::Result<()> {
    // Stream the cells that are present, row by row
    let mut workbook = WorkbookReader::open("input.xlsx")?;
    let mut rows = workbook.rows("Sheet1")?;
    while let Some(row) = rows.next_row()? {
        for cell in row.cells {
            println!("{:?}: {:?}", cell.address, cell.value);
        }
    }

    // Edit one value and keep everything else as it was
    let mut editor = WorkbookEditor::open("input.xlsx")?;
    editor.set_value("Sheet1", CellAddress::new(0, 0)?, CellValue::Integer(42))?;
    editor.save_path("output.xlsx", SaveOptions::default())?;
    Ok(())
}

Funktionen

#FunktionDetails
Zeilen streamen

CrabXL liest nur die Zellen, die die Datei enthält. Es liest sie in begrenzten Blöcken und behält ihre Positionen. Für ein ganzes Blatt im Speicher verwenden Sie read_sheet.

CrabXL liest nur die Zellen, die die Datei enthält. Es liest sie in begrenzten Blöcken und behält ihre Positionen. Für ein ganzes Blatt im Speicher verwenden Sie read_sheet.
Sequenziell schreiben

Schreiben Sie eine neue Arbeitsmappe Zeile für Zeile. In Python schreibt der Modus write only die Zeilen in eine temporäre Datei. Diese Arbeitsmappe speichern Sie einmal.

Schreiben Sie eine neue Arbeitsmappe Zeile für Zeile. In Python schreibt der Modus write only die Zeilen in eine temporäre Datei. Diese Arbeitsmappe speichern Sie einmal.
Dateien bearbeiten

Ändern Sie unterstützte Zellwerte und speichern Sie die Datei. Unveränderte Teile der Datei behalten ihre originalen Bytes.

Ändern Sie unterstützte Zellwerte und speichern Sie die Datei. Unveränderte Teile der Datei behalten ihre originalen Bytes.
Exakte Werte lesen

CrabXL liest exakte Ganzzahlen, Text, Rich Text, Datumswerte, Formatvorlagen und Formeldatensätze.

CrabXL liest exakte Ganzzahlen, Text, Rich Text, Datumswerte, Formatvorlagen und Formeldatensätze.
Speicher steuern

Legen Sie ein Speicherlimit fest oder verwenden Sie Auto. Auto wählt Streaming oder vollständiges Laden. Shared Strings bleiben im RAM oder auf der Festplatte.

Legen Sie ein Speicherlimit fest oder verwenden Sie Auto. Auto wählt Streaming oder vollständiges Laden. Shared Strings bleiben im RAM oder auf der Festplatte.
Kompression wählen

Wählen Sie eine Deflate-Stufe von 0 bis 9. Die Standardstufe ist 6. Das Standard-Backend ist zlib-rs, geschrieben in Rust. Natives zlib ist ein optionales Feature.

Wählen Sie eine Deflate-Stufe von 0 bis 9. Die Standardstufe ist 6. Das Standard-Backend ist zlib-rs, geschrieben in Rust. Natives zlib ist ein optionales Feature.
Von openpyxl umsteigen

Für kompatiblen Code schreiben Sie import crabxl as openpyxl. CrabXL benötigt openpyxl zur Laufzeit nicht.

Für kompatiblen Code schreiben Sie import crabxl as openpyxl. CrabXL benötigt openpyxl zur Laufzeit nicht.

Benchmarks

In diesem Test las CrabXL ein numerisches Blatt mit zehn Spalten. Der Spitzenspeicher blieb bei jeder Größe nahe 1,5 MiB. Bei einer Million Zeilen war CrabXL etwa 8,1-mal schneller als openpyxl. Es war etwa 2,2-mal langsamer als calamine.

Eine Million Zeilen mal zehn Spalten

Spitzenspeicher
  • CrabXL1,50 MiB
  • openpyxl119,25 MiB
  • calamine688,43 MiB
Laufzeit
  • CrabXL6,943 s
  • openpyxl56,569 s
  • calamine3,103 s
Median der Laufzeit und des Spitzenspeichers beim vollständigen numerischen Lesen
ZeilenCrabXLopenpyxlcalamine
LaufzeitSpitzenspeicherLaufzeitSpitzenspeicherLaufzeitSpitzenspeicher
10.0000,072 s1,52 MiB0,538 s33,80 MiB0,032 s8,54 MiB
100.0000,713 s1,54 MiB4,382 s41,68 MiB0,316 s70,42 MiB
1.000.0006,943 s1,50 MiB56,569 s119,25 MiB3,103 s688,43 MiB

Testbedingungen: Rust 1.88 Release-Build, Python 3.12, openpyxl 3.1.5 im Modus read only und calamine 0.36.1. Der Rechner lief mit Linux x86_64 auf einem AMD EPYC 9V74. Jede Größe hatte einen Aufwärmlauf und fünf Messläufe. Die Laufzeit enthält den Prozessstart. Text, Formatvorlagen, Formeln, Bearbeitungen und Bindings misst dieser Test nicht.

Rohdaten und Methode lesen

Aktueller Stand

Wenn CrabXL eine Operation nicht unterstützt, gibt es einen Fehler zurück. Lesen Sie die Roadmap, bevor Sie eine Funktion produktiv einsetzen.

Roadmap lesen

Funktioniert heute

  • Streaming-Lesen und vollständige Blatt-Snapshots
  • Sequenzielles Schreiben und Modus write only
  • Wertänderungen, die unveränderte Teile behalten
  • openpyxl-Aufrufe für unterstützte Operationen

Noch nicht

  • Formelberechnung
  • Vollständige openpyxl-Kompatibilität
  • Vollständige Objekte für Formatvorlagen und Rich Text
  • Erweiterte Blattfunktionen und einige Strukturänderungen

Plattformen

Rust
Rust 1.88 oder neuer
Python
CPython 3.11 bis 3.15 auf Linux x86_64 und ARM64, Windows x86_64 sowie macOS auf Intel und Apple Silicon