A Python library to write XLSB files.
Project description
Python XLSB Writer
A Python library for writing large data sets to XLSB files efficiently.
Installation
pip install pyxlsbwriter
Usage
Basic Example
from pyxlsbwriter import XlsbWriter
import datetime
from decimal import Decimal
data = [
["Name", "Age", "City", "info"],
[-123, 2147483647, 2147483648, 2147483999],
["x", "y", "z", datetime.datetime.today()],
["Alice", 25, "New York", datetime.date.today()],
["Bob", 30, "London", Decimal(3.14)],
["Charlie", 35, "Paris", datetime.datetime.now()],
[True, False, None, datetime.datetime.utcnow()]
]
# Initialize writer with a specific compression level
with XlsbWriter("output.xlsb", compressionLevel=6) as writer:
# Add a visible sheet
writer.add_sheet("Visible Sheet")
writer.write_sheet(data)
# Add a hidden sheet
writer.add_sheet("Hidden Sheet", hidden=True)
writer.write_sheet([["This sheet is hidden."]])
Streaming from a Database (ODBC)
This example shows how to stream data directly from a database query into an XLSB file. This is highly memory-efficient as it doesn't load the entire dataset into memory.
First, ensure you have pyodbc installed:
pip install pyodbc
Then, you can use a generator function to feed data to XlsbWriter.
import os
import pyodbc
from typing import Generator
from pyxlsbwriter import XlsbWriter
# --- Configuration ---
# Make sure you have an ODBC driver and a configured DSN, or use a DSN-less connection string.
DSN = "DRIVER={Your ODBC Driver};SERVER=your_server;DATABASE=your_db;UID=your_user;PWD=your_password"
QUERY = "SELECT * FROM YourTable"
OUTPUT_FILENAME = "db_output.xlsb"
def row_generator(cursor: pyodbc.Cursor) -> Generator[list[any], None, None]:
"""
Generates rows from a pyodbc cursor, yielding headers first, followed by data rows.
"""
# Extract column headers from cursor description
headers = [column[0] for column in cursor.description]
yield headers
# Yield each row until the cursor is exhausted
while row := cursor.fetchone():
yield list(row)
# --- Main Execution ---
try:
# Connect to the database
with pyodbc.connect(DSN) as conn:
cursor = conn.cursor()
cursor.execute(QUERY)
# Use XlsbWriter to write the data stream
with XlsbWriter(OUTPUT_FILENAME) as writer:
writer.add_sheet("Database Export")
writer.write_sheet(row_generator(cursor))
# You can also add hidden sheets with metadata, like the query itself
writer.add_sheet("SQL Query", hidden=True)
writer.write_sheet([["SQL"], [QUERY]])
print(f"Successfully created '{OUTPUT_FILENAME}'")
except pyodbc.Error as ex:
sqlstate = ex.args[0]
print(f"Database connection or query execution error: {sqlstate}\n{ex}")
except Exception as e:
print(f"An unexpected error occurred: {e}")
Performance
pyxlsbwriter is designed for high performance, especially when writing large datasets. The binary .xlsb format is significantly more compact and faster to write compared to the standard XML-based .xlsx format.
A benchmark was performed by streaming approximately 60,855 rows from a database into a file using both pyxlsbwriter and xlsxwriter (in constant_memory mode for a fair comparison).
| Library | Time Taken | File Size |
|---|---|---|
pyxlsbwriter |
1.69s | 2.59 MB |
xlsxwriter |
5.84s | 6.73 MB |
In this test, pyxlsbwriter was ~3.5x faster and produced a file that was ~2.6x smaller.
You can run this benchmark yourself using the script located in examples/benchmark.py.
Project details
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file pyxlsbwriter-0.0.2.tar.gz.
File metadata
- Download URL: pyxlsbwriter-0.0.2.tar.gz
- Upload date:
- Size: 13.0 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.13.2
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
3fbbae91fcfe8d353154ad2f7ac6572f4fa61f006077d8d08c29ff8fd32fd8db
|
|
| MD5 |
cdcc7a082c9161b34f1f984f1c0f809e
|
|
| BLAKE2b-256 |
3b34601b5694f8a43ff7ad32633d5ebdf6f5b58c8d1292f72233bc0c6e3b27a0
|
File details
Details for the file pyxlsbwriter-0.0.2-py3-none-any.whl.
File metadata
- Download URL: pyxlsbwriter-0.0.2-py3-none-any.whl
- Upload date:
- Size: 9.9 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.13.2
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
f2499fe320469c549cc8dd2273d789c20096005f6910298c4ee894648f9e201b
|
|
| MD5 |
b5190699e511244e9af32d324a0481a2
|
|
| BLAKE2b-256 |
9c073365b468e70bc7b2d28022f66173a50a1826320f4eb3ccbb706caa37f6f9
|