Skip to main content

Python bindings for OpenXLSX using pybind11

Project description

PyOpenXLSX

PyPI version Python versions Build Status License

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/await support for key I/O operations.
  • Rich Styling: comprehensive support for fonts, fills, borders, alignments, and number formats.
  • Memory Safety: Combines C++ efficiency with Python's automatic memory management.

Tech Stack

Component Technology
C++ Core OpenXLSX
Bindings pybind11
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")

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")

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")

API Documentation

Module Exports

from pyopenxlsx import (
    # Core Classes
    Workbook, Worksheet, Cell, Range,
    load_workbook, load_workbook_async,
    
    # Style Classes
    Font, Fill, Border, Side, Alignment, Style, Protection,
    
    # Enums & Constants
    XLColor, XLSheetState, XLLineStyle, XLPatternType, XLAlignmentStyle,
    XLProperty, XLUnderlineStyle, XLFontSchemeStyle, XLVerticalAlignRunStyle,
    XLFillType,
)

Workbook Class

The top-level container for an Excel file.

Constructor

Workbook(filename: str | None = None, force_overwrite: bool = True)
  • filename: Optional. If provided, opens an existing file; otherwise, creates a new workbook.
  • force_overwrite: Optional (default: True). If True, overwrites existing files when creating or saving. If False, an exception is raised if the file already exists.

Properties

Property Type Description
active Worksheet | None Get or set the currently active worksheet.
sheetnames list[str] Returns a list of all worksheet names.
properties DocumentProperties Access document metadata (title, author, etc.).
styles XLStyles Access underlying style object (advanced usage).
workbook XLWorkbook Access underlying C++ workbook object (advanced usage).

Methods

Method Return Type Description
save(filename=None, force_overwrite=True) None Save the workbook. Saves to original path if filename is omitted.
save_async(filename=None, force_overwrite=True) Coroutine Asynchronously save the workbook.
close() None Close the workbook and release resources.
close_async() Coroutine Asynchronously close the workbook.
create_sheet(title=None, index=None) Worksheet Create a new worksheet. title defaults to "Sheet1", etc.
create_sheet_async(...) Coroutine Asynchronously create a worksheet.
remove(worksheet) None Delete the specified worksheet.
remove_async(worksheet) Coroutine Asynchronously delete a worksheet.
copy_worksheet(from_worksheet) Worksheet Copy a worksheet and return the copy.
copy_worksheet_async(...) Coroutine Asynchronously copy a worksheet.
add_style(...) int Create a new style and return its index. See below.
add_style_async(...) Coroutine Asynchronously create a style.
get_embedded_images() list[ImageInfo] Get list of all images embedded in the workbook.
get_image_data(name) bytes Get binary data of an embedded image by its name or path.
extract_images(out_dir) list[str] Extract all images to a directory. Returns list of file paths.
extract_images_async(...) Coroutine Asynchronously extract all images.

add_style Method

def add_style(
    font: Font | int | None = None,
    fill: Fill | int | None = None,
    border: Border | int | None = None,
    alignment: Alignment | None = None,
    number_format: str | int | None = None,
    protection: Protection | None = None,
) -> int:

Returns: A style index (int) that can be assigned to Cell.style_index.

Example:

# Pass all styles via a Style object
from pyopenxlsx import Style, Font, Fill

style = Style(
    font=Font(bold=True),
    fill=Fill(color="C8C8C8"), # Hex color
    number_format="0.00"
)
idx = wb.add_style(style)

Worksheet Class

Represents a sheet within an Excel file.

Properties

Property Type Description
title str Get or set the worksheet name.
index int Get or set the worksheet index (0-based).
sheet_state str Visibility: "visible", "hidden", "very_hidden".
max_row int Returns the maximum row index used.
max_column int Returns the maximum column index used.
rows Iterator Iterate over all rows with data.
merges MergeCells Access merged cells information.
protection dict Get worksheet protection status (read-only).

Methods

