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)
  • filename: Optional. If provided, opens an existing file; otherwise, creates a new workbook.

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) None Save the workbook. Saves to original path if filename is omitted.
save_async(filename=None) 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.3.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.3-cp314-cp314t-win_amd64.whl (565.6 kB view details)

Uploaded CPython 3.14tWindows x86-64

pyopenxlsx-0.2.3-cp314-cp314t-win32.whl (479.1 kB view details)

Uploaded CPython 3.14tWindows x86

pyopenxlsx-0.2.3-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.3-cp314-cp314t-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl (833.4 kB view details)

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

pyopenxlsx-0.2.3-cp314-cp314t-macosx_11_0_arm64.whl (555.5 kB view details)

Uploaded CPython 3.14tmacOS 11.0+ ARM64

pyopenxlsx-0.2.3-cp314-cp314-win_amd64.whl (527.7 kB view details)

Uploaded CPython 3.14Windows x86-64

pyopenxlsx-0.2.3-cp314-cp314-win32.whl (454.0 kB view details)

Uploaded CPython 3.14Windows x86

pyopenxlsx-0.2.3-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.3-cp314-cp314-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl (828.8 kB view details)

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

pyopenxlsx-0.2.3-cp314-cp314-macosx_11_0_arm64.whl (528.7 kB view details)

Uploaded CPython 3.14macOS 11.0+ ARM64

pyopenxlsx-0.2.3-cp313-cp313-win_amd64.whl (513.2 kB view details)

Uploaded CPython 3.13Windows x86-64

pyopenxlsx-0.2.3-cp313-cp313-win32.whl (446.5 kB view details)

Uploaded CPython 3.13Windows x86

pyopenxlsx-0.2.3-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.3-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl (828.2 kB view details)

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

pyopenxlsx-0.2.3-cp313-cp313-macosx_11_0_arm64.whl (527.7 kB view details)

Uploaded CPython 3.13macOS 11.0+ ARM64

pyopenxlsx-0.2.3-cp312-cp312-win_amd64.whl (513.2 kB view details)

Uploaded CPython 3.12Windows x86-64

pyopenxlsx-0.2.3-cp312-cp312-win32.whl (446.5 kB view details)

Uploaded CPython 3.12Windows x86

pyopenxlsx-0.2.3-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.3-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl (828.8 kB view details)

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

pyopenxlsx-0.2.3-cp312-cp312-macosx_11_0_arm64.whl (527.6 kB view details)

Uploaded CPython 3.12macOS 11.0+ ARM64

pyopenxlsx-0.2.3-cp311-cp311-win_amd64.whl (511.8 kB view details)

Uploaded CPython 3.11Windows x86-64

pyopenxlsx-0.2.3-cp311-cp311-win32.whl (448.0 kB view details)

Uploaded CPython 3.11Windows x86

pyopenxlsx-0.2.3-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.3-cp311-cp311-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl (826.4 kB view details)

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

pyopenxlsx-0.2.3-cp311-cp311-macosx_11_0_arm64.whl (526.4 kB view details)

Uploaded CPython 3.11macOS 11.0+ ARM64

File details

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

File metadata

  • Download URL: pyopenxlsx-0.2.3.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.3.tar.gz
Algorithm Hash digest
SHA256 1f820ec0bd4dcfb303e37ac98fd4642342896adce6caafbc6ae38c533ccafac9
MD5 ca6b6d829a4f500e509b5f381c31829d
BLAKE2b-256 e48658a1401c75aa8fe90bc9a9911eb38e05e3919dabb6a08411006028fdc7dd

See more details on using hashes here.

Provenance

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

File metadata

  • Download URL: pyopenxlsx-0.2.3-cp314-cp314t-win_amd64.whl
  • Upload date:
  • Size: 565.6 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.3-cp314-cp314t-win_amd64.whl
Algorithm Hash digest
SHA256 1d31caffab036f686433086e759911a6253157330504af52252cf0af46deabcb
MD5 45526a56eb4055a9cb6d05e99d6b52a6
BLAKE2b-256 1dc73ea2ec481c621de845289a4a071a218410cc5e0d2aab5571f739ec26817d

See more details on using hashes here.

Provenance

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

File metadata

  • Download URL: pyopenxlsx-0.2.3-cp314-cp314t-win32.whl
  • Upload date:
  • Size: 479.1 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.3-cp314-cp314t-win32.whl
