Skip to main content

High-performance .xlsx reader/writer (C extension)

Project description

openexcel

A high-performance Python library for reading and writing .xlsx files, implemented as a C extension. Designed as a drop-in accelerator for workloads where openpyxl is too slow.

Why

openpyxl is pure Python. For large files (100k+ rows), the bottlenecks are ZIP extraction, XML parsing, and per-cell object allocation — all done in the Python interpreter. openexcel moves these to C:

  • Streaming SAX parsing via libexpat — never loads the full XML into memory
  • Flat sorted cell array — O(1) append during parse, O(1) sequential iteration
  • GIL released during read and write — other threads run freely
  • Vendored miniz — no external ZIP dependency

Benchmarked against openpyxl on mixed workloads (integers, floats, booleans, dates, strings):

Rows Write speedup Read speedup
1,000 8.5× 5.3×
10,000 8.8× 5.2×
50,000 8.1× 5.3×
100,000 8.0× 5.3×
250,000 7.8× 5.4×

~8× faster writes, ~5× faster reads across all sizes tested.

Feature benchmarks

Benchmarked on macOS arm64, Python 3.11. Each result is the median of 3 runs.

Benchmark openexcel openpyxl Speedup
Cell access (10k reads) 1.69 ms 1.82 ms 1.1×
Number format set (1k cells) 220 µs 429 µs 2.0×
Number format roundtrip (1k cells) 2.04 ms 18.04 ms 8.8×
Formula write (1k cells) 390 µs 942 µs 2.4×
Formula roundtrip (1k cells) 2.88 ms 23.09 ms 8.0×
Merged cells roundtrip (100 ranges) 366 µs 12.90 ms 35.2×
Column/row dimensions roundtrip (50+50) 329 µs 4.54 ms 13.8×
Named ranges roundtrip (20) 321 µs 3.36 ms 10.5×
Freeze panes roundtrip 525 µs 5.56 ms 10.6×
Hyperlinks roundtrip (50 cells) 662 µs 5.26 ms 7.9×
Data validation roundtrip (10 rules) 390 µs 3.44 ms 8.8×
Page setup roundtrip 355 µs 3.11 ms 8.8×
Sheet protection roundtrip 347 µs 3.42 ms 9.9×

The pattern: in-memory cell manipulation is ~2× faster; any operation involving save+load is 8–35× faster. The C XML serializer and SAX parser are where the largest gains appear.

Installation

pip install openexcel-c

Pre-built wheels are available for macOS (arm64, x86_64) and Linux (x86_64, aarch64) for Python 3.10–3.13.

Building from source

You need CMake ≥ 3.20, a C11 compiler, and libexpat development headers.

# macOS
brew install expat cmake

# Ubuntu/Debian
sudo apt-get install libexpat1-dev cmake

pip install openexcel-c --no-binary openexcel-c

Usage

Reading

import openexcel

wb = openexcel.load_workbook("data.xlsx")
ws = wb.active   # first sheet

# Iterate rows — returns tuples of Python values
for row in ws.iter_rows():
    print(row)   # e.g. (1, "hello", 3.14, True, datetime.date(2024, 6, 1))

# Slice a range
for row in ws.iter_rows(min_row=2, max_row=100, min_col=1, max_col=5):
    print(row)

Cell objects

# Single cell by A1 notation
cell = ws["A1"]
print(cell.value, cell.row, cell.column, cell.coordinate)  # 42, 1, 1, "A1"

# Single cell by row/column
cell = ws.cell(row=1, column=1)

# Range — returns tuple of tuples of Cell objects
cells = ws["A1:C3"]

# Set a value
cell.value = "hello"
cell.value = 3.14
cell.value = datetime.date(2024, 6, 1)

Cell values map to Python types:

Excel type Python type
Number float
String str
Boolean bool
Date / datetime datetime.date / datetime.datetime
Formula str (e.g. "=SUM(A1:A10)")
Empty None
Error str (e.g. "#DIV/0!")

Writing

import openexcel
import datetime

wb = openexcel.Workbook()
ws = wb.create_sheet("Sheet1")