Method Return Type Description
cell(row, column, value=None) Cell Get cell by 1-based indices. Optionally set value.
range(address) Range Get range by string, e.g., ws.range("A1:C3").
range(start, end) Range Get range by endpoints, e.g., ws.range("A1", "C3").
merge_cells(address) None Merge cells, e.g., ws.merge_cells("A1:B2").
merge_cells_async(...) Coroutine Asynchronously merge cells.
unmerge_cells(address) None Unmerge cells.
unmerge_cells_async(...) Coroutine Asynchronously unmerge cells.
append(iterable) None Append a row of data after the last used row.
append_async(iterable) Coroutine Asynchronously append a row.
set_column_format(col, style_idx) None Set default style for a column. col can be int or "A".
set_row_format(row, style_idx) None Set default style for a row.
column(col) Column Get column object for width adjustments.
protect(...) None Protect the worksheet.
protect_async(...) Coroutine Asynchronously protect the worksheet.
unprotect() None Unprotect the worksheet.
unprotect_async() Coroutine Asynchronously unprotect.
add_image(...) None Insert an image.
add_image_async(...) Coroutine Asynchronously insert an image.

add_image Method

def add_image(
    img_path: str,
    anchor: str = "A1",
    width: int | None = None,
    height: int | None = None,
) -> None:
  • img_path: Path to image (PNG, JPG, GIF).
  • anchor: Top-left cell address.
  • width, height: Pixel dimensions. Requires Pillow for auto-detection if not provided.

Magic Methods

Method Description
__getitem__(key) Get cell by address: ws["A1"]

Cell Class

The fundamental unit of data in Excel.

Properties

Property Type Description
value Any Get/Set value. Supports str, int, float, bool, datetime.
formula Formula Get/Set formula string (without initial =).
style_index int Get/Set style index.
style int Alias for style_index.
is_date bool True if the cell has a date format.
comment str | None Get/Set cell comment. Set None to remove.
font XLFont Get font object (read-only).
fill XLFill Get fill object (read-only).
border XLBorder Get border object (read-only).
alignment XLAlignment Get alignment object (read-only).

Date Handling

If is_date is True, value automatically returns a Python datetime object.

# Write
ws["A1"].value = datetime(2024, 1, 15)
ws["A1"].style_index = wb.add_style(number_format=14)  # Built-in date format

# Read
print(ws["A1"].value)   # datetime.datetime(2024, 1, 15, 0, 0)
print(ws["A1"].is_date) # True

Formulas

Note: Formulas must be set via the formula property, not value.

# Correct
ws["A3"].formula = "SUM(A1:A2)" 

# Incorrect (treated as string)
ws["A3"].value = "=SUM(A1:A2)"

Range Class

Represents a rectangular area of cells.

Properties

Property Type Description
address str Range address, e.g., "A1:C3".
num_rows int Row count.
num_columns int Column count.

Methods

Method Return Type Description
clear() None Clear values in all cells of the range.
clear_async() Coroutine Asynchronously clear range.

Iteration

for cell in ws.range("A1:B2"):
    print(cell.value)

Style Classes

Font

Font(name="Arial", size=11, bold=False, italic=False, color=None)

Fill

Fill(pattern_type="solid", color=None, background_color=None)

Border

Border(left=Side(), right=Side(), top=Side(), bottom=Side(), diagonal=Side())

Side

Side(style="thin", color=None)

Styles: "thin", "thick", "dashed", "dotted", "double", "hair", "medium", "mediumDashed", "mediumDashDot", "mediumDashDotDot", "slantDashDot"

Alignment

Alignment(horizontal="center", vertical="center", wrap_text=True)

Options: "left", "center", "right", "general", "top", "bottom"


DocumentProperties

Accessed via wb.properties. Supports dict-like access.

  • Metadata: title, subject, creator, keywords, description, last_modified_by, category, company.
wb.properties["title"] = "My Report"
print(wb.properties["creator"])

Column Class

Accessed via ws.column(col_index) or ws.column("A").

Properties

Property Type Description
width float Get or set the column width.
hidden bool Get or set whether the column is hidden.
style_index int Get or set the default style index for the column.

