Dump Excel (.xlsx) physical structure to JSON
Project description
xldump
A Python library and CLI tool that dumps the physical structure of Excel (.xlsx) files to JSON.
The core value is a wrapper that converts openpyxl Cell objects into structured dict/JSON.
Features
- Deterministic & Reproducible: Extracts only physical structure without using LLM
- openpyxl Compatible: Field names aligned with openpyxl attribute names
- Flexible Output Options: Individual control for styles, values, merges, borders, validations, and images
- NDA-Safe Mode: Use
--no-valuesto exclude cell values and safely extract only style structure
Installation
pip install xldump
Or using uv:
uv add xldump
CLI Usage
# List sheets
xldump scan design_doc.xlsx
# Dump all sheets
xldump dump design_doc.xlsx
# Specific sheets only
xldump dump design_doc.xlsx -s "Sheet1" "Sheet2"
# Style-only mode (no values = NDA-safe)
xldump dump design_doc.xlsx --no-values
# Output to file
xldump dump design_doc.xlsx -o output.json
# Compact output
xldump dump design_doc.xlsx --compact
Library Usage
import xldump
# Get sheet list (lightweight & fast)
sheets = xldump.scan("design_doc.xlsx")
for sheet in sheets:
print(f"{sheet.name}: {sheet.max_row} rows x {sheet.max_column} cols")
# Dump entire workbook
workbook = xldump.dump("design_doc.xlsx")
print(workbook.to_dict())
# Dump single sheet
sheet = xldump.dump_sheet("design_doc.xlsx", "Sheet1")
print(sheet.to_dict())
# With options
workbook = xldump.dump(
"design_doc.xlsx",
sheets=["Sheet1", "Sheet2"], # Target sheets
include_styles=True, # Style information
include_values=True, # Cell values
include_merges=True, # Merged cell information
include_borders=True, # Border information
include_validations=True, # Data validations
include_images=True, # Image position information
data_only=False, # Get calculated results instead of formulas
)
Output Examples
scan output
{
"file": "design_doc.xlsx",
"sheet_count": 3,
"sheets": [
{
"name": "Design",
"index": 0,
"dimensions": "A1:F30",
"max_row": 30,
"max_column": 6,
"merged_cell_count": 12,
"has_images": true,
"has_data_validations": true
}
]
}
dump output
{
"file": "design_doc.xlsx",
"sheets": [
{
"name": "Design",
"index": 0,
"dimensions": "A1:F30",
"merged_cells": [
{
"range": "A1:D1",
"min_row": 1, "max_row": 1,
"min_col": 1, "max_col": 4
}
],
"rows": {
"1": {
"A": {
"coordinate": "A1",
"value": "1. System Overview",
"data_type": "s",
"style": {
"font": {
"name": "Arial",
"size": 14.0,
"bold": true
},
"fill": {
"type": "solid",
"fg_color": "FF4472C4"
}
}
}
}
}
}
]
}
Development
# Clone repository
git clone https://github.com/xlbone/xldump.git
cd xldump
# Install dependencies
uv sync --all-groups
# Run tests
poe test
# Run all checks
poe check
Notes
- Only
.xlsxformat is supported (legacy.xlsformat is not supported) data_only=Truereturns cached values from when the file was last opened in Excel. ReturnsNoneif not calculated
License
MIT License
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
xldump-0.1.0.tar.gz
(85.6 kB
view details)
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
xldump-0.1.0-py3-none-any.whl
(19.6 kB
view details)
File details
Details for the file xldump-0.1.0.tar.gz.
File metadata
- Download URL: xldump-0.1.0.tar.gz
- Upload date:
- Size: 85.6 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: uv/0.9.10 {"installer":{"name":"uv","version":"0.9.10"},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
c280b6442196eeb3a3cb7afb40d99ba412123380f6328fb45884072d1a18c354
|
|
| MD5 |
65f44819fa05928a3cd047449e18eea4
|
|
| BLAKE2b-256 |
fdaac883480e3604d54629b2ea95f5dcbdbea594977ceb80453dcbc64c37d273
|
File details
Details for the file xldump-0.1.0-py3-none-any.whl.
File metadata
- Download URL: xldump-0.1.0-py3-none-any.whl
- Upload date:
- Size: 19.6 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: uv/0.9.10 {"installer":{"name":"uv","version":"0.9.10"},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
0198e6fff3ffe8ae7e0f92571dabd3195bf7c85179732b3d661f3adadee436e3
|
|
| MD5 |
b5e26f6f0cdb6c00ecbefdfe50276149
|
|
| BLAKE2b-256 |
353a7ee17dfd9c40e4fd28620aae59e2ed5357b14d40f288c0e086c85a35a7d6
|