Python bindings for OpenXLSX using nanobind
Project description
[!IMPORTANT]
pyopenxlsxcurrently uses a specialized fork of the OpenXLSX library (v1.0.0+), which includes critical performance optimizations and functional enhancements (such as custom properties and improved hyperlink handling) not currently available in the upstream repository.
pyopenxlsx is a high-performance Python binding for the OpenXLSX C++ library. It aims to provide significantly faster read/write speeds compared to pure Python libraries like openpyxl, while maintaining a Pythonic API design.
Core Features
- High Performance: Powered by the modern C++17 OpenXLSX library.
- Pythonic API: Intuitive interface with properties, iterators, and context managers.
- Async Support:
async/awaitsupport for key I/O operations. - Rich Styling: Comprehensive support for fonts, fills, borders, alignments, and number formats.
- Extended Metadata: Support for both standard and custom document properties.
- Advanced Content: Support for images, hyperlinks (external/internal), and comments.
- Memory Safety: Combines C++ efficiency with Python's automatic memory management.
Tech Stack
| Component | Technology |
|---|---|
| C++ Core | OpenXLSX |
| Bindings | nanobind |
| Build System | scikit-build-core & CMake |
Installation
From PyPI (Recommended)
# Using pip
pip install pyopenxlsx
# Using uv
uv pip install pyopenxlsx
From Source
# Using uv
uv pip install .
# Or using pip
pip install .
Development Installation
uv pip install -e .
Quick Start
Create and Save a Workbook
from pyopenxlsx import Workbook
# Create a new workbook
with Workbook() as wb:
ws = wb.active
ws.title = "MySheet"
# Write data
ws["A1"].value = "Hello"
ws["B1"].value = 42
ws.cell(row=2, column=1).value = 3.14
# Save
wb.save("example.xlsx")
Custom Properties
from pyopenxlsx import Workbook
with Workbook() as wb:
# Set custom document properties
wb.custom_properties["Author"] = "Curry Tang"
wb.custom_properties["Project"] = "PyOpenXLSX"
wb.save("props.xlsx")
Hyperlinks
from pyopenxlsx import Workbook
with Workbook() as wb:
ws = wb.active
ws["A1"].value = "Google"
# External link
ws.add_hyperlink("A1", "https://www.google.com", tooltip="Search")
# Internal link to another sheet
ws2 = wb.create_sheet("Data")
ws["A2"].value = "See Data"
ws.add_internal_hyperlink("A2", "Data!A1")
wb.save("links.xlsx")
Read a Workbook
from pyopenxlsx import load_workbook
wb = load_workbook("example.xlsx")
ws = wb["MySheet"]
print(ws["A1"].value) # Output: Hello
wb.close()
Async Operations
pyopenxlsx provides async/await support for all I/O-intensive operations, ensuring your event loop remains responsive.
import asyncio
from pyopenxlsx import Workbook, load_workbook_async, Font
async def main():
# 1. Async context manager for automatic cleanup
async with Workbook() as wb:
ws = wb.active
ws["A1"].value = "Async Data"
# 2. Async stylesheet creation
style_idx = await wb.add_style_async(font=Font(bold=True))
ws["A1"].style_index = style_idx
# 3. Async worksheet operations
new_ws = await wb.create_sheet_async("AsyncSheet")
await new_ws.append_async(["Dynamic", "Row", 123])
# 4. Async range operations
await new_ws.range("A1:C1").clear_async()
# 5. Async save
await wb.save_async("async_example.xlsx")
# 6. Async load
async with await load_workbook_async("async_example.xlsx") as wb:
ws = wb.active
print(ws["A1"].value)
# 7. Async protection
await ws.protect_async(password="secret")
await ws.unprotect_async()
asyncio.run(main())
Styling
from pyopenxlsx import Workbook, Font, Fill, Border, Side, Alignment
wb = Workbook()
ws = wb.active
# Define styles using hex colors (ARGB) or names
# Hex colors can be 6-digit (RRGGBB) or 8-digit (AARRGGBB)
font = Font(name="Arial", size=14, bold=True, color="FF0000") # Red
fill = Fill(pattern_type="solid", color="FFFF00") # Yellow
border = Border(
left=Side(style="thin", color="000000"),
right=Side(style="thin"),
top=Side(style="thick"),
bottom=Side(style="thin")
)
alignment = Alignment(horizontal="center", vertical="center", wrap_text=True)
# Apply style
style_idx = wb.add_style(font=font, fill=fill, border=border, alignment=alignment)
ws["A1"].value = "Styled Cell"
ws["A1"].style_index = style_idx
wb.save("styles.xlsx")
Pivot Tables
Create dynamic pivot tables based on worksheet data.
from pyopenxlsx import Workbook
from pyopenxlsx._openxlsx import XLPivotTableOptions, XLPivotField, XLPivotSubtotal
with Workbook() as wb:
# 1. Write source data
ws = wb.active
ws.title = "SalesData"
ws.write_row(1, ["Region", "Product", "Sales"])
ws.write_rows(2, [
["North", "Apples", 100],
["South", "Bananas", 300],
["North", "Oranges", 150]
])
# 2. Create a separate sheet for the Pivot Table
ws_pivot = wb.create_sheet("PivotSheet")
# 3. Configure options
options = XLPivotTableOptions()
options.name = "SalesPivot"
options.source_range = "SalesData!A1:C4"
options.target_cell = "A3" # Note: Target cell must NOT include sheet name
# 4. Define fields
r = XLPivotField()
r.name = "Region"
r.subtotal = XLPivotSubtotal.Sum
options.rows = [r]
c = XLPivotField()
c.name = "Product"
c.subtotal = XLPivotSubtotal.Sum
options.columns = [c]
d = XLPivotField()
d.name = "Sales"
d.subtotal = XLPivotSubtotal.Sum
d.custom_name = "Total Sales"
options.data = [d]
# 5. Add to the new sheet
ws_pivot._sheet.add_pivot_table(options)
wb.save("pivot.xlsx")
Insert Images
from pyopenxlsx import Workbook
wb = Workbook()
ws = wb.active
# Insert image at A1, automatically maintaining aspect ratio
# Requires Pillow: pip install pillow
ws.add_image("logo.png", anchor="A1", width=200)
# Or specify exact dimensions
ws.add_image("banner.jpg", anchor="B5", width=400, height=100)
wb.save("images.xlsx")
Comments
Comments are automatically resized to fit their content by default.
from pyopenxlsx import Workbook
wb = Workbook()
ws = wb.active
# Simple or multiline comments - all will auto-size perfectly
ws["A1"].comment = "Short comment"
ws["B2"].comment = "Line 1: High performance\nLine 2: Pythonic API\nLine 3: Auto-sized by default!"
wb.save("comments.xlsx")
Conditional Formatting
Highlight specific data using visual rules like color scales and data bars.
from pyopenxlsx import Workbook
from pyopenxlsx._openxlsx import XLColorScaleRule, XLDataBarRule, XLColor
wb = Workbook()
ws = wb.active
ws.write_rows(1, [[1, 2, 3], [4, 5, 6], [7, 8, 9]])
# 1. Color Scale Rule (Red to Green)
scale_rule = XLColorScaleRule(XLColor(255, 0, 0), XLColor(0, 255, 0))
ws.add_conditional_formatting("A1:C1", scale_rule)
# 2. Data Bar Rule (Blue bars)
bar_rule = XLDataBarRule(XLColor(0, 0, 255), show_value_text=True)
ws.add_conditional_formatting("A2:C2", bar_rule)
wb.save("conditional_formatting.xlsx")
High Performance Streams (Low Memory I/O)
For writing massive datasets without consuming memory for Python objects, use the direct stream writer.
from pyopenxlsx import Workbook
with Workbook() as wb:
ws = wb.active
# Open a direct XML stream writer
writer = ws.stream_writer()
writer.append_row(["ID", "Timestamp", "Value"])
for i in range(1_000_000):
# Writes directly to disk/archive; highly memory efficient
writer.append_row([i, "2023-01-01", 99.9])
writer.close()
wb.save("massive_data.xlsx")
API Documentation
The full API documentation has been split into individual modules for easier reading. Please refer to the docs/ directory:
- Workbook API
- Worksheet API
- Cell & Range API
- Styles API
- Data Validation API
- Tables (ListObjects) API
- Pivot Tables API
- Rich Text & Comments API
- Async Operations API
- Conditional Formatting API
- Streams I/O API
- Charts API
- Page Setup & Printing API
- Images API
Performance
pyopenxlsx is built for speed. By leveraging the C++ OpenXLSX engine and providing optimized bulk operations, it significantly outperforms pure-Python alternatives.
Benchmarks (pyopenxlsx vs openpyxl)
| Scenario | pyopenxlsx | openpyxl | Speedup |
|---|---|---|---|
| Read (20,000 cells) | ~7.2ms | ~145ms | 20.2x |
| Write (1,000 cells) | ~4.8ms | ~8.1ms | 1.7x |
| Write (50,000 cells) | ~169ms | ~305ms | 1.8x |
| Bulk Write (50,000 cells) | ~74ms | N/A | 4.1x |
| Iteration (20,000 cells) | ~80ms | ~150ms | 1.9x |
| Bulk Write (1,000,000 cells) | ~1.5s | ~6.2s | 4.1x |
Resource Usage (1,000,000 cells)
| Library | Execution Time | Memory Delta | CPU Load |
|---|---|---|---|
| pyopenxlsx | ~1.5s | ~400 MB | ~99% |
| openpyxl | ~6.2s | ~600 MB* | ~99% |
[!NOTE] *Memory delta for
openpyxlcan be misleading due to Python's garbage collection timing during the benchmark. However,pyopenxlsxconsistently shows lower memory pressure for bulk operations as data is handled primarily in C++.
Why is it faster?
- C++ Foundation: Core operations happen in highly optimized C++.
- Reduced Object Overhead:
pyopenxlsxminimizes the creation of many PythonCellobjects during bulk operations. - Efficient Memory Mapping: Leverages the memory-efficient design of OpenXLSX.
- Asynchronous I/O: Key operations are available as non-blocking coroutines to maximize throughput in concurrent applications.
Development
Run Tests
# Run all tests
uv run pytest
# With coverage
uv run pytest --cov=src/pyopenxlsx --cov-report=term-missing
License
BSD 3-Clause License. The underlying OpenXLSX library is licensed under the MIT License, and nanobind under a BSD-style 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
Built Distributions
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 pyopenxlsx-1.0.0.tar.gz.
File metadata
- Download URL: pyopenxlsx-1.0.0.tar.gz
- Upload date:
- Size: 2.8 MB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
c836a1c4247e416b2186197d3957fb15b13490ef1fa9625b2ad5b0f75ccd2d31
|
|
| MD5 |
16c251eba4b900707bf65aba8f56707a
|
|
| BLAKE2b-256 |
35ccc9efca5b08549fc1a1fd1d2cda14b4fc41337ab505336ab742d3a45da4ec
|
Provenance
The following attestation bundles were made for pyopenxlsx-1.0.0.tar.gz:
Publisher:
build.yml on twn39/pyopenxlsx
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
pyopenxlsx-1.0.0.tar.gz -
Subject digest:
c836a1c4247e416b2186197d3957fb15b13490ef1fa9625b2ad5b0f75ccd2d31 - Sigstore transparency entry: 1162296835
- Sigstore integration time:
-
Permalink:
twn39/pyopenxlsx@b1cada510f22f19125a04b8b3e2dd278e12adae0 -
Branch / Tag:
refs/tags/v1.0.0 - Owner: https://github.com/twn39
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
build.yml@b1cada510f22f19125a04b8b3e2dd278e12adae0 -
Trigger Event:
push
-
Statement type:
File details
Details for the file pyopenxlsx-1.0.0-cp314-cp314-win_amd64.whl.
File metadata
- Download URL: pyopenxlsx-1.0.0-cp314-cp314-win_amd64.whl
- Upload date:
- Size: 885.1 kB
- Tags: CPython 3.14, Windows x86-64
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
91f7969974ca8bb7eae7adb34d46201317b621b94ae4d0e75569cbf05dd888cb
|
|
| MD5 |
6d551ad2015a31c519722d77d5c10b82
|
|
| BLAKE2b-256 |
5f746b2b2591b71b3c74aae23f56d0a176e9fb5c01122783a6d7d6d79c632a59
|
Provenance
The following attestation bundles were made for pyopenxlsx-1.0.0-cp314-cp314-win_amd64.whl:
Publisher:
build.yml on twn39/pyopenxlsx
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
pyopenxlsx-1.0.0-cp314-cp314-win_amd64.whl -
Subject digest:
91f7969974ca8bb7eae7adb34d46201317b621b94ae4d0e75569cbf05dd888cb - Sigstore transparency entry: 1162297011
- Sigstore integration time:
-
Permalink:
twn39/pyopenxlsx@b1cada510f22f19125a04b8b3e2dd278e12adae0 -
Branch / Tag:
refs/tags/v1.0.0 - Owner: https://github.com/twn39
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
build.yml@b1cada510f22f19125a04b8b3e2dd278e12adae0 -
Trigger Event:
push
-
Statement type:
File details
Details for the file pyopenxlsx-1.0.0-cp314-cp314-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl.
File metadata
- Download URL: pyopenxlsx-1.0.0-cp314-cp314-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
- Upload date:
- Size: 877.1 kB
- Tags: CPython 3.14, manylinux: glibc 2.27+ x86-64, manylinux: glibc 2.28+ x86-64
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
8a23bc5be8bf81c07150ee256b41453dc84421c38fb571e0a3abcb319317c989
|
|
| MD5 |
c96b046e95964919710d93d352fba969
|
|
| BLAKE2b-256 |
660a49c37ae2a8779e8927c3e0a7380ed2f54bd94a802b06183c1ee882ecc7cf
|
Provenance
The following attestation bundles were made for pyopenxlsx-1.0.0-cp314-cp314-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl:
Publisher:
build.yml on twn39/pyopenxlsx
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
pyopenxlsx-1.0.0-cp314-cp314-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl -
Subject digest:
8a23bc5be8bf81c07150ee256b41453dc84421c38fb571e0a3abcb319317c989 - Sigstore transparency entry: 1162296955
- Sigstore integration time:
-
Permalink:
twn39/pyopenxlsx@b1cada510f22f19125a04b8b3e2dd278e12adae0 -
Branch / Tag:
refs/tags/v1.0.0 - Owner: https://github.com/twn39
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
build.yml@b1cada510f22f19125a04b8b3e2dd278e12adae0 -
Trigger Event:
push
-
Statement type:
File details
Details for the file pyopenxlsx-1.0.0-cp314-cp314-macosx_11_0_arm64.whl.
File metadata
- Download URL: pyopenxlsx-1.0.0-cp314-cp314-macosx_11_0_arm64.whl
- Upload date:
- Size: 797.0 kB
- Tags: CPython 3.14, macOS 11.0+ ARM64
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
68a38385cf37582b2e78dd4c9f9cdc91e48cc1e0b96f5700f800f048efa88fe8
|
|
| MD5 |
db041c37f1dc9029d60aec43d281c707
|
|
| BLAKE2b-256 |
94180210e837b181ef0437373cea943d26ed5d0a06b991d34e5f596406bc60e0
|
Provenance
The following attestation bundles were made for pyopenxlsx-1.0.0-cp314-cp314-macosx_11_0_arm64.whl:
Publisher:
build.yml on twn39/pyopenxlsx
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
pyopenxlsx-1.0.0-cp314-cp314-macosx_11_0_arm64.whl -
Subject digest:
68a38385cf37582b2e78dd4c9f9cdc91e48cc1e0b96f5700f800f048efa88fe8 - Sigstore transparency entry: 1162297449
- Sigstore integration time:
-
Permalink:
twn39/pyopenxlsx@b1cada510f22f19125a04b8b3e2dd278e12adae0 -
Branch / Tag:
refs/tags/v1.0.0 - Owner: https://github.com/twn39
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
build.yml@b1cada510f22f19125a04b8b3e2dd278e12adae0 -
Trigger Event:
push
-
Statement type:
File details
Details for the file pyopenxlsx-1.0.0-cp313-cp313-win_amd64.whl.
File metadata
- Download URL: pyopenxlsx-1.0.0-cp313-cp313-win_amd64.whl
- Upload date:
- Size: 862.1 kB
- Tags: CPython 3.13, Windows x86-64
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
ebd3d644c98d3521135ec9afcfe03cdef6427690813fc49cc19b355243990958
|
|
| MD5 |
261e28fee8594bf9afbbacf707161ad6
|
|
| BLAKE2b-256 |
7b946fb80245b2b1fb75a2932c4d48172cf650af4424f55c55cab9fc59ad92d9
|
Provenance
The following attestation bundles were made for pyopenxlsx-1.0.0-cp313-cp313-win_amd64.whl:
Publisher:
build.yml on twn39/pyopenxlsx
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
pyopenxlsx-1.0.0-cp313-cp313-win_amd64.whl -
Subject digest:
ebd3d644c98d3521135ec9afcfe03cdef6427690813fc49cc19b355243990958 - Sigstore transparency entry: 1162297366
- Sigstore integration time:
-
Permalink:
twn39/pyopenxlsx@b1cada510f22f19125a04b8b3e2dd278e12adae0 -
Branch / Tag:
refs/tags/v1.0.0 - Owner: https://github.com/twn39
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
build.yml@b1cada510f22f19125a04b8b3e2dd278e12adae0 -
Trigger Event:
push
-
Statement type:
File details
Details for the file pyopenxlsx-1.0.0-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl.
File metadata
- Download URL: pyopenxlsx-1.0.0-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
- Upload date:
- Size: 876.8 kB
- Tags: CPython 3.13, manylinux: glibc 2.27+ x86-64, manylinux: glibc 2.28+ x86-64
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
33d959b3b8f3d831bbc849c8ce9aaebe82b5609510329f7d1857122722c00d5e
|
|
| MD5 |
a995b9227e42089aaad16c26c61121dd
|
|
| BLAKE2b-256 |
a3c6b1863948cdd97acfff619a49b5942e9d719e41de1b674a225558b884a2f0
|
Provenance
The following attestation bundles were made for pyopenxlsx-1.0.0-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl:
Publisher:
build.yml on twn39/pyopenxlsx
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
pyopenxlsx-1.0.0-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl -
Subject digest:
33d959b3b8f3d831bbc849c8ce9aaebe82b5609510329f7d1857122722c00d5e - Sigstore transparency entry: 1162297138
- Sigstore integration time:
-
Permalink:
twn39/pyopenxlsx@b1cada510f22f19125a04b8b3e2dd278e12adae0 -
Branch / Tag:
refs/tags/v1.0.0 - Owner: https://github.com/twn39
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
build.yml@b1cada510f22f19125a04b8b3e2dd278e12adae0 -
Trigger Event:
push
-
Statement type:
File details
Details for the file pyopenxlsx-1.0.0-cp313-cp313-macosx_11_0_arm64.whl.
File metadata
- Download URL: pyopenxlsx-1.0.0-cp313-cp313-macosx_11_0_arm64.whl
- Upload date:
- Size: 796.8 kB
- Tags: CPython 3.13, macOS 11.0+ ARM64
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
1a35559e24a69d055b4ea94fb1c984e1a8e67847e8f35179a21bb3e04645c60a
|
|
| MD5 |
b2451fb7b520c98eb2626865a3abb5b9
|
|
| BLAKE2b-256 |
99c50cc17b0d29cf2e640449a6855236f71cb0012d655c102aa243fea5802d88
|
Provenance
The following attestation bundles were made for pyopenxlsx-1.0.0-cp313-cp313-macosx_11_0_arm64.whl:
Publisher:
build.yml on twn39/pyopenxlsx
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
pyopenxlsx-1.0.0-cp313-cp313-macosx_11_0_arm64.whl -
Subject digest:
1a35559e24a69d055b4ea94fb1c984e1a8e67847e8f35179a21bb3e04645c60a - Sigstore transparency entry: 1162297324
- Sigstore integration time:
-
Permalink:
twn39/pyopenxlsx@b1cada510f22f19125a04b8b3e2dd278e12adae0 -
Branch / Tag:
refs/tags/v1.0.0 - Owner: https://github.com/twn39
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
build.yml@b1cada510f22f19125a04b8b3e2dd278e12adae0 -
Trigger Event:
push
-
Statement type:
File details
Details for the file pyopenxlsx-1.0.0-cp312-cp312-win_amd64.whl.
File metadata
- Download URL: pyopenxlsx-1.0.0-cp312-cp312-win_amd64.whl
- Upload date:
- Size: 862.1 kB
- Tags: CPython 3.12, Windows x86-64
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
d2b95a8d658e3fe33c99556bd1cfa6ce4ce545f92eea5a4f448abc1b58d054e3
|
|
| MD5 |
bccae9b1040470eece2bdc4716b3e4c5
|
|
| BLAKE2b-256 |
8f5be31a005686cc56a1979c60e5fce7115670f2b1d1539d321c83f71cde066e
|
Provenance
The following attestation bundles were made for pyopenxlsx-1.0.0-cp312-cp312-win_amd64.whl:
Publisher:
build.yml on twn39/pyopenxlsx
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
pyopenxlsx-1.0.0-cp312-cp312-win_amd64.whl -
Subject digest:
d2b95a8d658e3fe33c99556bd1cfa6ce4ce545f92eea5a4f448abc1b58d054e3 - Sigstore transparency entry: 1162297273
- Sigstore integration time:
-
Permalink:
twn39/pyopenxlsx@b1cada510f22f19125a04b8b3e2dd278e12adae0 -
Branch / Tag:
refs/tags/v1.0.0 - Owner: https://github.com/twn39
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
build.yml@b1cada510f22f19125a04b8b3e2dd278e12adae0 -
Trigger Event:
push
-
Statement type:
File details
Details for the file pyopenxlsx-1.0.0-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl.
File metadata
- Download URL: pyopenxlsx-1.0.0-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
- Upload date:
- Size: 876.8 kB
- Tags: CPython 3.12, manylinux: glibc 2.27+ x86-64, manylinux: glibc 2.28+ x86-64
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
6f95dd1613c31e7c5a07e3074dfe2fc7f8e22f7f003fd42c425138e9f4af5b42
|
|
| MD5 |
bbb5b2abed8fcd3dfce949609aeb58c8
|
|
| BLAKE2b-256 |
13a29a0788ae87ee11177dc723de4c621fbac14666fb5144b134f8867c3022d3
|
Provenance
The following attestation bundles were made for pyopenxlsx-1.0.0-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl:
Publisher:
build.yml on twn39/pyopenxlsx
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
pyopenxlsx-1.0.0-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl -
Subject digest:
6f95dd1613c31e7c5a07e3074dfe2fc7f8e22f7f003fd42c425138e9f4af5b42 - Sigstore transparency entry: 1162296890
- Sigstore integration time:
-
Permalink:
twn39/pyopenxlsx@b1cada510f22f19125a04b8b3e2dd278e12adae0 -
Branch / Tag:
refs/tags/v1.0.0 - Owner: https://github.com/twn39
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
build.yml@b1cada510f22f19125a04b8b3e2dd278e12adae0 -
Trigger Event:
push
-
Statement type:
File details
Details for the file pyopenxlsx-1.0.0-cp312-cp312-macosx_11_0_arm64.whl.
File metadata
- Download URL: pyopenxlsx-1.0.0-cp312-cp312-macosx_11_0_arm64.whl
- Upload date:
- Size: 796.8 kB
- Tags: CPython 3.12, macOS 11.0+ ARM64
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
768a072c710c7dd230dad431aca84f3e46e22410940167d8229d729e2ec8d2d7
|
|
| MD5 |
96520e615bbfe00366bce2a7fde46e8e
|
|
| BLAKE2b-256 |
5c8d17da728fcc20b130ca62ae20e971fa3be029432e0ea00ae0418bb2650d00
|
Provenance
The following attestation bundles were made for pyopenxlsx-1.0.0-cp312-cp312-macosx_11_0_arm64.whl:
Publisher:
build.yml on twn39/pyopenxlsx
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
pyopenxlsx-1.0.0-cp312-cp312-macosx_11_0_arm64.whl -
Subject digest:
768a072c710c7dd230dad431aca84f3e46e22410940167d8229d729e2ec8d2d7 - Sigstore transparency entry: 1162297238
- Sigstore integration time:
-
Permalink:
twn39/pyopenxlsx@b1cada510f22f19125a04b8b3e2dd278e12adae0 -
Branch / Tag:
refs/tags/v1.0.0 - Owner: https://github.com/twn39
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
build.yml@b1cada510f22f19125a04b8b3e2dd278e12adae0 -
Trigger Event:
push
-
Statement type:
File details
Details for the file pyopenxlsx-1.0.0-cp311-cp311-win_amd64.whl.
File metadata
- Download URL: pyopenxlsx-1.0.0-cp311-cp311-win_amd64.whl
- Upload date:
- Size: 860.8 kB
- Tags: CPython 3.11, Windows x86-64
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
7694feffae85c55c6c762c58ecbdf1f1a30ccd2484805b8fdb13fa1badd0c9bc
|
|
| MD5 |
9832ddc2d4fa0a39d97142722145db7a
|
|
| BLAKE2b-256 |
4f2e2791c301a900d78bd2d9747b0753b886c6e7274dedb82205de80fa4243ba
|
Provenance
The following attestation bundles were made for pyopenxlsx-1.0.0-cp311-cp311-win_amd64.whl:
Publisher:
build.yml on twn39/pyopenxlsx
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
pyopenxlsx-1.0.0-cp311-cp311-win_amd64.whl -
Subject digest:
7694feffae85c55c6c762c58ecbdf1f1a30ccd2484805b8fdb13fa1badd0c9bc - Sigstore transparency entry: 1162297175
- Sigstore integration time:
-
Permalink:
twn39/pyopenxlsx@b1cada510f22f19125a04b8b3e2dd278e12adae0 -
Branch / Tag:
refs/tags/v1.0.0 - Owner: https://github.com/twn39
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
build.yml@b1cada510f22f19125a04b8b3e2dd278e12adae0 -
Trigger Event:
push
-
Statement type:
File details
Details for the file pyopenxlsx-1.0.0-cp311-cp311-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl.
File metadata
- Download URL: pyopenxlsx-1.0.0-cp311-cp311-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
- Upload date:
- Size: 877.9 kB
- Tags: CPython 3.11, manylinux: glibc 2.27+ x86-64, manylinux: glibc 2.28+ x86-64
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
7eb195e9679fc11709220251f4ba98fd3314da374ab2b31db86037c8ee43fdb8
|
|
| MD5 |
32706de9ab75b74cd8d114b154942ae9
|
|
| BLAKE2b-256 |
92acf79388d3f4b1a5d45276f6e58d0202e9bed556c0020d883f0191b1ef8fdf
|
Provenance
The following attestation bundles were made for pyopenxlsx-1.0.0-cp311-cp311-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl:
Publisher:
build.yml on twn39/pyopenxlsx
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
pyopenxlsx-1.0.0-cp311-cp311-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl -
Subject digest:
7eb195e9679fc11709220251f4ba98fd3314da374ab2b31db86037c8ee43fdb8 - Sigstore transparency entry: 1162297076
- Sigstore integration time:
-
Permalink:
twn39/pyopenxlsx@b1cada510f22f19125a04b8b3e2dd278e12adae0 -
Branch / Tag:
refs/tags/v1.0.0 - Owner: https://github.com/twn39
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
build.yml@b1cada510f22f19125a04b8b3e2dd278e12adae0 -
Trigger Event:
push
-
Statement type:
File details
Details for the file pyopenxlsx-1.0.0-cp311-cp311-macosx_11_0_arm64.whl.
File metadata
- Download URL: pyopenxlsx-1.0.0-cp311-cp311-macosx_11_0_arm64.whl
- Upload date:
- Size: 797.3 kB
- Tags: CPython 3.11, macOS 11.0+ ARM64
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
fddc331c143387944519436b805e70586671dc22a73e2fab583230ddb0ac03c6
|
|
| MD5 |
baea7a6cea7e5e0608f928d7c1f16934
|
|
| BLAKE2b-256 |
53fe5b2a7eb8c3fa3523c8a68916f20988bdce41e5165a932ec0ffc7863cf5ad
|
Provenance
The following attestation bundles were made for pyopenxlsx-1.0.0-cp311-cp311-macosx_11_0_arm64.whl:
Publisher:
build.yml on twn39/pyopenxlsx
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
pyopenxlsx-1.0.0-cp311-cp311-macosx_11_0_arm64.whl -
Subject digest:
fddc331c143387944519436b805e70586671dc22a73e2fab583230ddb0ac03c6 - Sigstore transparency entry: 1162297412
- Sigstore integration time:
-
Permalink:
twn39/pyopenxlsx@b1cada510f22f19125a04b8b3e2dd278e12adae0 -
Branch / Tag:
refs/tags/v1.0.0 - Owner: https://github.com/twn39
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
build.yml@b1cada510f22f19125a04b8b3e2dd278e12adae0 -
Trigger Event:
push
-
Statement type: