Librería alpha de lectura y escritura de .xlsx con núcleo Rust y bindings PyO3.
Estado: 0.1.0-alpha.1. La compatibilidad con openpyxl es parcial y deliberadamente limitada.
pip install dist/open_sheets-0.1.0a1-*.whlPython 3.9–3.13 está soportado por configuración; el wheel debe construirse para cada plataforma.
from open_sheets import Workbook, load_workbook
book = load_workbook("input.xlsx")
print(book.sheet_names)
for row in book["Sales"].iter_rows(values_only=True):
print(row)
out = Workbook()
sheet = out.active
sheet.title = "Sales"
sheet.append(["product", "quantity", "price"])
sheet.extend_rows([["Keyboard", 2, 40.5], ["Mouse", 3, 20]])
out.save("output.xlsx")read_only=True activa iteración incremental de filas: no materializa las filas ni crea objetos Python de todas ellas al abrir el archivo. La alpha mantiene el XML de cada worksheet seleccionado en memoria; el streaming directo desde el descriptor ZIP queda planificado.
| Característica | Estado |
|---|---|
| Hojas, celdas, filas y valores básicos | soportado |
| Shared strings, inline strings y fórmulas como texto | soportado |
| Lectura streaming real de worksheets | planificado |
| Fechas con estilos XLSX | parcialmente soportado |
| Escritura de strings, números, booleanos y vacíos | soportado |
| Fechas y datetimes | parcialmente soportado |
| Estilos, gráficos, imágenes, comentarios, macros, tablas dinámicas | no soportado |
.xls, evaluación de fórmulas, preservación perfecta de workbooks |
no soportado |
Las funciones no soportadas no deben interpretarse como compatibilidad total con openpyxl.
open-sheets-core contiene valores y coordenadas; open-sheets-xlsx resuelve ZIP, relaciones, XML, shared strings y serialización; open-sheets-python expone PyO3. La capa python/open_sheets mantiene el nombre de paquete público.
| KPI | open-sheets | openpyxl | Diferencia |
|---|---|---|---|
| Iteración completa · 100k filas | 0,3187 s | 4,0566 s | 12,7× más rápido |
| Primera fila · 100k filas | 0,0308 s | 1,0924 s | 35,4× más rápido |
| Serialización · 10k filas | 0,0555 s | 0,3890 s | 7,0× más rápido |
| Memoria · lectura 100k | 83,7 MB | 42,4 MB | pendiente de optimizar |
python benchmarks/generate_files.py
python -m pip install -r benchmarks/requirements.txt
python benchmarks/read_benchmark.py --repetitions 20 --warmups 3 --output benchmark-results/read.json
python benchmarks/write_benchmark.py --repetitions 20 --warmups 3 --output benchmark-results/write.json
python benchmarks/compatibility_audit.pyLos benchmarks endurecidos ejecutan cada implementación en un proceso separado, descartan warmups y reportan mediana, media, mínimo, máximo, desviación estándar y memoria máxima. Separan construcción del workbook, serialización a bytes y escritura a disco. Generan contenido determinista con strings, enteros, floats, booleanos y vacíos. La auditoría de estilos y metadata muestra explícitamente las limitaciones alpha.
Consulta el informe completo de benchmarks, la auditoría de compatibilidad y las instrucciones reproducibles. Los KPIs principales son 0,318682 s para iterar 100.000 filas, 0,055510 s para serializar 10.000 filas y equivalencia de valores/tipos en 10.000 filas. No se publican cifras parciales de 1.000.000 filas ni de escritura de 100.000 filas porque las baterías completas no terminaron en el entorno disponible.
0.2: estilos básicos, dimensiones, freeze panes, celdas combinadas y filtros. 0.3: edición segura y preservación de elementos desconocidos. 1.0: API estable, wheels multiplataforma, cobertura amplia y benchmarks públicos.
Consulta CONTRIBUTING.md, SECURITY.md y CHANGELOG.md. MIT.