Algorithm Hash digest
SHA256 6ab6334468592cdab33cfc436a01fcbde95825e24df5fbcaeea6b14c16909101
MD5 56583512a1e7a38fdf96c6a4fc09dfd7
BLAKE2b-256 01c3f35fc242f3485b7e9fd4b3eb6adc48d3df9c549174ef7d3267be86001351

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for pyopenxlsx-0.2.3-cp314-cp314t-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 606c349589fdf7ba9b0cba6ec1285facf5edc9e2a26eb91173c449a4de56e275
MD5 b7a6b894844dca758d53299150e0ff52
BLAKE2b-256 272fed4147aaca6061f8f158b6758d6529576bd1d3bf2431b9a6a44b6d04935b

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for pyopenxlsx-0.2.3-cp314-cp314t-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 62f05c47cae266a645d838eb6ae967a3b279ffc6e9e0dff5862f7344ebfbf401
MD5 3e8effaa616574ebe77f16c27e777e8a
BLAKE2b-256 6b550446475dc048973c603a1659ffb382bd0d35e3da3c858d5a418b7c027be8

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for pyopenxlsx-0.2.3-cp314-cp314t-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 9b114fca4712a9119e93f75c9bed19fa594a154a5d7ee0846a5dfa6fb0e9f955
MD5 03c30765f6a53978b173b7d8053a1185
BLAKE2b-256 171f2bcb487e34d39df28913ce49ee9b919c6d0520300790344d5cabdc5f361a

See more details on using hashes here.

Provenance

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

File metadata

  • Download URL: pyopenxlsx-0.2.3-cp314-cp314-win_amd64.whl
  • Upload date:
  • Size: 527.7 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.3-cp314-cp314-win_amd64.whl
Algorithm Hash digest
SHA256 54dcd6386a6a549fe303d881aa1020a0ab8c07bf6b69c42a1aff809e987c050c
MD5 d50d4cf3057f5cafd2b09024d9b425bc
BLAKE2b-256 81e1ecbeb9952959d3873bfed6b17fb881b4dfca116f654afde45e363585a2d6

See more details on using hashes here.

Provenance

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

File metadata

  • Download URL: pyopenxlsx-0.2.3-cp314-cp314-win32.whl
  • Upload date:
  • Size: 454.0 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.3-cp314-cp314-win32.whl
Algorithm Hash digest
SHA256 27af003c1cc925febe2a10046dda4588ec1d8e577c9d072725a5b2d3d41b5430
MD5 69f145e7285eab0b4b9fd0c18bc04a44
BLAKE2b-256 5264bc128af75da0147915be5b0c1d707c7e2c8b941aa0ea05d830fe3b69f5a7

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for pyopenxlsx-0.2.3-cp314-cp314-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 5cfb5e3ef3e5ec695ddbac27518c2e0c35b27c66651a01987b1d2434700cdb82
MD5 b03c437a2f494b65bd64c566eb47c857
BLAKE2b-256 dd1b83cf9224e38cfbb706f2c74ccd11985a569a95399dc297a615b849575657

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for pyopenxlsx-0.2.3-cp314-cp314-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 f95619d77ab598f09c6d48d53bd73cec7468927885377fdbb54ee1d0437dc93a
MD5 79b7a28bd8b9d14e151b680c9e046a33
BLAKE2b-256 b9a8c7c5bdf9ca37538ddc6b03646008a0467baa7b1414256276e9e105cac8d6

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for pyopenxlsx-0.2.3-cp314-cp314-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 36016ab03cc2b894b3249c1733914a23fecec9f3ee2343016788f05835367197
MD5 d2521fe5715ed490e97d7f5d27a4e833
BLAKE2b-256 5b86c42236ae7c547347eff8e12ba2fe415a229227d6b984a268b315c4912fc7

See more details on using hashes here.

Provenance

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

File metadata

  • Download URL: pyopenxlsx-0.2.3-cp313-cp313-win_amd64.whl
  • Upload date:
  • Size: 513.2 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.3-cp313-cp313-win_amd64.whl
Algorithm Hash digest
SHA256 a362d7217c0994b41e6e38869a8332aae5cba80673b18e53518c76c13f6694bb
MD5 9f33c99e7cf94bd904577573c3ed1da7
BLAKE2b-256 318c7737395b86af201a3d7e289e56fc6570705207338ddd36d72b73d6f40435

See more details on using hashes here.

Provenance

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

File metadata

  • Download URL: pyopenxlsx-0.2.3-cp313-cp313-win32.whl
  • Upload date:
  • Size: 446.5 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.3-cp313-cp313-win32.whl
Algorithm Hash digest
SHA256 15ac232684238a37e37e8af51f517a87b2755def282e0855a6915623d9e58e77
MD5 cff2f719675df2898c2d089d6b83ee7a
BLAKE2b-256 c3e2c86d43ad8d7942526ba5683a7d71ba33e1d08b3565cf5056446d0ba3225a

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for pyopenxlsx-0.2.3-cp313-cp313-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 d5bc7137a254c10b0f148a9ee1c77fedb5d98ec8fb93280317917042a2a2313c
MD5 e8c97b48ef24a6cfa95db2ba321bf9f6
BLAKE2b-256 58c35edd287aaaf664f62fccd0b3f2281ee662d587b7269a89d0ef2b875835e1

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for pyopenxlsx-0.2.3-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 0d47c029db849947fdaa42a1792c6f1af26394f5e50cdf1eee478e4f36561952
MD5 194502a7eaecd95b11b554ecd4ef7fb0
BLAKE2b-256 84003f7e6958887d9d9ab1310a2d4946d83fd50fe4853558cfa1ff897faa2058

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for pyopenxlsx-0.2.3-cp313-cp313-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 ae051c30e51f8e9262025b6f20c65970a1ffe1d1694381606372f4b1d7c4524e
MD5 d9b2d9ae303d520038420c6c7d2799e3
BLAKE2b-256 2e9416ec9b9f0173674546661426c83baf3fb2c39a8b598b057964a443d18000