Formula Class

Accessed via cell.formula.

Properties

Property Type Description
text str Get or set the formula string.

Methods

Method Return Type Description
clear() None Remove the formula from the cell.

MergeCells Class

Accessed via ws.merges. Represents the collection of merged ranges in a worksheet.

Methods

Method Return Type Description
append(reference) None Create a merged range (e.g., "A1:B2").
delete(index) None Remove a merged range by its index.
find(reference) int Find the index of a merged range. Returns -1 if not found.
__len__() int Return the number of merged ranges.
__getitem__(index) XLMergeCell Get a merged range object by index.
__iter__() Iterator Iterate over all merged ranges.
__contains__(ref) bool Check if a reference is within any merged range.

XLComments Class

Accessed via ws._sheet.comments().

Method Return Type Description
add_author(name) int Add a new author to the workbook.
set(ref, text, author_id=0) None Set comment for a cell reference.
get(ref_or_idx) str | XLComment Get comment text or object.
shape(cell_ref) XLShape Get the VML shape object for the comment box.
count() int Number of comments in the sheet.

XLShape Class

Represents the visual properties of a comment box.

Methods

Method Return Type Description
style() XLShapeStyle Access size, position, and visibility properties.
client_data() XLShapeClientData Access Excel-specific anchor and auto-fill data.

XLShapeStyle Class

Method Return Type Description
set_width(val) None Set box width in points.
set_height(val) None Set box height in points.
show() / hide() None Set comment visibility.

XLShapeClientData Class

Method Return Type Description
set_anchor(str) None Set box position/size using grid coordinates.
set_auto_fill(bool) None Enable/disable automatic box sizing.

ImageInfo Class

Returned by wb.get_embedded_images().

Attributes

Attribute Type Description
name str Filename of the image.
path str Internal path in the XLSX archive.
extension str File extension (e.g., "png").

Helper Functions

load_workbook

def load_workbook(filename: str) -> Workbook:
    """Open an existing Excel file."""

load_workbook_async

async def load_workbook_async(filename: str) -> Workbook:
    """Asynchronously open an existing Excel file."""

is_date_format

def is_date_format(format_code: int | str) -> bool:
    """
    Check if a number format code (int) or string represents a date/time format.
    Useful for determining if a cell value should be treated as a datetime.
    """

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) ~7ms ~155ms 21x
Write (1,000 cells) ~6ms ~9ms 1.5x
Write (50,000 cells) ~200ms ~318ms 1.6x
Bulk Write (50,000 cells) ~77ms N/A 4.1x
Iteration (20,000 cells) ~86ms ~157ms 1.8x

[!NOTE] Benchmarks were performed on a local development machine using pytest-benchmark. Results may vary based on environment and data complexity. Bulk write uses ws.write_range() with NumPy arrays.

Why is it faster?

  1. C++ Foundation: Core operations happen in highly optimized C++.
  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.
  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

MIT License. The underlying OpenXLSX library is licensed under its own terms.

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-0.2.4.tar.gz (1.0 MB view details)

Uploaded Source

Built Distributions

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

pyopenxlsx-0.2.4-cp314-cp314t-win_amd64.whl (566.3 kB view details)

Uploaded CPython 3.14tWindows x86-64

pyopenxlsx-0.2.4-cp314-cp314t-win32.whl (479.4 kB view details)

Uploaded CPython 3.14tWindows x86

pyopenxlsx-0.2.4-cp314-cp314t-musllinux_1_2_x86_64.whl (1.9 MB view details)

Uploaded CPython 3.14tmusllinux: musl 1.2+ x86-64

pyopenxlsx-0.2.4-cp314-cp314t-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl (833.8 kB view details)

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

pyopenxlsx-0.2.4-cp314-cp314t-macosx_11_0_arm64.whl (557.0 kB view details)

Uploaded CPython 3.14tmacOS 11.0+ ARM64

pyopenxlsx-0.2.4-cp314-cp314-win_amd64.whl (528.3 kB view details)

