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.

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

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
.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
Charts / images Not yet supported Supported
Comments Not yet supported 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.5.tar.gz (175.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.5-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (119.4 kB view details)

Uploaded CPython 3.13manylinux: glibc 2.17+ x86-64

openexcel_c-0.1.5-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (119.9 kB view details)

Uploaded CPython 3.13manylinux: glibc 2.17+ ARM64

openexcel_c-0.1.5-cp313-cp313-macosx_11_0_arm64.whl (99.0 kB view details)

Uploaded CPython 3.13macOS 11.0+ ARM64

openexcel_c-0.1.5-cp313-cp313-macosx_10_13_x86_64.whl (104.6 kB view details)

Uploaded CPython 3.13macOS 10.13+ x86-64

openexcel_c-0.1.5-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (119.4 kB view details)

Uploaded CPython 3.12manylinux: glibc 2.17+ x86-64

openexcel_c-0.1.5-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (119.9 kB view details)

Uploaded CPython 3.12manylinux: glibc 2.17+ ARM64

openexcel_c-0.1.5-cp312-cp312-macosx_11_0_arm64.whl (99.0 kB view details)

Uploaded CPython 3.12macOS 11.0+ ARM64

openexcel_c-0.1.5-cp312-cp312-macosx_10_13_x86_64.whl (104.6 kB view details)

Uploaded CPython 3.12macOS 10.13+ x86-64

openexcel_c-0.1.5-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (119.0 kB view details)

Uploaded CPython 3.11manylinux: glibc 2.17+ x86-64

openexcel_c-0.1.5-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (119.9 kB view details)

Uploaded CPython 3.11manylinux: glibc 2.17+ ARM64

openexcel_c-0.1.5-cp311-cp311-macosx_11_0_arm64.whl (98.8 kB view details)

Uploaded CPython 3.11macOS 11.0+ ARM64

openexcel_c-0.1.5-cp311-cp311-macosx_10_9_x86_64.whl (103.9 kB view details)

Uploaded CPython 3.11macOS 10.9+ x86-64

openexcel_c-0.1.5-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (119.0 kB view details)

Uploaded CPython 3.10manylinux: glibc 2.17+ x86-64

openexcel_c-0.1.5-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (119.9 kB view details)

Uploaded CPython 3.10manylinux: glibc 2.17+ ARM64

openexcel_c-0.1.5-cp310-cp310-macosx_11_0_arm64.whl (98.8 kB view details)

Uploaded CPython 3.10macOS 11.0+ ARM64

openexcel_c-0.1.5-cp310-cp310-macosx_10_9_x86_64.whl (103.9 kB view details)

Uploaded CPython 3.10macOS 10.9+ x86-64

File details

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

File metadata

  • Download URL: openexcel_c-0.1.5.tar.gz
  • Upload date:
  • Size: 175.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.5.tar.gz
Algorithm Hash digest
SHA256 69982013ab67015ebe58ff94ef43647cff352d7834cd812750eed5309235c315
MD5 8a6d2eb9e0033b904c487c5b1a77c508
BLAKE2b-256 53585aaeca15872e6e7328d106400a9b44d1093b649f03f4ec6ef430ff07b181

See more details on using hashes here.

Provenance

The following attestation bundles were made for openexcel_c-0.1.5.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.5-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for openexcel_c-0.1.5-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 9b7fafa5bdc73b57afdbd612be463d6f457b92b48a1b62a426608e14fe396dc2
MD5 b8a159d2dc0aebd12d9412120fe54fc7
BLAKE2b-256 94915c1a79d071aa88b31c483b174e3346c38c851da9cfb5521178ab0ba91262

See more details on using hashes here.

Provenance

The following attestation bundles were made for openexcel_c-0.1.5-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.5-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl.

File metadata

File hashes

Hashes for openexcel_c-0.1.5-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 95cb5204d07827041dd701ebd4f1502080aba1adefdf2978be1ef06ef9d75796
MD5 b4f2d150a1243198135a98c7447eef5d
BLAKE2b-256 44c93c49940af582a8a7e3e0558b89d5d23773df75ff81e26a6d8a625ba340d1

See more details on using hashes here.

Provenance

The following attestation bundles were made for openexcel_c-0.1.5-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.5-cp313-cp313-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for openexcel_c-0.1.5-cp313-cp313-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 aee0b722b72d202f3af76d075999e2b00de1012a658a30ef08837a50cb4cb077
MD5 8b7ff18da0d6ca783ca096dbe67e8c3f
BLAKE2b-256 7d8ef275761d5756e26af2125e569243d6d6b1e672c172154f65a6f5185120fd

See more details on using hashes here.

Provenance

The following attestation bundles were made for openexcel_c-0.1.5-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.5-cp313-cp313-macosx_10_13_x86_64.whl.

File metadata

File hashes

Hashes for openexcel_c-0.1.5-cp313-cp313-macosx_10_13_x86_64.whl
Algorithm Hash digest
SHA256 bc1b6e39ac57de5d6d0ad77a2a990d18ed32996589d4d405520d669b8551147e
MD5 0a8eeaec0cfd803d5747ebd65d0efcac
BLAKE2b-256 203c90d2ca3ff1a033ae6f673317d80eef543ecfe76594ebd51aa6bc65d4e449

See more details on using hashes here.

Provenance

The following attestation bundles were made for openexcel_c-0.1.5-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.5-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for openexcel_c-0.1.5-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 4ee2f216383ef06de293993af8fc40c9bcfbc5416c7db97ea6686fbb2e542138
MD5 589c6954b791d62e29c25a15cc9f03e7
BLAKE2b-256 b6f358a331b9890688d7e2e68119789b808a212407096ecb003a18bcfb6f362a

See more details on using hashes here.

Provenance

The following attestation bundles were made for openexcel_c-0.1.5-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.5-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl.

File metadata

File hashes

Hashes for openexcel_c-0.1.5-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 38fc3640876ef32a7841940036c1666b35c5beb5cf3f3c7a4ff29622ba72a532
MD5 19cc5a1d764ac6c2a21a335a16e2ec3d
BLAKE2b-256 29adece93ebc5fd5bb0595d6bb3ddeab2cad2e152a7ce19534c3b79bcaa3faf9

See more details on using hashes here.

Provenance

The following attestation bundles were made for openexcel_c-0.1.5-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.5-cp312-cp312-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for openexcel_c-0.1.5-cp312-cp312-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 2dc27c3836614b4b994e0e1a17e169cc4fbb0610bd8bd8e4e65bbd2f606a7b89
MD5 823043c5f5974de3f2768d642765e3c0
BLAKE2b-256 4f8587a11ac2e803814117de68ff5454c28003016ce825f9fb329ef0bf983d9d

See more details on using hashes here.

Provenance

The following attestation bundles were made for openexcel_c-0.1.5-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.5-cp312-cp312-macosx_10_13_x86_64.whl.

File metadata

File hashes

Hashes for openexcel_c-0.1.5-cp312-cp312-macosx_10_13_x86_64.whl
Algorithm Hash digest
SHA256 cbe7e0b9f5114cab21c24545e45545f2624adca29e532e4cf5d8ce1dca758e74
MD5 ca50ee2bc83277cece7a67de75d7e744
BLAKE2b-256 149ecc262c016b0cb222f24346debdcfe0b7517d908f66d46c7d998cef7d3724

See more details on using hashes here.

Provenance

The following attestation bundles were made for openexcel_c-0.1.5-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.5-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for openexcel_c-0.1.5-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 b3df6398d0472c8ae86fa4208d2fc381a077a58958df22d91580713729531965
MD5 43388a2632e225a8908936a875095307
BLAKE2b-256 f0398d9ebfa4494d95ae04e6a25835c0b63e18b04c0a3c42dbaeea977a90ac89

See more details on using hashes here.

Provenance

The following attestation bundles were made for openexcel_c-0.1.5-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.5-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl.

File metadata

File hashes

Hashes for openexcel_c-0.1.5-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 be636cf747ee436ef7a31fbac1cebedae93ca7d58dc883ac3a6f8f73ac0ce964
MD5 fa5cff5c6d08be03eb4758965fb857ad
BLAKE2b-256 934863af02ab8c199759bd4a8d85569d95ed490ee9dd3aa785d16da065906044

See more details on using hashes here.

Provenance

The following attestation bundles were made for openexcel_c-0.1.5-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.5-cp311-cp311-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for openexcel_c-0.1.5-cp311-cp311-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 fe220df8c229872e7ff4f03ea07806d2ffe92aad11068a7aae848e42aae5baf0
MD5 2e6106ff5562f96ee3ae9963d8e3008d
BLAKE2b-256 cb36263cf28f27dd9f10be80849f03a4d94a44b9583b23b6a0df94f9a57e303d

See more details on using hashes here.

Provenance

The following attestation bundles were made for openexcel_c-0.1.5-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.5-cp311-cp311-macosx_10_9_x86_64.whl.

File metadata

File hashes

Hashes for openexcel_c-0.1.5-cp311-cp311-macosx_10_9_x86_64.whl
Algorithm Hash digest
SHA256 7d61a1e66f4b071499559209d8f2eb54b2ce138bca28a7c361776fa1bbec6cbc
MD5 d618ae4869d6520a33ea10955253cc94
BLAKE2b-256 c0579036ded98eb4852433d0823ee585c2aa3b505e19b9b1efcdc1f56cceac36

See more details on using hashes here.

Provenance

The following attestation bundles were made for openexcel_c-0.1.5-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.5-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for openexcel_c-0.1.5-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 a440b822cd7c8970e5ee01124188b629fc9539a97d5957234ab510611188a344
MD5 a30204b8a14e2b138ecca8a1b66cda4e
BLAKE2b-256 251a93770c1562bfc3919dc33a23765ff26a940ec31f354495fe258f995aeaca

See more details on using hashes here.

Provenance

The following attestation bundles were made for openexcel_c-0.1.5-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.5-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl.

File metadata

File hashes

Hashes for openexcel_c-0.1.5-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 fc6542e6c651d9e3ba391e7f8867ae80977113669da9b4add4038ba59d6c9382
MD5 3143014d47ec0b42d9d0243b6c32cc91
BLAKE2b-256 b496b393acdbbf9c86513e10530755590dbb222bb3294245c730e0f165dde676

See more details on using hashes here.

Provenance

The following attestation bundles were made for openexcel_c-0.1.5-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.5-cp310-cp310-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for openexcel_c-0.1.5-cp310-cp310-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 0a4b3772b07339cf687cb06a2386416097a6330f0ab490a9a1f9d82cd936f301
MD5 23a61fbd347edfa96cb5aa4ea0103848
BLAKE2b-256 4d5ed4958c2f0fc29492f7a36baed075802f4223f01b7b21a38fb26e9a827b9d

See more details on using hashes here.

Provenance

The following attestation bundles were made for openexcel_c-0.1.5-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.5-cp310-cp310-macosx_10_9_x86_64.whl.

File metadata

File hashes

Hashes for openexcel_c-0.1.5-cp310-cp310-macosx_10_9_x86_64.whl
Algorithm Hash digest
SHA256 a3c48ffde7390e8f72f4ebe69ec6e7d919b271a981523fdfdf11908fccd8c7df
MD5 4200e93f303af58492d73dc501f280a8
BLAKE2b-256 5b5986fa3cc24a8ec5944b247a03f8b5c262fffb96a0912e8537ee98cb5076f3

See more details on using hashes here.

Provenance

The following attestation bundles were made for openexcel_c-0.1.5-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