Skip to main content

Python bindings for OpenXLSX-NX using nanobind

Project description

PyOpenXLSX

PyPI version Python versions Downloads Build Status Docs Status Codecov License

[!IMPORTANT] pyopenxlsx uses OpenXLSX-NX (v1.0.0+), a specialized C++ fork that includes critical performance optimizations and functional enhancements (such as agile encryption, streaming I/O, vector shapes, threaded comments, and custom properties) not currently available in the upstream repository.

pyopenxlsx is a high-performance Python binding for the OpenXLSX-NX 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-NX library.
  • Pythonic API: Intuitive interface with properties, iterators, and context managers.
  • Streaming I/O: Bypass the DOM entirely with XLStreamWriter and XLStreamReader for memory-efficient bulk data processing.
  • Security: Full support for ECMA-376 Standard and Agile Encryption (read/write password-protected files) and granular worksheet protection.
  • Async Support: async/await support 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, vector shapes, hyperlinks (external/internal), and modern threaded comments.
  • Memory Safety: Combines C++ efficiency with Python's automatic memory management.

Tech Stack

Component Technology
C++ Core OpenXLSX-NX
Bindings nanobind
Build System scikit-build-core & CMake

pyopenxlsx vs openpyxl: Feature Comparison

While openpyxl is a great pure-Python library, pyopenxlsx is designed to solve critical performance bottlenecks and add modern enterprise features by leveraging a C++ engine.

Feature / Capability pyopenxlsx (OpenXLSX-NX) openpyxl Notes
Underlying Engine C++17 (nanobind wrapped) Pure Python pyopenxlsx is heavily optimized for low-level memory management.
Execution Speed Extremely Fast (Up to 160x) Slower Pure Python loop overhead makes parsing large files sluggish.
Memory Footprint Minimal (C++ Memory Mapping) High Parsing large files in openpyxl often leads to OOM errors.
Asyncio Support Native (await load_workbook_async) ❌ No pyopenxlsx offloads heavy I/O to a threadpool, perfect for Web APIs (FastAPI/Django).
Agile Encryption (Passwords) Native Read & Write ❌ No openpyxl cannot read/write password-protected .xlsx files without 3rd-party decryption tools.
Threaded Comments Full Support (Conversations/Replies) ❌ No / Can be lost pyopenxlsx supports modern Excel conversational comments and resolution states.
Vector Shapes Native Support (20+ Shapes) ❌ No Draw complex vector shapes (Arrows, Flowcharts, etc.) directly.
Formula Evaluation Built-in C++ Engine ❌ No pyopenxlsx can statically evaluate simple formulas without Excel installed.
Streaming I/O Direct to disk with Styles ⚠️ Partial (WriteOnly) pyopenxlsx can stream styled data directly to the archive, bypassing the DOM.
Granular Sheet Protection Deep Control (20+ specific flags) ✅ Yes pyopenxlsx exposes extensive ECMA-376 locking options.
Styles Architecture Declarative (Index-based) ⚠️ Object-based pyopenxlsx reuses style indices, saving massive amounts of memory on huge datasets.
Charts ⚠️ Basic (Bar, Line, etc.) Highly Advanced openpyxl currently has more mature support for extremely complex/3D charts.
Environment Pre-compiled Wheels required Any Python env pyopenxlsx provides wheels for major OS/Architectures via CI.

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

⚠️ Important Notice (v1.3.1+):
Creating new Pivot Tables from scratch via Python code is temporarily disabled while the Python bindings are refactored to support the underlying OpenXLSX v1.9.1 zero-allocation Fluent Builder memory ownership model without leaks.

However, pyopenxlsx fully preserves any existing Pivot Tables when reading and saving files. The most robust workflow is to use a pre-formatted Excel template containing a Pivot Table, and update the underlying raw data.

from pyopenxlsx import load_workbook

# Load a workbook that already contains a Pivot Table and a "SalesData" sheet
wb = load_workbook("template_with_pivot.xlsx")
ws = wb.get_worksheet("SalesData")