Uploaded CPython 3.14Windows x86-64

pyopenxlsx-0.2.4-cp314-cp314-win32.whl (454.7 kB view details)

Uploaded CPython 3.14Windows x86

pyopenxlsx-0.2.4-cp314-cp314-musllinux_1_2_x86_64.whl (1.9 MB view details)

Uploaded CPython 3.14musllinux: musl 1.2+ x86-64

pyopenxlsx-0.2.4-cp314-cp314-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl (829.7 kB view details)

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

pyopenxlsx-0.2.4-cp314-cp314-macosx_11_0_arm64.whl (529.6 kB view details)

Uploaded CPython 3.14macOS 11.0+ ARM64

pyopenxlsx-0.2.4-cp313-cp313-win_amd64.whl (513.7 kB view details)

Uploaded CPython 3.13Windows x86-64

pyopenxlsx-0.2.4-cp313-cp313-win32.whl (447.3 kB view details)

Uploaded CPython 3.13Windows x86

pyopenxlsx-0.2.4-cp313-cp313-musllinux_1_2_x86_64.whl (1.9 MB view details)

Uploaded CPython 3.13musllinux: musl 1.2+ x86-64

pyopenxlsx-0.2.4-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl (829.1 kB view details)

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

pyopenxlsx-0.2.4-cp313-cp313-macosx_11_0_arm64.whl (528.3 kB view details)

Uploaded CPython 3.13macOS 11.0+ ARM64

pyopenxlsx-0.2.4-cp312-cp312-win_amd64.whl (513.8 kB view details)

Uploaded CPython 3.12Windows x86-64

pyopenxlsx-0.2.4-cp312-cp312-win32.whl (447.2 kB view details)

Uploaded CPython 3.12Windows x86

pyopenxlsx-0.2.4-cp312-cp312-musllinux_1_2_x86_64.whl (1.9 MB view details)

Uploaded CPython 3.12musllinux: musl 1.2+ x86-64

pyopenxlsx-0.2.4-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl (829.3 kB view details)

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

pyopenxlsx-0.2.4-cp312-cp312-macosx_11_0_arm64.whl (528.4 kB view details)

Uploaded CPython 3.12macOS 11.0+ ARM64

pyopenxlsx-0.2.4-cp311-cp311-win_amd64.whl (512.3 kB view details)

Uploaded CPython 3.11Windows x86-64

pyopenxlsx-0.2.4-cp311-cp311-win32.whl (448.6 kB view details)

Uploaded CPython 3.11Windows x86

pyopenxlsx-0.2.4-cp311-cp311-musllinux_1_2_x86_64.whl (1.9 MB view details)

Uploaded CPython 3.11musllinux: musl 1.2+ x86-64

pyopenxlsx-0.2.4-cp311-cp311-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl (826.9 kB view details)

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

pyopenxlsx-0.2.4-cp311-cp311-macosx_11_0_arm64.whl (527.3 kB view details)

Uploaded CPython 3.11macOS 11.0+ ARM64

File details

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

File metadata

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

File hashes

Hashes for pyopenxlsx-0.2.4.tar.gz
Algorithm Hash digest
SHA256 bf02fdba05c18cce6241d14968a31e6f0747a24cefa6493967aca223aa063c0e
MD5 14b7c5c904056df42ff2d2a4b0510cdf
BLAKE2b-256 de604d76670e462a055ce310a5b3bf2eb89166038411adb984bcc4e7d33d8ace

See more details on using hashes here.

Provenance

The following attestation bundles were made for pyopenxlsx-0.2.4.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-0.2.4-cp314-cp314t-win_amd64.whl.

File metadata

  • Download URL: pyopenxlsx-0.2.4-cp314-cp314t-win_amd64.whl
  • Upload date:
  • Size: 566.3 kB
  • Tags: CPython 3.14t, Windows x86-64
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for pyopenxlsx-0.2.4-cp314-cp314t-win_amd64.whl
Algorithm Hash digest
SHA256 1dc9e71651772472d9e4acc86640417f9ce7301a8777685eb63168a319c3b088
MD5 ea271f1c7301522e0ccf14a00c7e6463
BLAKE2b-256 a082ce6de4268e0c63b9f023ec7054714a48339f0cb3296096314d066988c609

