Skip to main content

Python bindings for OpenXLSX using nanobind

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 nanobind
Build System scikit-build-core & CMake

Installation

From PyPI (Recommended)

# Using pip
pip install pyopenxlsx

# Using uv
uv pip install pyopenxlsx

From Source

# Using uv
uv pip install .

# Or using pip
pip install .

Development Installation

uv pip install -e .

Quick Start

Create and Save a Workbook

from pyopenxlsx import Workbook

# Create a new workbook
with Workbook() as wb:
    ws = wb.active
    ws.title = "MySheet"
    
    # Write data
    ws["A1"].value = "Hello"
    ws["B1"].value = 42
    ws.cell(row=2, column=1).value = 3.14
    
    # Save
    wb.save("example.xlsx")

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.3.0.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.3.0-cp314-cp314-win_amd64.whl (457.6 kB view details)

Uploaded CPython 3.14Windows x86-64

pyopenxlsx-0.3.0-cp314-cp314-musllinux_1_2_x86_64.whl (1.2 MB view details)

Uploaded CPython 3.14musllinux: musl 1.2+ x86-64

pyopenxlsx-0.3.0-cp314-cp314-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl (674.7 kB view details)

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

pyopenxlsx-0.3.0-cp314-cp314-macosx_11_0_arm64.whl (419.7 kB view details)

Uploaded CPython 3.14macOS 11.0+ ARM64

pyopenxlsx-0.3.0-cp313-cp313-win_amd64.whl (445.0 kB view details)

Uploaded CPython 3.13Windows x86-64

pyopenxlsx-0.3.0-cp313-cp313-musllinux_1_2_x86_64.whl (1.2 MB view details)

Uploaded CPython 3.13musllinux: musl 1.2+ x86-64

pyopenxlsx-0.3.0-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl (674.5 kB view details)

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

pyopenxlsx-0.3.0-cp313-cp313-macosx_11_0_arm64.whl (419.7 kB view details)

Uploaded CPython 3.13macOS 11.0+ ARM64

pyopenxlsx-0.3.0-cp312-cp312-win_amd64.whl (445.0 kB view details)

Uploaded CPython 3.12Windows x86-64

pyopenxlsx-0.3.0-cp312-cp312-musllinux_1_2_x86_64.whl (1.2 MB view details)

Uploaded CPython 3.12musllinux: musl 1.2+ x86-64

pyopenxlsx-0.3.0-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl (674.5 kB view details)

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

pyopenxlsx-0.3.0-cp312-cp312-macosx_11_0_arm64.whl (419.7 kB view details)

Uploaded CPython 3.12macOS 11.0+ ARM64

pyopenxlsx-0.3.0-cp311-cp311-win_amd64.whl (445.4 kB view details)

Uploaded CPython 3.11Windows x86-64

pyopenxlsx-0.3.0-cp311-cp311-musllinux_1_2_x86_64.whl (1.2 MB view details)

Uploaded CPython 3.11musllinux: musl 1.2+ x86-64

pyopenxlsx-0.3.0-cp311-cp311-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl (675.2 kB view details)

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

pyopenxlsx-0.3.0-cp311-cp311-macosx_11_0_arm64.whl (421.0 kB view details)

Uploaded CPython 3.11macOS 11.0+ ARM64

File details

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

File metadata

  • Download URL: pyopenxlsx-0.3.0.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.3.0.tar.gz
Algorithm Hash digest
SHA256 ba73bc931882d1f8406e84f99051a6332adf205770ac4705d8221664b2574e21
MD5 3f0d2b36704df5e2cab67a69bb86a8d2
BLAKE2b-256 885c41f33e90b4669a732e639f27333cfb10015287462dd639887512442f1f38

See more details on using hashes here.

Provenance

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

Publisher: build.yml on twn39/pyopenxlsx

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

File details

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

File metadata

  • Download URL: pyopenxlsx-0.3.0-cp314-cp314-win_amd64.whl
  • Upload date:
  • Size: 457.6 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.3.0-cp314-cp314-win_amd64.whl
Algorithm Hash digest
SHA256 1347eb4e2c6ecb6fbbb0b71f13a2aaa6f9ff3b07b493a2b3eefd66393e0a486d
MD5 318997597ded1790dc5af5a56e3bce67
BLAKE2b-256 8aa988d598fdaba001e88e492d56bc3b1b74fb26d9e0d79351b055c2b6bcd557