# 1. Overwrite or append new raw data
ws.write_rows(2, [
    ["North", "Apples", 500],
    ["South", "Oranges", 750],
    ["East", "Bananas", 300]
])

# 2. Save the workbook
# The Pivot Table structure, cache, and slicers remain completely intact and 
# will reflect the new data the next time the user clicks "Refresh" in Excel.
wb.save("updated_report.xlsx")

Insert Images and Vector Shapes

from pyopenxlsx import Workbook

wb = Workbook()
ws = wb.active

# 1. Insert image at A1, automatically maintaining aspect ratio
# Requires Pillow: pip install pillow
ws.add_image("logo.png", anchor="A1", width=200)

# 2. Or specify exact dimensions
ws.add_image("banner.jpg", anchor="B5", width=400, height=100)

# 3. Add Native Vector Shapes
ws.add_shape(
    row=2, col=5, shape_type="Arrow", 
    name="MyArrow", text="Point!", 
    fill_color="FF0000", line_width=2.5,
    rotation=90
)

wb.save("media.xlsx")

Comments & Threaded Replies

from pyopenxlsx import Workbook

wb = Workbook()
ws = wb.active

# 1. Simple or multiline legacy comments
ws["A1"].comment = "Short comment"

# 2. Modern Threaded Comments (Conversations)
author_id = wb._doc.persons().add_person("Curry Tang")
threads = ws._sheet.threaded_comments()

root_comment = threads.add_comment("B2", author_id, "Please review this cell.")
threads.add_reply(root_comment.id(), author_id, "Fixed!")

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=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:


Performance

pyopenxlsx is built for speed. By leveraging the C++ OpenXLSX-NX engine and providing optimized bulk operations, it significantly outperforms pure-Python alternatives.

Note: The following benchmarks were recorded on an Apple Silicon (arm64) M-series processor, comparing pyopenxlsx v1.3.1 against openpyxl.

Benchmarks (pyopenxlsx vs openpyxl)

Scenario pyopenxlsx openpyxl Speedup
Load File (20,000 cells) ~2.5ms ~169.0ms 67x
Single Read (1 cell in large doc) ~4.4ms ~181.7ms 41x
Bulk Read / Iterate (20,000 cells) ~10.0ms ~136.3ms* 13.6x
Write Small (1,000 cells) ~3.5ms ~8.0ms 2.2x
Write Large (50,000 cells) ~95.1ms ~316.9ms 3.3x
Bulk Write Large (50,000 cells, numpy/range) ~17.4ms N/A 18.2x
Extreme Write (1,000,000 cells) ~567ms ~6,172ms 10.8x
Bulk Write Extreme (1,000,000 cells, numpy) ~330ms N/A 18.7x

* openpyxl bulk read timed using values_only=True.

Resource Usage (1,000,000 cells)

Library Execution Time Memory Delta CPU Load
pyopenxlsx (bulk write) ~0.33s ~200 MB ~99%
openpyxl ~6.17s ~600 MB* ~99%

[!NOTE] *Memory delta for openpyxl can be misleading due to Python's garbage collection timing during the benchmark. However, pyopenxlsx consistently shows lower memory pressure for bulk operations as data is handled primarily in C++.

Why is it faster?

  1. C++ Foundation: Core operations happen in highly optimized C++. Recent updates eliminated shared_ptr heap allocations and deep copies for zero-allocation performance during high-throughput tasks.
  2. Reduced Object Overhead: pyopenxlsx minimizes the creation of many Python Cell objects during bulk operations.
  3. Efficient Memory Mapping: Leverages the memory-efficient design of OpenXLSX-NX.
  4. 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-NX library is licensed under the MIT License, and nanobind under a BSD-style license.

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

pyopenxlsx-1.4.0.tar.gz (25.1 MB view details)

Uploaded Source

Built Distributions

If you're not sure about the file name format, learn more about wheel file names.