See more details on using hashes here.

Provenance

The following attestation bundles were made for pyopenxlsx-0.2.4-cp314-cp314t-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-0.2.4-cp314-cp314t-win32.whl.

File metadata

  • Download URL: pyopenxlsx-0.2.4-cp314-cp314t-win32.whl
  • Upload date:
  • Size: 479.4 kB
  • Tags: CPython 3.14t, Windows x86
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for pyopenxlsx-0.2.4-cp314-cp314t-win32.whl
Algorithm Hash digest
SHA256 8f9aa491c3579c85ac8be9ea9ce50fe037b098cf146bb3f0d0d5a61bc8cc4fd0
MD5 a26ec070d4d93e7e43467cfd20dc0a76
BLAKE2b-256 006afcde9685e920fd11131308eaef83fda563ab5b0680366ab00146f0b4436f

See more details on using hashes here.

Provenance

The following attestation bundles were made for pyopenxlsx-0.2.4-cp314-cp314t-win32.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-0.2.4-cp314-cp314t-musllinux_1_2_x86_64.whl.

File metadata

File hashes

Hashes for pyopenxlsx-0.2.4-cp314-cp314t-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 7250cba96143987ed585c9a07c540b7aeab1268d22cbae410889ced5dda559fa
MD5 b22da5c0f1c9e66fffa1a4569a78e9ea
BLAKE2b-256 2b6a1700913a733dcabe96ac33865e10f6ede5272e7959080dac929c480b2f7f

See more details on using hashes here.

Provenance

The following attestation bundles were made for pyopenxlsx-0.2.4-cp314-cp314t-musllinux_1_2_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-0.2.4-cp314-cp314t-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for pyopenxlsx-0.2.4-cp314-cp314t-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 28356b2fe60aa0601b9e5f7e4a5b1cffa1f5954e23b5a83b1e8dcd69119632b3
MD5 03c5dc4c403000a0e989a8745f0ca9fd
BLAKE2b-256 b5bb8c878525ae857b19f31ead7b4a97d1fdc1d914c4309af9fb07d794380947

See more details on using hashes here.

Provenance

The following attestation bundles were made for pyopenxlsx-0.2.4-cp314-cp314t-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-0.2.4-cp314-cp314t-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for pyopenxlsx-0.2.4-cp314-cp314t-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 82644159add17799d7b257bc426d488a52690bcd06f79f585e69ee1944fcd945
MD5 7cfe362c8fb94500693d5360522eb0df
BLAKE2b-256 e7f3416b1061223b09f57df0c3783f03b267f9d5b3637c1df421d2d6a7f40520

See more details on using hashes here.

Provenance

The following attestation bundles were made for pyopenxlsx-0.2.4-cp314-cp314t-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-0.2.4-cp314-cp314-win_amd64.whl.

File metadata

  • Download URL: pyopenxlsx-0.2.4-cp314-cp314-win_amd64.whl
  • Upload date:
  • Size: 528.3 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

Hashes for pyopenxlsx-0.2.4-cp314-cp314-win_amd64.whl
Algorithm Hash digest
SHA256 9f8d73907e82ad1f7cdc4394c07b54c2f3ed9c391097e8126d73f6498d7df1f0
MD5 39fc8ce7550225c217187a73c0a95a1d
BLAKE2b-256 6d6db16598fcce465009bc5ab2b1ebd1ca55860ea0c940add6e457b9d210980f

See more details on using hashes here.

Provenance

The following attestation bundles were made for pyopenxlsx-0.2.4-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-0.2.4-cp314-cp314-win32.whl.