See more details on using hashes here.

Provenance

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

Publisher: build.yml on twn39/pyopenxlsx

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

File details

Details for the file pyopenxlsx-0.3.0-cp314-cp314-musllinux_1_2_x86_64.whl.

File metadata

File hashes

Hashes for pyopenxlsx-0.3.0-cp314-cp314-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 af74ce7dea0157e4888b4e8a769679c877a8e57d0702a85d63711a3851365676
MD5 5a3152bd809eab106e36a18c7066b407
BLAKE2b-256 17ece1937e16cb8f8f46f303398d0dae9398ee5b198ed4f11206ef5afbd5bef5

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for pyopenxlsx-0.3.0-cp314-cp314-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 9adccd67c7e274c1addca4f38e045e6b90cd54b6f5ba74ea0593b5a569234d39
MD5 a569776913642b2a592112bcfc65b682
BLAKE2b-256 4b4fdd9ca67d8af51c186554d4bae908d6ccb75c1264ce31022108feaa0f52d4

See more details on using hashes here.

Provenance

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

Publisher: build.yml on twn39/pyopenxlsx

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

File details

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

File metadata

File hashes

Hashes for pyopenxlsx-0.3.0-cp314-cp314-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 af24a1202b64326e86d88a3d6c8cc045a37fa8d5109763be72c018f4eedb2b2a
MD5 8cd2c070276657a922eb25f1ce4279ba
BLAKE2b-256 7e68531828d954eadd516f6591e7e2c7bc0d1d41f2a777f6cf8a91c10a225991

See more details on using hashes here.

Provenance

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

Publisher: build.yml on twn39/pyopenxlsx

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

File details

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

File metadata

  • Download URL: pyopenxlsx-0.3.0-cp313-cp313-win_amd64.whl
  • Upload date:
  • Size: 445.0 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.3.0-cp313-cp313-win_amd64.whl
Algorithm Hash digest
SHA256 249a0251f51f2a1917c29b506f8398c593c89f8f63fa45aeb8872a7d7d84cf29
MD5 6b7aae5b157902cad98e2f6cfb57e37f
BLAKE2b-256 398c420525025fe43ff13e1b6280061ec23b76b8fff02b11012819835cb3083a

See more details on using hashes here.

Provenance

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

Publisher: build.yml on twn39/pyopenxlsx

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

File details

Details for the file pyopenxlsx-0.3.0-cp313-cp313-musllinux_1_2_x86_64.whl.

File metadata

File hashes

Hashes for pyopenxlsx-0.3.0-cp313-cp313-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 b5b5ed8cd92a53739d7b0ddd771f7edb81a2a40f47c0ef7e3514ec71740bf209
MD5 905106593cc05d076b71031d1bdc831c
BLAKE2b-256 2e732cab82de0802bbb4afbff500ec1d3a91a6b56b9efa7422b4a491b0f141d5

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for pyopenxlsx-0.3.0-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 b58805be7a2621d3622fa004a37d4d3ea65f148e69e7939647d68ac6eea937ac
MD5 669d065c261697c36acb08824b51916b
BLAKE2b-256 a75e3718e8a6b768889ce2a5949c67274167e942d552ddecd4749a1852eb39d5

See more details on using hashes here.

Provenance

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

Publisher: build.yml on twn39/pyopenxlsx

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

File details

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

File metadata

File hashes

Hashes for pyopenxlsx-0.3.0-cp313-cp313-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 c782ab65f91a1e65fb19e5f0a4d01fa0f82fac4e5b4e7ef26c8565582f3142a4
MD5 2b86089eb89710c00b0f5b05011e7de7
BLAKE2b-256 cc9177b7e1a471b65727e2f7f85fdb2eb6b725127943b9aafd081ab57bfdb112

See more details on using hashes here.

Provenance

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

Publisher: build.yml on twn39/pyopenxlsx

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

File details

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

File metadata

  • Download URL: pyopenxlsx-0.3.0-cp312-cp312-win_amd64.whl
  • Upload date:
  • Size: 445.0 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.3.0-cp312-cp312-win_amd64.whl
