Skip to main content

Python bindings for OpenXLSX using nanobind

Project description

PyOpenXLSX

PyPI version Python versions Downloads Build Status Codecov 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) ~7.5ms ~151ms 20x
Write (1,000 cells) ~5ms ~8.4ms 1.7x
Write (50,000 cells) ~178ms ~318ms 1.8x
Bulk Write (50,000 cells) ~80ms N/A 4.0x
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

BSD 3-Clause License. The underlying OpenXLSX library is licensed under the MIT License, and nanobind under a BSD-style license.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

pyopenxlsx-0.3.1.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.1-cp314-cp314-win_amd64.whl (474.7 kB view details)

Uploaded CPython 3.14Windows x86-64

pyopenxlsx-0.3.1-cp314-cp314-musllinux_1_2_x86_64.whl (937.7 kB view details)

Uploaded CPython 3.14musllinux: musl 1.2+ x86-64

pyopenxlsx-0.3.1-cp314-cp314-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl (435.3 kB view details)

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

pyopenxlsx-0.3.1-cp314-cp314-macosx_11_0_arm64.whl (435.9 kB view details)

Uploaded CPython 3.14macOS 11.0+ ARM64

pyopenxlsx-0.3.1-cp313-cp313-win_amd64.whl (462.2 kB view details)

Uploaded CPython 3.13Windows x86-64

pyopenxlsx-0.3.1-cp313-cp313-musllinux_1_2_x86_64.whl (937.7 kB view details)

Uploaded CPython 3.13musllinux: musl 1.2+ x86-64

pyopenxlsx-0.3.1-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl (435.0 kB view details)

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

pyopenxlsx-0.3.1-cp313-cp313-macosx_11_0_arm64.whl (435.8 kB view details)

Uploaded CPython 3.13macOS 11.0+ ARM64

pyopenxlsx-0.3.1-cp312-cp312-win_amd64.whl (462.5 kB view details)

Uploaded CPython 3.12Windows x86-64

pyopenxlsx-0.3.1-cp312-cp312-musllinux_1_2_x86_64.whl (937.6 kB view details)

Uploaded CPython 3.12musllinux: musl 1.2+ x86-64

pyopenxlsx-0.3.1-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl (435.2 kB view details)

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

pyopenxlsx-0.3.1-cp312-cp312-macosx_11_0_arm64.whl (435.8 kB view details)

Uploaded CPython 3.12macOS 11.0+ ARM64

pyopenxlsx-0.3.1-cp311-cp311-win_amd64.whl (461.5 kB view details)

Uploaded CPython 3.11Windows x86-64

pyopenxlsx-0.3.1-cp311-cp311-musllinux_1_2_x86_64.whl (938.3 kB view details)

Uploaded CPython 3.11musllinux: musl 1.2+ x86-64

pyopenxlsx-0.3.1-cp311-cp311-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl (435.9 kB view details)

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

pyopenxlsx-0.3.1-cp311-cp311-macosx_11_0_arm64.whl (437.0 kB view details)

Uploaded CPython 3.11macOS 11.0+ ARM64

File details

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

File metadata

  • Download URL: pyopenxlsx-0.3.1.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.1.tar.gz
Algorithm Hash digest
SHA256 563910bcb9e88cf8be68a1117384de33a73ed8af8dedfa3b91ec1f9367bcd76e
MD5 9315914e673697112c6dc0672534b298
BLAKE2b-256 b4d4e4aef6399ef4988dee6e631e5366bb8ff439639d31dc0a5960290af743e0

See more details on using hashes here.

Provenance

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

File metadata

  • Download URL: pyopenxlsx-0.3.1-cp314-cp314-win_amd64.whl
  • Upload date:
  • Size: 474.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.3.1-cp314-cp314-win_amd64.whl
Algorithm Hash digest
SHA256 d8c65697b46a566dde2d7de04fdb72d6c2acc4a1985703e21a90b57040a11c92
MD5 ce1db3b5eecefaf180ccc8a55744bd5c
BLAKE2b-256 963012e0185c8cfc6e05e48b657b4c8e3f9682dfb0af260f9e26dd99d0b4f10a

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for pyopenxlsx-0.3.1-cp314-cp314-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 5824df073f80fd2adaf6c40f8dfb5a42f070b4e42225b3cee87951e8a8b3e4b2
MD5 e03adf86c3ff2126ee657b8f3b63ef51
BLAKE2b-256 52efb2f2cf2a761991dedfbeece2b4041795bca0a50f9e89624d941626871431

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for pyopenxlsx-0.3.1-cp314-cp314-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 fcca46bdfbdf10984c38405f8f0583e750dbc90b2c7fa696dc8ba9c0e37c7763
MD5 4a6f42f301db095bbfc6f1e85f3f4bf0
BLAKE2b-256 93c51c07fa7be0e12d799b2a6f57b7205c982c5bd780b359cb896f945cf45863

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for pyopenxlsx-0.3.1-cp314-cp314-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 b6e4ecf12599990a3511533577160c22bf6f3d04272e07cd8789d81287d52552
MD5 55b7cb427ef46040825c44d8c06ed9d7
BLAKE2b-256 28f028a0fd53ebe735bd67613a97e3131f76b33907e19d17b21958a64e511fd0