File metadata

  • Download URL: pyopenxlsx-0.2.4-cp314-cp314-win32.whl
  • Upload date:
  • Size: 454.7 kB
  • Tags: CPython 3.14, Windows x86
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for pyopenxlsx-0.2.4-cp314-cp314-win32.whl
Algorithm Hash digest
SHA256 d534511a87feab7789b5eac74e846a5075194436f0a3840a5cfe0689578fb01f
MD5 7440f30c3c5bdca1b7fa0a1a9c26adc0
BLAKE2b-256 a91fb22692a1bfa83a37981916a920577a81abf11f6b9be9d4b125caf5a14d7e

See more details on using hashes here.

Provenance

The following attestation bundles were made for pyopenxlsx-0.2.4-cp314-cp314-win32.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-0.2.4-cp314-cp314-musllinux_1_2_x86_64.whl.

File metadata

File hashes

Hashes for pyopenxlsx-0.2.4-cp314-cp314-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 88ad0dcceecc714a0826369579c89927c29445a4948ebbe4fafca47172a4629f
MD5 dd2039b6f770618f6ae9207cc442b9c4
BLAKE2b-256 b2df259ae9dce61d8fc4068cb56e34ca0cb75824e7cdbae117721fc4db161ac2

See more details on using hashes here.

Provenance

The following attestation bundles were made for pyopenxlsx-0.2.4-cp314-cp314-musllinux_1_2_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-0.2.4-cp314-cp314-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for pyopenxlsx-0.2.4-cp314-cp314-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 811c6a3a874fb490014facc5d7852d11367fa1388934ea1e88ba26f36ed94add
MD5 049bf744e94a68f6bc5315e2f037368e
BLAKE2b-256 6e38af999cd9e84222c904a54cd2014e58734db38ef76b3d09b1f8097e634743

See more details on using hashes here.

Provenance

The following attestation bundles were made for pyopenxlsx-0.2.4-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-0.2.4-cp314-cp314-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for pyopenxlsx-0.2.4-cp314-cp314-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 b795398a40fc01bbb7ed2296bb88956594ef3e3e41e9f1905d02a79f9b208e26
MD5 d172a06255fa0f79ddcb9f989c3fa894
BLAKE2b-256 4caf06e5242cfb82d7a4de71ef7987533345a9c9f40f883fdb83fb8203eeb1b8

See more details on using hashes here.

Provenance

The following attestation bundles were made for pyopenxlsx-0.2.4-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-0.2.4-cp313-cp313-win_amd64.whl.

File metadata

  • Download URL: pyopenxlsx-0.2.4-cp313-cp313-win_amd64.whl
  • Upload date:
  • Size: 513.7 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

Hashes for pyopenxlsx-0.2.4-cp313-cp313-win_amd64.whl
Algorithm Hash digest
SHA256 915f7b74b739f69619387b96b37129d8090d59d419226001b238511dc77a9550
MD5 52420d107006975344f4429c6951cbc2
BLAKE2b-256 89689ebb9aaba9afc5e4c2c0dc4d7e36d759853014e002d92926c4459d82353b

See more details on using hashes here.

Provenance

The following attestation bundles were made for pyopenxlsx-0.2.4-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-0.2.4-cp313-cp313-win32.whl.

File metadata

  • Download URL: pyopenxlsx-0.2.4-cp313-cp313-win32.whl
  • Upload date:
  • Size: 447.3 kB
  • Tags: CPython 3.13, Windows x86
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for pyopenxlsx-0.2.4-cp313-cp313-win32.whl
Algorithm Hash digest
SHA256 aa9ce9740b6170624f92ed335b3d9e90a768d7b30daacf1504a1a7ec97bf8ad5
MD5 8c39e06b9e04f1dc911a6fe6dbf37984
BLAKE2b-256 c99c6cb3fb9fff497f70914a27b0587288e605a428c9f3a41a5f1a9e1d6c6168

See more details on using hashes here.

Provenance

The following attestation bundles were made for pyopenxlsx-0.2.4-cp313-cp313-win32.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-0.2.4-cp313-cp313-musllinux_1_2_x86_64.whl.

File metadata

File hashes