See more details on using hashes here.

Provenance

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

File metadata

  • Download URL: pyopenxlsx-0.2.3-cp312-cp312-win_amd64.whl
  • Upload date:
  • Size: 513.2 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.3-cp312-cp312-win_amd64.whl
Algorithm Hash digest
SHA256 c4e568e0dc4d2d60631c14b892489ba9aa242ba0aa9ef9240a37db20391aac97
MD5 5a777c991b5700a83bd7dd84c62c2a77
BLAKE2b-256 ee367d78d6a709505c24fbe4521fd33d060731cb530cc38d330162d171ea4df4

See more details on using hashes here.

Provenance

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

File metadata

  • Download URL: pyopenxlsx-0.2.3-cp312-cp312-win32.whl
  • Upload date:
  • Size: 446.5 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.3-cp312-cp312-win32.whl
Algorithm Hash digest
SHA256 f9347dd3dccdf32955e9cccda858f9f0a1f78e6c0ff0cdca3426cdcfb9801c9d
MD5 006d888f980d6c85b40ec6a5167bf0c1
BLAKE2b-256 954ce204d3372f51a2454093990fe134c85c8be989855aadd0e6dcbd9f17bdfe

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for pyopenxlsx-0.2.3-cp312-cp312-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 c80ea8e37b4195416ac3ce17375e27cfc700c3af48e100c6ce1a936b51c2852d
MD5 9cccc1de1a2d14709084998ee0de4e84
BLAKE2b-256 d6faed9877f577edbddf3310c8048cf169918712e72d5302561e98905f3612cb

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for pyopenxlsx-0.2.3-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 fe43cc446bee1ddf821fdc738e8cb35590756fd4c5fb47baff23feeef9badd1c
MD5 963ddfe51ee4752deb23bdcac5a5be85
BLAKE2b-256 e53c1879c3cba6b35872eab351e2772df6eeee254e1c6323a92de4de029d6236

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for pyopenxlsx-0.2.3-cp312-cp312-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 ad93f61c01e5a512b602d8df566bbb23ff74a58a8b47ddb5cb9b9ef9c53ccc81
MD5 3366a567faa0db6ede713794731728fa
BLAKE2b-256 f9d090bf5f0bbb028ec954c47b4e94f334c11a291b99132ebec4c366f7737689

See more details on using hashes here.

Provenance

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

File metadata

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

Hashes for pyopenxlsx-0.2.3-cp311-cp311-win_amd64.whl
Algorithm Hash digest
SHA256 a7279aa77d4513ee22f4838e1053d391356adb1225cc3aae1facc40c44535274
MD5 9e68b3b77f1478928343798c9e26d4cd
BLAKE2b-256 13d5a42261e566e165b5b5b0bd87b3f6a9bbba806f15f77c9932df8494e29c73

See more details on using hashes here.

Provenance

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

File metadata

  • Download URL: pyopenxlsx-0.2.3-cp311-cp311-win32.whl
  • Upload date:
  • Size: 448.0 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.3-cp311-cp311-win32.whl
Algorithm Hash digest
SHA256 0888c1930d71232001977b52daa50d3a08c8d0cdbef56afa91c82d726680ac64
MD5 362edcf320c9ba01ffabffa9fed62690
BLAKE2b-256 5190e2611f1ae36a2a67ed11fcb8038421414e9ac121036e13a211ea94b862df

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for pyopenxlsx-0.2.3-cp311-cp311-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 0763158105109f9feb95aa0215d2022786274695507d47a7055b1af808b5f353
MD5 e09143084c01672270d1990bf3d6b3c8
BLAKE2b-256 e3076d2fa6fc6917cba03dafe3519ee1a9792df9c32f4fe1a149b96bb91d12a9

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for pyopenxlsx-0.2.3-cp311-cp311-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 f0b92c36d67caf4083e8ac53300a44d247fab25152af0dc399df50f7991ce269
MD5 b8a369f7b9e564babc59ef9d9e84af2e
BLAKE2b-256 dbdf86f0a2810326f8e09d29f79f5db2bc80cd0ce3a22aecd811bf234baad75c

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for pyopenxlsx-0.2.3-cp311-cp311-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 53fbc8862fe3273c2b8a990b48448f5de927ec46e1cd892cd1d4439453d7c11a
MD5 958012411713fa6800d76931923096b7
BLAKE2b-256 1ac9a4b404ee3000628aa243dda90c541fdf63837b9ac7abce29c923898cab99

See more details on using hashes here.

Provenance

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