pyopenxlsx-1.4.0-cp314-cp314-win_amd64.whl (1.2 MB view details)

Uploaded CPython 3.14Windows x86-64

pyopenxlsx-1.4.0-cp314-cp314-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl (1.3 MB view details)

Uploaded CPython 3.14manylinux: glibc 2.27+ x86-64manylinux: glibc 2.28+ x86-64

pyopenxlsx-1.4.0-cp314-cp314-macosx_11_0_arm64.whl (1.2 MB view details)

Uploaded CPython 3.14macOS 11.0+ ARM64

pyopenxlsx-1.4.0-cp313-cp313-win_amd64.whl (1.1 MB view details)

Uploaded CPython 3.13Windows x86-64

pyopenxlsx-1.4.0-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl (1.3 MB view details)

Uploaded CPython 3.13manylinux: glibc 2.27+ x86-64manylinux: glibc 2.28+ x86-64

pyopenxlsx-1.4.0-cp313-cp313-macosx_11_0_arm64.whl (1.2 MB view details)

Uploaded CPython 3.13macOS 11.0+ ARM64

pyopenxlsx-1.4.0-cp312-cp312-win_amd64.whl (1.1 MB view details)

Uploaded CPython 3.12Windows x86-64

pyopenxlsx-1.4.0-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl (1.3 MB view details)

Uploaded CPython 3.12manylinux: glibc 2.27+ x86-64manylinux: glibc 2.28+ x86-64

pyopenxlsx-1.4.0-cp312-cp312-macosx_11_0_arm64.whl (1.2 MB view details)

Uploaded CPython 3.12macOS 11.0+ ARM64

pyopenxlsx-1.4.0-cp311-cp311-win_amd64.whl (1.1 MB view details)

Uploaded CPython 3.11Windows x86-64

pyopenxlsx-1.4.0-cp311-cp311-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl (1.3 MB view details)

Uploaded CPython 3.11manylinux: glibc 2.27+ x86-64manylinux: glibc 2.28+ x86-64

pyopenxlsx-1.4.0-cp311-cp311-macosx_11_0_arm64.whl (1.2 MB view details)

Uploaded CPython 3.11macOS 11.0+ ARM64

File details

Details for the file pyopenxlsx-1.4.0.tar.gz.

File metadata

  • Download URL: pyopenxlsx-1.4.0.tar.gz
  • Upload date:
  • Size: 25.1 MB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for pyopenxlsx-1.4.0.tar.gz
Algorithm Hash digest
SHA256 58047565684e697df49ec05f370b74241e8675aaa1aa821dba3b231e67cf954e
MD5 ab67bf5f5b308e5b5bf25f87dc9d9c25
BLAKE2b-256 d864624b27ab4a0cbeefe38bb3f3aa15ae09126fe83723ad7173689795c016ae

See more details on using hashes here.

Provenance

The following attestation bundles were made for pyopenxlsx-1.4.0.tar.gz:

Publisher: build.yml on twn39/pyopenxlsx

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file pyopenxlsx-1.4.0-cp314-cp314-win_amd64.whl.

File metadata

  • Download URL: pyopenxlsx-1.4.0-cp314-cp314-win_amd64.whl
  • Upload date:
  • Size: 1.2 MB
  • Tags: CPython 3.14, Windows x86-64
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for pyopenxlsx-1.4.0-cp314-cp314-win_amd64.whl
Algorithm Hash digest
SHA256 b3f7ac242188cba9cc89b4e19f4094f72113b963deafd6c6355a42f180b7a927
MD5 d1d0e88e8258e2d2749f16792493ffef
BLAKE2b-256 87f9dcda3f5ee210a8320ffef04c122a325348ac2fa31f8445e21f5c3baea2fe

See more details on using hashes here.

Provenance

The following attestation bundles were made for pyopenxlsx-1.4.0-cp314-cp314-win_amd64.whl:

Publisher: build.yml on twn39/pyopenxlsx

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file pyopenxlsx-1.4.0-cp314-cp314-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for pyopenxlsx-1.4.0-cp314-cp314-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 fca77fa88c7f1594623a147b9b9d33b471e5ee0edf37c74bc50012354022660e
MD5 81f2462147c6e455b9cc6c803757a0d5
BLAKE2b-256 f2affb1a2f1683c62c82015a11e867f4f89c8d84cc1a4aa21ca9316f02bba9d1

See more details on using hashes here.

Provenance

The following attestation bundles were made for pyopenxlsx-1.4.0-cp314-cp314-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl:

Publisher: build.yml on twn39/pyopenxlsx

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file pyopenxlsx-1.4.0-cp314-cp314-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for pyopenxlsx-1.4.0-cp314-cp314-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 06551a0bb469b53c7725de730e1fe5a5ef9f9957804cdb881a57f17818feb597
MD5 fc38942421d9b2cac5c923e8f115f4ee
BLAKE2b-256 109b4bb77dbf8314b6fd186012b9760accf15d121736368ed50578227d0fb050

See more details on using hashes here.

Provenance

The following attestation bundles were made for pyopenxlsx-1.4.0-cp314-cp314-macosx_11_0_arm64.whl:

Publisher: build.yml on twn39/pyopenxlsx

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file pyopenxlsx-1.4.0-cp313-cp313-win_amd64.whl.

File metadata

  • Download URL: pyopenxlsx-1.4.0-cp313-cp313-win_amd64.whl
  • Upload date:
  • Size: 1.1 MB
  • Tags: CPython 3.13, Windows x86-64
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for pyopenxlsx-1.4.0-cp313-cp313-win_amd64.whl
Algorithm Hash digest
SHA256 3575eeaa12642c6f330e038d750404d203ad1a0c4e1518426b23fb487f51314d
MD5 935f7b066f7009f0f2a1a0292f71a216
BLAKE2b-256 7f8c5e922520d330a274aa4ec5829f2c89584b4d08c276ad6dd874c7e48aaffe

See more details on using hashes here.

Provenance

The following attestation bundles were made for pyopenxlsx-1.4.0-cp313-cp313-win_amd64.whl:

Publisher: build.yml on twn39/pyopenxlsx

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file pyopenxlsx-1.4.0-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for pyopenxlsx-1.4.0-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 58b7ac1774e2347e62db4e160d525eae8599ef518501414ae4a38e84cd0d481d
MD5 314f681ec024a5fbbc2f822748cbba00
BLAKE2b-256 c0668be216683d72613a3385bafa0918f20101f606ad59edd6a7a7aa8b4c3cf5

See more details on using hashes here.

Provenance

The following attestation bundles were made for pyopenxlsx-1.4.0-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl:

Publisher: build.yml on twn39/pyopenxlsx

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file pyopenxlsx-1.4.0-cp313-cp313-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for pyopenxlsx-1.4.0-cp313-cp313-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 1b7881a1c1db053198442d36fc83146ca96ac6dfc3175018a9819460e049ead6
MD5 27f86d61bf0a0486b6432698873cbf63
BLAKE2b-256 3fd436b6402e1067f68c0ca005c3560b446d1dc915dff157fdd71ad8f53bb29b

See more details on using hashes here.

Provenance

The following attestation bundles were made for pyopenxlsx-1.4.0-cp313-cp313-macosx_11_0_arm64.whl:

Publisher: build.yml on twn39/pyopenxlsx

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file pyopenxlsx-1.4.0-cp312-cp312-win_amd64.whl.

File metadata

  • Download URL: pyopenxlsx-1.4.0-cp312-cp312-win_amd64.whl
  • Upload date:
  • Size: 1.1 MB
  • Tags: CPython 3.12, Windows x86-64
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for pyopenxlsx-1.4.0-cp312-cp312-win_amd64.whl
Algorithm Hash digest
SHA256 f14d9e0f7b403d1a8d3d1e3300631e0529bf21c8f2133efe5f7cd275afbe61f0
MD5 7843f6c305e9196a5827c27c585bc390
BLAKE2b-256 4c4c859cf0b0e6503d58e219f23e70df9bfe5ac790a13b3081f49e5439a055cd