Hashes for pyopenxlsx-0.2.4-cp313-cp313-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 5ce002e7c86d837cf54183e9fab07d85f83b9d24dc53d6b67eb4c2232645b324
MD5 ab49419c85356365db0ebd43028527b1
BLAKE2b-256 67e75b27783038914c61eb15045adcccc69f061ef4bb7c69043490eeec25b755

See more details on using hashes here.

Provenance

The following attestation bundles were made for pyopenxlsx-0.2.4-cp313-cp313-musllinux_1_2_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-0.2.4-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for pyopenxlsx-0.2.4-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 c029ca5514a6a5be133722d5b307482a64fab8a6b03731331fe3a23da3360088
MD5 917d12b0f8b89c9e6eb43627d70451cf
BLAKE2b-256 26d6589f4a91c9ead6f4e9449d17f3b2c6c99332457fcf64b322d275e0f3fcfc

See more details on using hashes here.

Provenance

The following attestation bundles were made for pyopenxlsx-0.2.4-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-0.2.4-cp313-cp313-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for pyopenxlsx-0.2.4-cp313-cp313-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 410584df14fc35f0812e74a5228e23fea61039c7d48d7616e936a572ee2cef9b
MD5 0bbc0cb02415925672f8e495d83a0e8d
BLAKE2b-256 3a63989e492265a3d1d757dde9fc6f31a20ae44aa9426b5a14d14dc6bac466d6

See more details on using hashes here.

Provenance

The following attestation bundles were made for pyopenxlsx-0.2.4-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-0.2.4-cp312-cp312-win_amd64.whl.

File metadata

  • Download URL: pyopenxlsx-0.2.4-cp312-cp312-win_amd64.whl
  • Upload date:
  • Size: 513.8 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

Hashes for pyopenxlsx-0.2.4-cp312-cp312-win_amd64.whl
Algorithm Hash digest
SHA256 4ba5902b0d45206fed0ef09ce1f916493f60a68d4b6c61cd7f5e305d052c0038
MD5 47a1c3d22252fcf0891cd8c0be143295
BLAKE2b-256 c294b72b5e8bb66b5dc521cea7c0fa046562c0c1f81f59f9c81a4805405c1f5b

See more details on using hashes here.

Provenance

The following attestation bundles were made for pyopenxlsx-0.2.4-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-0.2.4-cp312-cp312-win32.whl.

File metadata

  • Download URL: pyopenxlsx-0.2.4-cp312-cp312-win32.whl
  • Upload date:
  • Size: 447.2 kB
  • Tags: CPython 3.12, Windows x86
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for pyopenxlsx-0.2.4-cp312-cp312-win32.whl
Algorithm Hash digest
SHA256 9fdf0b98d73a940bf241b7aa95fe64aa394c1fa213476817cab2df81120f2c39
MD5 559dabe5a63f4f4b3411a847ebf378c2
BLAKE2b-256 776be8e9f89255dc7d7213506e772d77494b4cf50e0a8f6568947d0dcb936209

See more details on using hashes here.

Provenance

The following attestation bundles were made for pyopenxlsx-0.2.4-cp312-cp312-win32.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-0.2.4-cp312-cp312-musllinux_1_2_x86_64.whl.

File metadata

File hashes

Hashes for pyopenxlsx-0.2.4-cp312-cp312-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 4e1b8822b8e1c6a8f50ba53755c4c5b459f682b0ddcfcccbe9ec66a070ffaea7
MD5 14f51004861393cb962eebe8716b8d14
BLAKE2b-256 97b1afcbb460cabeeb518ca73a80aebdc7176757af1b8ace56a8e2308ea956bd

See more details on using hashes here.

Provenance

The following attestation bundles were made for pyopenxlsx-0.2.4-cp312-cp312-musllinux_1_2_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-0.2.4-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for pyopenxlsx-0.2.4-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 423a9e9f18dcb10154425acc51b9af155ed58604b717172a6559974aee30d812
MD5 f578055d3e3e0ca575a86fef4e6e20cb
BLAKE2b-256 5adebc0d8ad3924c0778240bb8e8ab37ed4f23b6b138c91289e9afa833b31362