See more details on using hashes here.

Provenance

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

File metadata

  • Download URL: pyopenxlsx-0.3.1-cp313-cp313-win_amd64.whl
  • Upload date:
  • Size: 462.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.3.1-cp313-cp313-win_amd64.whl
Algorithm Hash digest
SHA256 a1abca531221beae9ab9be35ec07b3bead0166748bbb337b431651348e2d5fd8
MD5 98036585e5c2b20081bab76ca1c0e763
BLAKE2b-256 51a9dda56f9fcc712105cb0bc3a3d6e72d6c42d444ac7c30d83cc19c9a260b1b

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for pyopenxlsx-0.3.1-cp313-cp313-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 d4014979bb4a2d70e8b96df4807785c3e40aafabe8c7abafedab2510f3114dd1
MD5 1ef19a9e2067692dfba95cc10b003fb5
BLAKE2b-256 23c436c9e26b6aee72bc47f226b7446d85549e1432f52425ce5e14d370d79a87

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for pyopenxlsx-0.3.1-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 fb5e5efdd4701559e93637d5ae5a017b75ef56c5cee214c81d98667fd056e6f6
MD5 96cefd962b4d2b14395f2c9588eb8163
BLAKE2b-256 427ba6f41c59d48c9f7b589ce69c76fe9e5e7be652538a65d1b2eae41a27d00f

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for pyopenxlsx-0.3.1-cp313-cp313-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 b34840446ddd69601b4b844d16950c3c3f4b0fc777c9647fdec4ff5537dae625
MD5 ea9eb5bd1c77c19cbe5cc493adcdd583
BLAKE2b-256 94c2fb50011db64f48107e4787c810b02ae7ad842f157e49b35f7476b0fa231f

See more details on using hashes here.

Provenance

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

File metadata

  • Download URL: pyopenxlsx-0.3.1-cp312-cp312-win_amd64.whl
  • Upload date:
  • Size: 462.5 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.1-cp312-cp312-win_amd64.whl
Algorithm Hash digest
SHA256 dd5f3c9ff3e10cae23a43130fa6d2685ab9e035df2d6cd61246213fb02f7975d
MD5 38168dd4e7a22467652c9175ddf0efc6
BLAKE2b-256 acec243ba387d0e0f522e9b291b273db437636ab0e5187fe413b7a7220c63091

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for pyopenxlsx-0.3.1-cp312-cp312-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 ffd28907547c50b902c0474805b4d7696ca062b9be06c958d8646cc321f1b6ed
MD5 b1b19d136aa1dc57911b64c0b3befbbb
BLAKE2b-256 530377cd93f7739d7f4aa1457717a2f9e152b3dbada000a9bd5ba4d0f66ba09a

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for pyopenxlsx-0.3.1-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 24a099d7844f473b653cc63fba0881524c4f739cb82cb553518814ff13ac7473
MD5 367d93302d1aee1e1b8fdd9d30b55032
BLAKE2b-256 af88a74ef2d30af44dda9d542672d9b8f4ed7f7941ee711a288a87d29ac9262a

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for pyopenxlsx-0.3.1-cp312-cp312-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 5b99c8277ad881d2c74c6e97118354a605a93df9edb1a676e9dc26b24443e457
MD5 54998dc240ae9a2cf5cdc6d537229c69
BLAKE2b-256 cab4c0d1c52995db73e696de4e1b643727609011e7f194c456ed89a4b83a3336

See more details on using hashes here.

Provenance

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

File metadata

  • Download URL: pyopenxlsx-0.3.1-cp311-cp311-win_amd64.whl
  • Upload date:
  • Size: 461.5 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.1-cp311-cp311-win_amd64.whl
Algorithm Hash digest
SHA256 49b34e6c5456f58106af9778939f00c6d7d0fe0bbd8161a53668ac0a766dfce9
MD5 a60102f69bc5af7896d19fa6a2dadbfa
BLAKE2b-256 342289033798e821cd697fd39abf10b3d56c7f8cbce8cb7066a4844191a7f06e

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for pyopenxlsx-0.3.1-cp311-cp311-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 6dbc3b5872594ffca6e612881037d6df70783dc099bcf0f9a200548bdb4e04d7
MD5 db673a571c3f80c21f3f13894d2ac149
BLAKE2b-256 1f9eda40fe72cde8a84951eb0ec5132daa3810adbf85ad16717649738cc79373

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for pyopenxlsx-0.3.1-cp311-cp311-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 9a1968677458c1a8d7ac54b3b180c159eeeb5dc3707735061483677813921d04
MD5 6366e6228ea9a49a5b5c2f7cf821c265
BLAKE2b-256 3c74d35d4e423df16bda49cef0a5de5488ad397c23fd5208beda5374750c7e9a

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for pyopenxlsx-0.3.1-cp311-cp311-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 12d0d1eb209a9d293903baff246c722cc44ed94d75afd1549e864a1c90f9c870
MD5 c14d6eec215edba7fc23abf8a36a2838
BLAKE2b-256 e287d508bce22b618603481fb0a62e9cd4db179f5d5e436e11fbc7f484d8721e

See more details on using hashes here.

Provenance

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