Algorithm Hash digest
SHA256 515f0f97484d2d7e261c10d41b32d0bda6ff18c42725ac4e06364e2c04d0ec45
MD5 a513ec8d38360f0b087a00da071b5451
BLAKE2b-256 1245c5759750d86fe221cc2c9d724efca1a074c0873eebfd8addef3a3b903446

See more details on using hashes here.

Provenance

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

Publisher: build.yml on twn39/pyopenxlsx

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

File details

Details for the file pyopenxlsx-0.3.0-cp312-cp312-musllinux_1_2_x86_64.whl.

File metadata

File hashes

Hashes for pyopenxlsx-0.3.0-cp312-cp312-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 b5b014216e350ef31c9d6ca8df27d260e1312f787c9cfb8f1d65cacba69f2b54
MD5 52362aebaf0f596e66125629b468c99c
BLAKE2b-256 a38ca585fdc77838567a5355f2dfd92d07d3cc86f8ab09f4a57cf05ad21a68e8

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for pyopenxlsx-0.3.0-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 e9c0897e68ea4b27d5ec9968fd2a82d20f57f9e52affac9bf9efe1c7108fbcee
MD5 a3cc33c1be6bcf269f83b29ca5d96612
BLAKE2b-256 e8c4cc048ac4a012fdaf4a5c288d17e5e61d523645f96a7770c1fb892dc4b764

See more details on using hashes here.

Provenance

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

Publisher: build.yml on twn39/pyopenxlsx

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

File details

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

File metadata

File hashes

Hashes for pyopenxlsx-0.3.0-cp312-cp312-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 49bac62e577cada7744a50f4465a7e01937e4889ee2827d1735352df7e43bdd3
MD5 a23a43076d9bec5d695d9cd869d5b9f2
BLAKE2b-256 17cbcc6b8366ea1bcfa3a45f18d7d9225e5207dee1e6fa2571d737ab15c075e8

See more details on using hashes here.

Provenance

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

Publisher: build.yml on twn39/pyopenxlsx

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

File details

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

File metadata

  • Download URL: pyopenxlsx-0.3.0-cp311-cp311-win_amd64.whl
  • Upload date:
  • Size: 445.4 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.3.0-cp311-cp311-win_amd64.whl
Algorithm Hash digest
SHA256 f2e7f4425da44f121428dc5914a7430c6f6bdb821f34024de10d80466fbade92
MD5 7869965ea2038848b7831563b95fe992
BLAKE2b-256 7fe6f2e8c0026133dc256e66515963bbd2c3ebf76eefe07416ee72d51e63392b

See more details on using hashes here.

Provenance

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

Publisher: build.yml on twn39/pyopenxlsx

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

File details

Details for the file pyopenxlsx-0.3.0-cp311-cp311-musllinux_1_2_x86_64.whl.

File metadata

File hashes

Hashes for pyopenxlsx-0.3.0-cp311-cp311-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 a764f272f6492a0b0fd9b1f2a43b83415c15ca67e3417d34c519f79adc61652d
MD5 26c5921d73dbc5dec01d28b8e1c95c49
BLAKE2b-256 1efc5867e8bdb626d83b1d2e71cb439ce943cba0aa77ab16d1eaef9251d56e60

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for pyopenxlsx-0.3.0-cp311-cp311-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 f5aca8f860b69430663487d1fede785f90cec3bf8b27ff4fa4a4ed509749e869
MD5 1b2e25f9c316ee3485ede3cdb6d8695a
BLAKE2b-256 5bf2ec7dcb0f6ac98fd877192372fbb2bcdc5dfb12d1c402d78654732d880927

See more details on using hashes here.

Provenance

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

Publisher: build.yml on twn39/pyopenxlsx

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

File details

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

File metadata

File hashes

Hashes for pyopenxlsx-0.3.0-cp311-cp311-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 5dd3feffe60f92c894a416d1876f67665f860dc9ac7314d83adb55abbc66e1e7
MD5 be185b2322dd2a8a7256761186847f69
BLAKE2b-256 b6ed5b20cfeb2cc5cc316ed6917bd9f3f1b454385104325619e4801ac5be27b0

See more details on using hashes here.

Provenance

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

Publisher: build.yml on twn39/pyopenxlsx

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

Supported by

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