See more details on using hashes here.

Provenance

The following attestation bundles were made for pyopenxlsx-1.4.0-cp312-cp312-win_amd64.whl:

Publisher: build.yml on twn39/pyopenxlsx

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file pyopenxlsx-1.4.0-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for pyopenxlsx-1.4.0-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 ab90ea41ba1ebfdfa72abf2de25df398b918af6869b77e88a5fe2c13994a8905
MD5 90c64d092221548ba24f88c1e7a50f26
BLAKE2b-256 fd1851ec607cbc26ae62113c17fe5e43c66526ad28fa1b316ef468d1783d998d

See more details on using hashes here.

Provenance

The following attestation bundles were made for pyopenxlsx-1.4.0-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl:

Publisher: build.yml on twn39/pyopenxlsx

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file pyopenxlsx-1.4.0-cp312-cp312-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for pyopenxlsx-1.4.0-cp312-cp312-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 d1f9782235c67f9a36cb79f43e256b506c6104acdeff201b97e801c9cc3e4aa6
MD5 fae566d103eef66594237f4b4cf5eb47
BLAKE2b-256 9581193575f32988766ebd5b26fa94314f878c13d4c26bb8af2ce5f1d5092eab

See more details on using hashes here.

Provenance

The following attestation bundles were made for pyopenxlsx-1.4.0-cp312-cp312-macosx_11_0_arm64.whl:

Publisher: build.yml on twn39/pyopenxlsx

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file pyopenxlsx-1.4.0-cp311-cp311-win_amd64.whl.

File metadata

  • Download URL: pyopenxlsx-1.4.0-cp311-cp311-win_amd64.whl
  • Upload date:
  • Size: 1.1 MB
  • Tags: CPython 3.11, Windows x86-64
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for pyopenxlsx-1.4.0-cp311-cp311-win_amd64.whl
Algorithm Hash digest
SHA256 2bcf747e3d5c87409bcc1748ae4be470b561d0d15729c9338bfd6e7208429dd6
MD5 f8c14044e54dee2eab1a4c26d6cc0b19
BLAKE2b-256 5ca6576e9e2fa7900ab4dece1660325775458626b787f1d54bbb700a42537e9d

See more details on using hashes here.

Provenance

The following attestation bundles were made for pyopenxlsx-1.4.0-cp311-cp311-win_amd64.whl:

Publisher: build.yml on twn39/pyopenxlsx

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file pyopenxlsx-1.4.0-cp311-cp311-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for pyopenxlsx-1.4.0-cp311-cp311-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 b6922492e087f51134076833ffc1c74c84b9fbab32f4923131241defb38c2443
MD5 a9e906e54b477a987d3be1736367c90c
BLAKE2b-256 0df22a2fb21088b338cc87a52cd5c5cbd0e34ee00f60fc1fd51007382a263d71

See more details on using hashes here.

Provenance

The following attestation bundles were made for pyopenxlsx-1.4.0-cp311-cp311-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl:

Publisher: build.yml on twn39/pyopenxlsx

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file pyopenxlsx-1.4.0-cp311-cp311-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for pyopenxlsx-1.4.0-cp311-cp311-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 f510e3be17eef45458802e5b81a679a73a08dcd3086eb54e7be71e12d31816e6
MD5 34cbb7ed9b7f453bc57274fcfabad967
BLAKE2b-256 c1dfbe57b7b57708ab0fd92ff1a332f6abc836b569bc48da05879d5b077a5b74

See more details on using hashes here.

Provenance

The following attestation bundles were made for pyopenxlsx-1.4.0-cp311-cp311-macosx_11_0_arm64.whl:

Publisher: build.yml on twn39/pyopenxlsx

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page