See more details on using hashes here.

Provenance

The following attestation bundles were made for pyopenxlsx-0.2.4-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-0.2.4-cp312-cp312-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for pyopenxlsx-0.2.4-cp312-cp312-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 9710010c6e1113cadf4ba294a39859ab5ddfedcc4dec4f03eebd98ace8cd5aaa
MD5 cda4b0497a44db8d023f8387f19ddf3a
BLAKE2b-256 0aaf7f26b657210d16d8576fad9f9219ad7499d40022f7f751520fea7a460650

See more details on using hashes here.

Provenance

The following attestation bundles were made for pyopenxlsx-0.2.4-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-0.2.4-cp311-cp311-win_amd64.whl.

File metadata

  • Download URL: pyopenxlsx-0.2.4-cp311-cp311-win_amd64.whl
  • Upload date:
  • Size: 512.3 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

Hashes for pyopenxlsx-0.2.4-cp311-cp311-win_amd64.whl
Algorithm Hash digest
SHA256 6a9913ba0a88906a91479e7d40ff5b77ade5270a0f50cc4c2d1c563989ee08af
MD5 37198e18248d528b572134aaccb6f9f8
BLAKE2b-256 ed9d33175ea716e624bf5ee0acbd992ab0a5aceae703405c737567dd88b5a861

See more details on using hashes here.

Provenance

The following attestation bundles were made for pyopenxlsx-0.2.4-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-0.2.4-cp311-cp311-win32.whl.

File metadata

  • Download URL: pyopenxlsx-0.2.4-cp311-cp311-win32.whl
  • Upload date:
  • Size: 448.6 kB
  • Tags: CPython 3.11, Windows x86
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for pyopenxlsx-0.2.4-cp311-cp311-win32.whl
Algorithm Hash digest
SHA256 518df709c3a1000068d9e1af4078e1067f9dd804d3082c9e3c6bd25098a44f33
MD5 40241f0c7ef743a746e440354931ce82
BLAKE2b-256 c7ad3cc82ed897d29f6cf6e6d17658168eab057a3cff41b264e835664d263a41

See more details on using hashes here.

Provenance

The following attestation bundles were made for pyopenxlsx-0.2.4-cp311-cp311-win32.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-0.2.4-cp311-cp311-musllinux_1_2_x86_64.whl.

File metadata

File hashes

Hashes for pyopenxlsx-0.2.4-cp311-cp311-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 5629b0383d695c7d07d0fe3da608925771b10bece8b8fe395965f388dc0e5238
MD5 703f421f92c4c3f49fb210d0c066ce39
BLAKE2b-256 279edfb9d8d550b700806a6333719284205227811598f8be4ecb43915a8b6fd5

See more details on using hashes here.

Provenance

The following attestation bundles were made for pyopenxlsx-0.2.4-cp311-cp311-musllinux_1_2_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-0.2.4-cp311-cp311-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for pyopenxlsx-0.2.4-cp311-cp311-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 1cd75a112bb8962f95e0e2346cf42338a195c5de8cb3c7d4ad23246f289fc559
MD5 02a0273b086055a83dc28387260ab1eb
BLAKE2b-256 2c7aa5dae033dd3cfa6cb18113cb187131a9e9a69238f2cf3c066b663d4e70d0

See more details on using hashes here.

Provenance

The following attestation bundles were made for pyopenxlsx-0.2.4-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-0.2.4-cp311-cp311-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for pyopenxlsx-0.2.4-cp311-cp311-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 b2e42785bf169b7c1a7d8c0e2f5caa0e8c21be2000b5289cab57aa83ec5df1fc
MD5 c70bb0a9814c96a85cdc9dd787280e34
BLAKE2b-256 394c2b8670f448c9c1dee239cea7a85485528c506b6598d567a5ce8d608853f2

See more details on using hashes here.

Provenance

The following attestation bundles were made for pyopenxlsx-0.2.4-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