ws.append(["Name", "Score", "Date"])
ws.append(["Alice", 98.5, datetime.date(2024, 6, 1)])
ws.append(["Bob",   72.0, datetime.date(2024, 6, 2)])

wb.save("output.xlsx")

Number formats

cell = ws["A1"]
cell.value = 0.1234
cell.number_format = "0.00%"   # displays as 12.34%

cell2 = ws["B1"]
cell2.value = 1234567.89
cell2.number_format = "#,##0.00"

# Read back the format string after loading
wb2 = openexcel.load_workbook("output.xlsx")
print(wb2[0]["A1"].number_format)  # "0.00%"

All built-in Excel format IDs (0–49) are recognized by format string. Custom format strings are assigned IDs starting at 164 and are round-tripped correctly.

Formulas

ws["A1"].value = 10
ws["A2"].value = 20
ws["A3"].value = "=SUM(A1:A2)"   # leading "=" marks a formula

# After save/load:
cell = wb2[0]["A3"]
print(cell.value)      # "=SUM(A1:A2)"
print(cell.data_type)  # "f"

Formulas are stored and round-tripped as strings. openexcel does not evaluate formulas — cached values from the original file are not preserved (matching openpyxl's default data_only=False behavior).

Sheet formatting

# Column and row dimensions
ws.set_column_width("A", 20)       # or set_column_width(1, 20)
ws.set_row_height(1, 30)

# Merged cells
ws.merge_cells("A1:C3")
ws.unmerge_cells("A1:C3")
print(ws.merged_cells)             # list of merged ranges

# Freeze panes
ws.freeze_panes = "B2"             # freeze row 1 and column A
ws.freeze_panes = None             # unfreeze

# Sheet view
ws.zoom_scale = 75
ws.show_gridlines = False
ws.tab_color = "FF0000"            # RRGGBB hex string

# Auto-filter
ws.auto_filter_ref = "A1:D1"

Fonts, fills, borders, and alignment

from openexcel import Font, PatternFill, Border, Side, Alignment

cell = ws["A1"]

# Font
cell.font = Font(name="Arial", size=14, bold=True, italic=False,
                 underline="single", color="FFFF0000")   # ARGB hex

# Fill
cell.fill = PatternFill(fill_type="solid", fgColor="FFFFFF00")   # ARGB hex

# Border
cell.border = Border(
    left=Side(style="thin"),
    right=Side(style="thin"),
    top=Side(style="medium"),
    bottom=Side(style="medium"),
)

# Alignment
cell.alignment = Alignment(horizontal="center", vertical="center",
                           wrap_text=True, indent=0)

# Read back
print(cell.font.bold)              # True
print(cell.fill.fill_type)         # "solid"
print(cell.border.left.style)      # "thin"
print(cell.alignment.horizontal)   # "center"

All style objects are immutable value types. Assigning a new style object replaces the cell's style while preserving any other styles already set (e.g., setting .font leaves .fill and .border unchanged). Style deduplication is handled automatically — identical styles share a single XF entry in styles.xml.

Available border styles: "thin", "medium", "thick", "dashed", "dotted", "double", "hair", "mediumDashed", and more (any valid OOXML border style string).

Hyperlinks

cell = ws["A1"]
cell.value = "Visit our site"
cell.hyperlink = "https://example.com"

# Read back after save/load
wb2 = openexcel.load_workbook("output.xlsx")
print(wb2[0]["A1"].hyperlink)   # "https://example.com"
print(wb2[0]["A1"].value)       # "Visit our site"

# Clear a hyperlink
cell.hyperlink = None

Hyperlinks are stored in the standard OOXML location (xl/worksheets/_rels/sheetN.xml.rels). Both external URLs and internal sheet anchors (e.g. "#Sheet2!A1") are supported. Hyperlinks compose with all other cell properties — a cell can have a hyperlink, a value, a font, and a number format simultaneously.

Data validation

from openexcel import DataValidation

# Drop-down list
dv = DataValidation(
    type="list",
    formula1='"Yes,No,Maybe"',
    sqref="A1:A100",
    show_error_message=True,
    error_title="Invalid input",
    error_message="Please choose Yes, No, or Maybe.",
)
ws.add_data_validation(dv)

# Whole number in range
dv2 = DataValidation(
    type="whole",
    operator="between",
    formula1="1",
    formula2="10",
    sqref="B1:B50",
    allow_blank=True,
)
ws.add_data_validation(dv2)

# Read back after save/load
wb2 = openexcel.load_workbook("output.xlsx")
validations = wb2[0].data_validations   # list of DataValidation objects
print(validations[0].type)             # "list"
print(validations[0].sqref)            # "A1:A100"

DataValidation constructor parameters:

Parameter Type Description
type str "list", "whole", "decimal", "date", "time", "textLength", "custom"
operator str "between", "notBetween", "equal", "notEqual", "greaterThan", "lessThan", "greaterThanOrEqual", "lessThanOrEqual"
formula1 str First value/formula
formula2 str Second value/formula (for between/notBetween)
sqref str Cell range (e.g. "A1:A100")
allow_blank bool Allow empty cells (default False)
show_drop_down bool Hide the dropdown arrow for list validations (default False)
show_error_message bool Show error alert (default False)
error_title str Error dialog title
error_message str Error dialog message
error_style str "stop", "warning", or "information"
show_input_message bool Show input prompt (default False)
prompt_title str Input prompt title
prompt_message str Input prompt message

Page setup and print options

from openexcel import PageSetup, PageMargins, PrintOptions

# Page setup
ws.page_setup = PageSetup(
    orientation="landscape",  # "portrait" or "landscape"
    paper_size=9,             # 9 = A4, 1 = Letter
    scale=75,                 # zoom percentage (10–400)
)

# Fit-to-page mode
ws.page_setup = PageSetup(
    fit_to_page=True,
    fit_to_width=1,
    fit_to_height=0,          # 0 = unlimited pages tall
)

# Page margins (in inches)
ws.page_margins = PageMargins(
    left=0.5, right=0.5,
    top=1.0,  bottom=1.0,
    header=0.5, footer=0.5,
)

# Print options
ws.print_options = PrintOptions(
    grid_lines=True,          # print gridlines
    headings=True,            # print row/column headings
    horizontal_centered=True, # center content horizontally on page
    vertical_centered=True,   # center content vertically on page
)

# Read back
ws2 = openexcel.load_workbook("output.xlsx")[0]
print(ws2.page_setup.orientation)       # "landscape"
print(ws2.page_margins.left)            # 0.5
print(ws2.print_options.grid_lines)     # True

Common paper size codes: 1 = Letter (8.5×11"), 9 = A4, 5 = Legal, 13 = B5.

Sheet protection

from openexcel import SheetProtection

# Lock the sheet (prevent edits)
ws.protection = SheetProtection(
    sheet=True,           # enable protection
    format_cells=False,   # deny format-cells (True = allow)
    insert_rows=False,    # deny inserting rows
    delete_rows=False,    # deny deleting rows
)

# Password-protect (password hash must be pre-computed)
ws.protection = SheetProtection(
    sheet=True,
    password_hash="ABCD",         # legacy XOR hash
)

# Read back
ws2 = openexcel.load_workbook("output.xlsx")[0]
prot = ws2.protection
if prot is not None:
    print(prot.sheet)         # True
    print(prot.format_cells)  # False

# Remove protection
ws.protection = None

SheetProtection constructor parameters — all optional, default False/None:

Parameter Type Description
sheet bool Enable sheet protection
objects bool Protect objects
scenarios bool Protect scenarios
format_cells bool Allow formatting cells (inverted: True = allowed)
format_columns bool Allow formatting columns
format_rows bool Allow formatting rows
insert_columns bool Allow inserting columns
insert_rows bool Allow inserting rows
insert_hyperlinks bool Allow inserting hyperlinks
delete_columns bool Allow deleting columns
delete_rows bool Allow deleting rows
select_locked bool Allow selecting locked cells
sort bool Allow sorting
auto_filter bool Allow using auto-filter
pivot_tables bool Allow using pivot tables
select_unlocked bool Allow selecting unlocked cells
password_hash str Legacy XOR password hash
algorithm_name str Hash algorithm (e.g. "SHA-512")
hash_value str Base64-encoded hash (modern protection)
salt_value str Base64-encoded salt
spin_count int Spin count for hash iterations

Note on format_cells and similar flags: In OOXML, formatCells="1" means the action is denied. openexcel inverts this for readability — format_cells=True means the action is allowed.

Images

from openexcel import Image

# Load from file
img = Image("logo.png")

# Or pass raw bytes (useful when the file isn't on disk)
img = Image("logo.png", data=png_bytes)

# Optional: override display size in pixels
img = Image("logo.png", width=200, height=100)

# Anchor to a cell
ws.add_image(img, "B2")

# Read back after save/load
wb2 = openexcel.load_workbook("output.xlsx")
images = wb2[0].images          # list of Image objects
print(len(images))              # 1
print(images[0].ext)            # "png"
print(images[0].col, images[0].row)   # anchor column/row (0-based)

Image constructor parameters:

Parameter Type Description
filename str Path to image file (PNG, JPEG, GIF) — also used as the extension source when providing data
data bytes Raw image bytes (optional; if omitted the file at filename is read)
col int Anchor column index (0-based, default 0)
row int Anchor row index (0-based, default 0)
width int Display width in pixels (optional; auto-detected from PNG header if omitted)
height int Display height in pixels (optional; auto-detected from PNG header if omitted)
col_offset int Column offset in EMUs (default 0)
row_offset int Row offset in EMUs (default 0)

Supported formats: PNG, JPEG, GIF. Images are embedded in xl/media/ and referenced via a drawing XML part, matching the standard OOXML format that Excel and LibreOffice produce.

Comments (Notes)

from openexcel import Comment

# Add a comment to a cell
ws["A1"].comment = Comment("This needs review", "Alice")

# Read back
c = ws["A1"].comment
print(c.text)    # "This needs review"
print(c.author)  # "Alice"

# Default author is empty string
ws["B2"].comment = Comment("Reminder")

# Remove a comment
ws["A1"].comment = None

# List all comments on a sheet
for c in ws.comments:
    print(c.text, c.author)

# Comments round-trip correctly through save/load
wb2 = openexcel.load_workbook("output.xlsx")
print(wb2[0]["A1"].comment.text)  # "This needs review"

Comments are stored in xl/comments/commentsN.xml and xl/drawings/vmlDrawingN.vml — the standard OOXML format. They compose with all other cell properties (value, font, hyperlink, etc.).

Named ranges

wb.add_defined_name("MyRange", "Sheet1!$A$1:$C$10")
print(wb.defined_names)            # {"MyRange": "Sheet1!$A$1:$C$10"}

Multiple sheets

wb = openexcel.load_workbook("multi.xlsx")

# By index
ws = wb[0]

# By name
ws = wb["Summary"]

# Iterate all sheets
for ws in wb:
    print(ws.title, ws.max_row, ws.max_column)

Context manager

with openexcel.load_workbook("data.xlsx") as wb:
    ws = wb.active
    data = [row for row in ws.iter_rows()]

API reference

openexcel.load_workbook(path: str) -> Workbook

Open an existing .xlsx file. Parses the entire file on load; subsequent access is from memory.

openexcel.Workbook()

Create a new empty workbook.

Workbook

Member Description
.active First sheet
[0] / ["Name"] Sheet by index or name
.create_sheet(name) Add a new sheet
.save(path) Write to .xlsx. GIL released during write.
.add_defined_name(name, value) Add a named range
.defined_names Dict of all named ranges

Worksheet

Member Description
.title Sheet name
.max_row / .max_column Dimensions
.append(row) Append a row of values
.iter_rows(min_row, max_row, min_col, max_col) Iterate rows as value tuples
["A1"] Get Cell by A1 notation
["A1:C3"] Get range as tuple-of-tuples of Cell
.cell(row, column) Get Cell by 1-based row/col
.merge_cells(range_str) Merge a cell range
.unmerge_cells(range_str) Remove a merge
.merged_cells List of merged ranges
.set_column_width(col, width) Set column width in character units
.set_row_height(row, height) Set row height in points
.freeze_panes Get/set freeze pane cell (e.g. "B2") or None
.zoom_scale Get/set zoom percentage (e.g. 75)
.show_gridlines Get/set gridline visibility
.tab_color Get/set tab color as RRGGBB hex string
.auto_filter_ref Get/set auto-filter range
.add_data_validation(dv) Add a DataValidation rule to the sheet
.data_validations List of DataValidation objects on this sheet
.page_setup Get/set PageSetup object (orientation, paper size, scale)
.page_margins Get/set PageMargins object (left, right, top, bottom, header, footer)
.print_options Get/set PrintOptions object (gridlines, headings, centering)
.protection Get/set SheetProtection object, or None to clear
.add_image(img, anchor) Embed an Image at the given A1 anchor cell
.images List of Image objects on this sheet
.comments List of all Comment objects on this sheet

Cell

Member Description
.value Get/set cell value
.number_format Get/set format string (e.g. "0.00%")
.font Get/set Font object
.fill Get/set PatternFill object
.border Get/set Border object
.alignment Get/set Alignment object
.hyperlink Get/set hyperlink URL string, or None
.comment Get/set Comment object, or None
.row Row number (1-based)
.column Column number (1-based)
.coordinate A1-style coordinate string
.column_letter Column letter string
.data_type "n" number, "s" string, "b" bool, "d" date, "f" formula, "e" error

Differences from openpyxl

Feature openexcel openpyxl
Read speed ~5× faster (C, SAX) Baseline
Write speed ~8× faster (C, buffer) Baseline
Cell objects Cell with value, format, coordinate, data_type Full Cell
Number formats Read/write format strings Full format API
Formulas Read/write formula strings (no evaluation) Read/write formula strings
Merged cells Supported Supported
Named ranges Supported Supported
Freeze panes / zoom Supported Supported
Column/row dimensions Supported Supported
Font / fill / border / alignment Supported (Font, PatternFill, Border, Side, Alignment) Full style API
Hyperlinks Supported (cell.hyperlink) Supported
Data validation Supported (DataValidation, ws.add_data_validation) Supported
Page setup / margins Supported (PageSetup, PageMargins, PrintOptions) Supported
Sheet protection Supported (SheetProtection, ws.protection) Supported
Conditional formatting Not yet supported Supported
Images Supported (Image, ws.add_image, ws.images) Supported
Charts Not yet supported Supported
Comments Supported (Comment, cell.comment, ws.comments) Supported

License

MIT — see LICENSE.

Vendored dependencies:

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

openexcel_c-0.1.8.tar.gz (203.4 kB view details)

Uploaded Source

Built Distributions

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

openexcel_c-0.1.8-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (141.0 kB view details)

Uploaded CPython 3.13manylinux: glibc 2.17+ x86-64

openexcel_c-0.1.8-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (141.6 kB view details)

Uploaded CPython 3.13manylinux: glibc 2.17+ ARM64

openexcel_c-0.1.8-cp313-cp313-macosx_11_0_arm64.whl (116.5 kB view details)

Uploaded CPython 3.13macOS 11.0+ ARM64

openexcel_c-0.1.8-cp313-cp313-macosx_10_13_x86_64.whl (123.2 kB view details)

Uploaded CPython 3.13macOS 10.13+ x86-64

openexcel_c-0.1.8-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (141.0 kB view details)

Uploaded CPython 3.12manylinux: glibc 2.17+ x86-64

openexcel_c-0.1.8-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (141.6 kB view details)

Uploaded CPython 3.12manylinux: glibc 2.17+ ARM64

openexcel_c-0.1.8-cp312-cp312-macosx_11_0_arm64.whl (116.5 kB view details)

Uploaded CPython 3.12macOS 11.0+ ARM64

openexcel_c-0.1.8-cp312-cp312-macosx_10_13_x86_64.whl (123.2 kB view details)

Uploaded CPython 3.12macOS 10.13+ x86-64

openexcel_c-0.1.8-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (140.5 kB view details)

Uploaded CPython 3.11manylinux: glibc 2.17+ x86-64

openexcel_c-0.1.8-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (141.5 kB view details)

Uploaded CPython 3.11manylinux: glibc 2.17+ ARM64

openexcel_c-0.1.8-cp311-cp311-macosx_11_0_arm64.whl (116.2 kB view details)

Uploaded CPython 3.11macOS 11.0+ ARM64

openexcel_c-0.1.8-cp311-cp311-macosx_10_9_x86_64.whl (122.5 kB view details)

Uploaded CPython 3.11macOS 10.9+ x86-64

openexcel_c-0.1.8-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (140.5 kB view details)

Uploaded CPython 3.10manylinux: glibc 2.17+ x86-64

openexcel_c-0.1.8-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (141.5 kB view details)

Uploaded CPython 3.10manylinux: glibc 2.17+ ARM64

openexcel_c-0.1.8-cp310-cp310-macosx_11_0_arm64.whl (116.2 kB view details)

Uploaded CPython 3.10macOS 11.0+ ARM64

openexcel_c-0.1.8-cp310-cp310-macosx_10_9_x86_64.whl (122.5 kB view details)

Uploaded CPython 3.10macOS 10.9+ x86-64

File details

Details for the file openexcel_c-0.1.8.tar.gz.

File metadata

  • Download URL: openexcel_c-0.1.8.tar.gz
  • Upload date:
  • Size: 203.4 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for openexcel_c-0.1.8.tar.gz
Algorithm Hash digest
SHA256 ffa5370c44fc5c717a992ff529156d051fa68d9e383a40ed7d63735546ab4710
MD5 a17dd68074e14a015bc11ba8cb2adcec
BLAKE2b-256 13cba0b798c23cf90e26e1d47c527ebaec8fe496b983afcd4038c3089b6bf0a5

See more details on using hashes here.

Provenance

The following attestation bundles were made for openexcel_c-0.1.8.tar.gz:

Publisher: publish.yml on karungop/openexCel

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

File details

Details for the file openexcel_c-0.1.8-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for openexcel_c-0.1.8-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 043581d5b99a4d77bf2033d095df19f00c69cf0a6ea02cb43b455e23a247c68c
MD5 104b721e956c3397c7ce242a8d834556
BLAKE2b-256 1ee69e7419786862ab1d03e72458a62e2ff68d5fbf6d581bcfb3054539ba0b7d

See more details on using hashes here.

Provenance

The following attestation bundles were made for openexcel_c-0.1.8-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl:

Publisher: publish.yml on karungop/openexCel

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

File details

Details for the file openexcel_c-0.1.8-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl.

File metadata

File hashes

Hashes for openexcel_c-0.1.8-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 cd4a901a5af519aab755ccec20cc62873a1dcd060c502ed4963811f8e2fcfdd1
MD5 e17abdeb42aa7430ced00dac56c2a4c8
BLAKE2b-256 809345ed2e39dc3b497f870c4bd2b073d4f866ff3ccf07923a21ccce1bb67364

See more details on using hashes here.

Provenance

The following attestation bundles were made for openexcel_c-0.1.8-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl:

Publisher: publish.yml on karungop/openexCel

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

File details

Details for the file openexcel_c-0.1.8-cp313-cp313-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for openexcel_c-0.1.8-cp313-cp313-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 464e58c858ef5aa970c95cc22f2034ae475b71fa12f6c832471e0c06eba690eb
MD5 83016f5c63b4a2d88cbdf1a1e2f8dd61
BLAKE2b-256 d692b30a7d665ed3051b73c3b9c3060e3b27ea8ea7a879dd1f359d34612870fc

See more details on using hashes here.

Provenance

The following attestation bundles were made for openexcel_c-0.1.8-cp313-cp313-macosx_11_0_arm64.whl:

Publisher: publish.yml on karungop/openexCel

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

File details

Details for the file openexcel_c-0.1.8-cp313-cp313-macosx_10_13_x86_64.whl.

File metadata

File hashes

Hashes for openexcel_c-0.1.8-cp313-cp313-macosx_10_13_x86_64.whl
Algorithm Hash digest
SHA256 38d3315695fa5914d59089b7332be5bb6e1f9bedb6655ff74f05066361e44a98
MD5 cd5827f3e9ca98cc92331e77c28e93ed
BLAKE2b-256 d9f7bd496d377c74b24b5da0a36a456b452a65cd3a6b27670cb0a5ad1c72914f

See more details on using hashes here.

Provenance

The following attestation bundles were made for openexcel_c-0.1.8-cp313-cp313-macosx_10_13_x86_64.whl:

Publisher: publish.yml on karungop/openexCel

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

File details

Details for the file openexcel_c-0.1.8-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for openexcel_c-0.1.8-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 9fad5c65d93e23a96ec75200ed2f27751f798467b184509bf75b0aaf4f971efe
MD5 1cc372e7f72fa38ecd99a137ed6e3e99
BLAKE2b-256 5f003eaeaef47e1aa6c822bb6308e65839cd590530fed2764bd8fc2f8557e131

See more details on using hashes here.

Provenance

The following attestation bundles were made for openexcel_c-0.1.8-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl:

Publisher: publish.yml on karungop/openexCel

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

File details

Details for the file openexcel_c-0.1.8-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl.

File metadata

File hashes

Hashes for openexcel_c-0.1.8-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 9012ded54e108fd1b625f95af8ccb13fabb4305775d2995076546e9b099876bd
MD5 ca7fa8e933373fa296911a6cad72c397
BLAKE2b-256 1c57533e6c8f10b2eaa10221fde4412be9e5576ae754f6fe094128de2aa8073c

See more details on using hashes here.

Provenance

The following attestation bundles were made for openexcel_c-0.1.8-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl:

Publisher: publish.yml on karungop/openexCel

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

File details

Details for the file openexcel_c-0.1.8-cp312-cp312-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for openexcel_c-0.1.8-cp312-cp312-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 46b57374cc4021040742a51234534c1aed7aed9e2629f8510f191c91cc27e887
MD5 95c26bccfabf756bbbd76c7f4ee539e3
BLAKE2b-256 5c39497e4aae61eb0031ccd559ab77efbe96dacadc1d540f45ef0f881597a318

See more details on using hashes here.

Provenance

The following attestation bundles were made for openexcel_c-0.1.8-cp312-cp312-macosx_11_0_arm64.whl:

Publisher: publish.yml on karungop/openexCel

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

File details

Details for the file openexcel_c-0.1.8-cp312-cp312-macosx_10_13_x86_64.whl.

File metadata

File hashes

Hashes for openexcel_c-0.1.8-cp312-cp312-macosx_10_13_x86_64.whl
Algorithm Hash digest
SHA256 964a379d8a806373b6036e66b973626b397cdf4790236dba61f6ba78cf09e26e
MD5 9414a3af4a7d292928a5acf15a0cb325
BLAKE2b-256 49b67bd9c8c988cfbc8fef5e5fa9754598c91c0a48bd54fd8fa2d4d5def05e65

See more details on using hashes here.

Provenance

The following attestation bundles were made for openexcel_c-0.1.8-cp312-cp312-macosx_10_13_x86_64.whl:

Publisher: publish.yml on karungop/openexCel

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

File details

Details for the file openexcel_c-0.1.8-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for openexcel_c-0.1.8-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 5887c4d4763f9db4d72eac0b4436795d79aea447118c0e3921fe2d1b9f1c531f
MD5 513ccee9438c21bf55fe778f5dd6d45b
BLAKE2b-256 71fa3932e282f0dbd0631906d5afb339b2cd5ab06bac212cc12fa423ff97b4b3

See more details on using hashes here.

Provenance

The following attestation bundles were made for openexcel_c-0.1.8-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl:

Publisher: publish.yml on karungop/openexCel

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

File details

Details for the file openexcel_c-0.1.8-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl.

File metadata

File hashes

Hashes for openexcel_c-0.1.8-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 6d1c2e73b06960bb9b514888e99fb981aa65478480e3dd13b1f374a2c0150952
MD5 aebe3b13d09fec12a5ebdcb4e8e8a309
BLAKE2b-256 b15dab6dc034df181d820b9c1c7157235d2946e14e543b6856c1abeb3951b853

See more details on using hashes here.

Provenance

The following attestation bundles were made for openexcel_c-0.1.8-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl:

Publisher: publish.yml on karungop/openexCel

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

File details

Details for the file openexcel_c-0.1.8-cp311-cp311-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for openexcel_c-0.1.8-cp311-cp311-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 6ffa53cb1f3c98ba868381701efb43c494fc621c0eb0e1885356b2c38ffd33d4
MD5 bf31a599147227bb1c6224998ac941ef
BLAKE2b-256 d50b8e7ff00c3b09c72e7029406776aca07e9d55d37bc892069d31868d6c728f

See more details on using hashes here.

Provenance

The following attestation bundles were made for openexcel_c-0.1.8-cp311-cp311-macosx_11_0_arm64.whl:

Publisher: publish.yml on karungop/openexCel

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

File details

Details for the file openexcel_c-0.1.8-cp311-cp311-macosx_10_9_x86_64.whl.

File metadata

File hashes

Hashes for openexcel_c-0.1.8-cp311-cp311-macosx_10_9_x86_64.whl
Algorithm Hash digest
SHA256 df3d9eca51059de49bfa1d96bb34bc58ee850c5600dbba9fd51e702a1785a7bf
MD5 45329c6f45e865150d826027e2e49968
BLAKE2b-256 d16e35ba1bceec3edfa7e7155bdfb13119ddc6d74b3faa648dd9b7fd9e19f8ad

See more details on using hashes here.

Provenance

The following attestation bundles were made for openexcel_c-0.1.8-cp311-cp311-macosx_10_9_x86_64.whl:

Publisher: publish.yml on karungop/openexCel

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

File details

Details for the file openexcel_c-0.1.8-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for openexcel_c-0.1.8-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 31824e337323dfbabdf69718484855f38dbd645d3c9604b650ec2532dd24f16b
MD5 51d51d3b8e4c1a12874a19d0f4f7afc5
BLAKE2b-256 181701eeb158d42de64aafb7a2b1cc3d6587acb41ff12fa4459032fadddf24d1

See more details on using hashes here.

Provenance

The following attestation bundles were made for openexcel_c-0.1.8-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl:

Publisher: publish.yml on karungop/openexCel

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

File details

Details for the file openexcel_c-0.1.8-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl.

File metadata

File hashes

Hashes for openexcel_c-0.1.8-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 49e115fa286f433d20025c41cc23868f89e5bdb9e8b74f3ecbdc043b9944c82d
MD5 d8fbe2f9513de019cde51c7e4570dc33
BLAKE2b-256 c832db85eb37b28bdd59f2ee8215ca48d1b9a556979e1709ea5474c67347313b

See more details on using hashes here.

Provenance

The following attestation bundles were made for openexcel_c-0.1.8-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl:

Publisher: publish.yml on karungop/openexCel

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

File details

Details for the file openexcel_c-0.1.8-cp310-cp310-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for openexcel_c-0.1.8-cp310-cp310-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 9b2bcdcdee97b1e7b55f6064e52086fa7f06ccc44fc61a7ed0711fdf5f1ebe0a
MD5 956d237e69e87c34215737a5a5a98518
BLAKE2b-256 3ca9d4ade6a291d42ae0943549be66c445bd2d063f85c29ac362568605292230

See more details on using hashes here.

Provenance

The following attestation bundles were made for openexcel_c-0.1.8-cp310-cp310-macosx_11_0_arm64.whl:

Publisher: publish.yml on karungop/openexCel

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

File details

Details for the file openexcel_c-0.1.8-cp310-cp310-macosx_10_9_x86_64.whl.

File metadata

File hashes

Hashes for openexcel_c-0.1.8-cp310-cp310-macosx_10_9_x86_64.whl
Algorithm Hash digest
SHA256 37c3527dd0354e1a405aebed93b1457d2ea76b96b80626f7f8cb17a29469310c
MD5 943020d314a4452a02a37c9f0c01831b
BLAKE2b-256 45825e20416bfb8b704a748be19900d7c5bfc3b9b614113c71560caf0905653b

See more details on using hashes here.

Provenance

The following attestation bundles were made for openexcel_c-0.1.8-cp310-cp310-macosx_10_9_x86_64.whl:

Publisher: publish.yml on karungop/openexCel

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