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.6.tar.gz (749.1 kB 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.6-cp314-cp314-win_amd64.whl (538.4 kB view details)

Uploaded CPython 3.14Windows x86-64

pyopenxlsx-0.2.6-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.6-cp314-cp314-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl (839.6 kB view details)

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

pyopenxlsx-0.2.6-cp314-cp314-macosx_11_0_arm64.whl (539.6 kB view details)

Uploaded CPython 3.14macOS 11.0+ ARM64

pyopenxlsx-0.2.6-cp313-cp313-win_amd64.whl (523.8 kB view details)

Uploaded CPython 3.13Windows x86-64

pyopenxlsx-0.2.6-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.6-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl (839.1 kB view details)

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

pyopenxlsx-0.2.6-cp313-cp313-macosx_11_0_arm64.whl (538.3 kB view details)

Uploaded CPython 3.13macOS 11.0+ ARM64

pyopenxlsx-0.2.6-cp312-cp312-win_amd64.whl (523.8 kB view details)

Uploaded CPython 3.12Windows x86-64

pyopenxlsx-0.2.6-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.6-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl (839.2 kB view details)

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

pyopenxlsx-0.2.6-cp312-cp312-macosx_11_0_arm64.whl (538.3 kB view details)

Uploaded CPython 3.12macOS 11.0+ ARM64

pyopenxlsx-0.2.6-cp311-cp311-win_amd64.whl (522.3 kB view details)

Uploaded CPython 3.11Windows x86-64

pyopenxlsx-0.2.6-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.6-cp311-cp311-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl (836.9 kB view details)

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

pyopenxlsx-0.2.6-cp311-cp311-macosx_11_0_arm64.whl (537.2 kB view details)

Uploaded CPython 3.11macOS 11.0+ ARM64

File details

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

File metadata

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

File hashes

Hashes for pyopenxlsx-0.2.6.tar.gz
Algorithm Hash digest
SHA256 2be2910184db46ce9cdd5413964d2ef83e93e4a4f8420f0805e2a04cd7411299
MD5 f3be928f6c20b1807bf1f0305dbec657
BLAKE2b-256 132b8b4b08a1ac4d96358b2925edb0c1b9ce12db0285e84c6fd7c515aafb4eb6

See more details on using hashes here.

Provenance

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

File metadata

  • Download URL: pyopenxlsx-0.2.6-cp314-cp314-win_amd64.whl
  • Upload date:
  • Size: 538.4 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.6-cp314-cp314-win_amd64.whl
Algorithm Hash digest
SHA256 c9373a7b686a307d6926b343612b70fb47ac420dcc999e46f70160c94ab28b01
MD5 44e5e659da4fc69d38f5e0239af31136
BLAKE2b-256 1d8ebd9a9f32847175ccb8de757cb7bd60a3a7b2f06168c6139c2702c48b561e

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for pyopenxlsx-0.2.6-cp314-cp314-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 5d12cf4d42d858171a214afa2ea603f317b6a624377ac0eaa30db7c0a63cb40b
MD5 5aca104ec2ca6c563591b6c4ee1e964e
BLAKE2b-256 3ec6ab27e541c2fec4f3323b132124dc2003a6b09b6b3a3364738eb99081adad

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for pyopenxlsx-0.2.6-cp314-cp314-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 514e17317e6fcd8e18c73a6be7960b3308336e182b4477e493b2050600996543
MD5 99fc5e0b8884b91a0a9affbba4ac9401
BLAKE2b-256 83623cecef646f432fd096956ad3625db98351b971df5228cfb32f5e9472bb9a

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for pyopenxlsx-0.2.6-cp314-cp314-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 47fd4f17e32d38cb232ef1b0d5dcd5849767a50ce6982d734d468d6c7e004bfb
MD5 c3c0feeebeec7aeac5001389f1ae65c4
BLAKE2b-256 60300fd300a79870f88b4527943d06248db02f1ec7c1b0db3b9dd2e6521df712

See more details on using hashes here.

Provenance

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

File metadata

  • Download URL: pyopenxlsx-0.2.6-cp313-cp313-win_amd64.whl
  • Upload date:
  • Size: 523.8 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.6-cp313-cp313-win_amd64.whl
Algorithm Hash digest
SHA256 ccf2d1ee2035599fd90e6c211b44d0474d8d54764bd92eb8e8a11a4d8f4fa153
MD5 e35af3836894bd923f375d3880f20a90
BLAKE2b-256 1b600b8245565e1d2379954960478c9d56093a00312b933afef7f9c864fad9f0

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for pyopenxlsx-0.2.6-cp313-cp313-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 7a6fc890fcc8c107a2258e9b473df064323de916f708331f6137ad829af31ea5
MD5 e46e14e64a8caea11bef4ca436d5402b
BLAKE2b-256 fad813d7f62ebee55f351fc7cc0777f95de7d143d7dfe8b27d2dd4e18d692a2d

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for pyopenxlsx-0.2.6-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 97423fa1a48aacf13ab18c1901df0e9779281a985dd1a712f119f1ce665a28dd
MD5 c8737b938ea573f95b66ac3cb340dbf0
BLAKE2b-256 2824ef5bee83bdf0e3bc205633659255154b6c0c14fbbb74dec5e81ce96e6aa5

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for pyopenxlsx-0.2.6-cp313-cp313-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 1c2502f0caf02f6ed8582d10bab3f2400f81242ee9594fb5ce4a770db9e152ba
MD5 0bf3f017a675c494f0036bc175a83830
BLAKE2b-256 9e0d8033da9b6e4ae4f365f8e589fad235be75b63608f4978584e7df186317a7

See more details on using hashes here.

Provenance

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

File metadata

  • Download URL: pyopenxlsx-0.2.6-cp312-cp312-win_amd64.whl
  • Upload date:
  • Size: 523.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.6-cp312-cp312-win_amd64.whl
Algorithm Hash digest
SHA256 89eb01d6c6b976b640d7b2665a19b554a0a84228e81b9932fdef25a029fbc42e
MD5 ede78f78d142b559448e6e4a7d4d8935
BLAKE2b-256 1066f2aba824b5964f385bef574b876e429ccfb754f4da6399378cd0a94e93c0

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for pyopenxlsx-0.2.6-cp312-cp312-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 7c41f16a3cda09893d3b0d8b31e9fac1a43a7677c9cd32fba30db055301c7ab3
MD5 65fc9bfa11ddea5575d9e0af964fe897
BLAKE2b-256 515f7bbb3e170e46460a48add81e53e93c5274c50c854918eebbed61fefd8b80

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for pyopenxlsx-0.2.6-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 3e0e2e5e691c46445026dcb341f17c7a553ada88e21c1b11ae71cfcae9e521bd
MD5 da3a1742e6e246cc51f197949005863f
BLAKE2b-256 4c5434cbbd438d2dbfe52a4990c69685064a5345b2204feb8e6c7f2b4bd089a9

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for pyopenxlsx-0.2.6-cp312-cp312-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 80ec61e1f6e73b9ea5c8f613a1fa9ff1d23628b2930f7210ed5f3b13d9eab5ab
MD5 8f75ce4da1b1e75696af8e8e17e890b9
BLAKE2b-256 8e111342e10ae0e87752b1a05b8e4b3105e0c18df81f3c3043597eae9021c31b

See more details on using hashes here.

Provenance

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

File metadata

  • Download URL: pyopenxlsx-0.2.6-cp311-cp311-win_amd64.whl
  • Upload date:
  • Size: 522.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.6-cp311-cp311-win_amd64.whl
Algorithm Hash digest
SHA256 81354ce37a07e3df9b44f2a061fe7b6180dd711edc6489afd2fe2d80109bceda
MD5 b00e2a658d570ed37e8fffd7e4fd4e3c
BLAKE2b-256 c470d93fcc4f120c29897a6d80dc491c1d7454add63bdda3781057068c4fad8b

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for pyopenxlsx-0.2.6-cp311-cp311-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 f48d65e8088466349af2e94e803e7da122abd00529300b37727e8925b90e5336
MD5 08a11e506dc98ba6abda312b0a9b3bda
BLAKE2b-256 9b46a89591643b745d23aacc8805928370dae62848edfabac03d554d34abf5b4

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for pyopenxlsx-0.2.6-cp311-cp311-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 e8ec032784a79939119a3820239d76caddb580a211db7c12977336aa28de421a
MD5 2199c79e3cd3846eed2ba124d20b5334
BLAKE2b-256 6d79cf13f8627d9ad9db70800f5ec4dd84a73ae310c263258f4fe5de743b0855

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for pyopenxlsx-0.2.6-cp311-cp311-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 8ab5e21a437212ac921f582702c458be8dd1bde1fd73e4fe48f3a5157cb48601
MD5 a283cc6b15a333734d2d661ee1a035a9
BLAKE2b-256 6177596de7ac069cfb52fda0be8f970ccc8ceea3fa360adacfad87c4420af978

See more details on using hashes here.

Provenance

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