Skip to main content

A fast, memory-efficient spreadsheet I/O library for Python, powered by Rust

Project description

OpenSheet Core — Fast, memory-efficient spreadsheet I/O for Python, powered by Rust

CI PyPI License: MIT Python 3.9–3.13 Coverage

Features  •  Benchmarks  •  Installation  •  Quick Start  •  API  •  Roadmap  •  Contributing


Why OpenSheet Core?

Existing Python spreadsheet libraries force you to choose between performance, memory efficiency, broad format support, and easy installation. OpenSheet Core eliminates that tradeoff with a native Rust core exposed through a clean Python API — installable with a single pip install.

Features

  • Streaming XLSX reader — row-by-row iteration without loading the entire file into memory
  • Streaming XLSX writer — write millions of rows with constant memory usage
  • Formula support — read and write formulas with optional cached values
  • Date/time support — read and write datetime.date and datetime.datetime cells with automatic Excel serial number conversion
  • Merged cells — read and write merged cell ranges
  • Column widths & row heights — set and read custom column widths and row heights
  • Freeze panes — freeze rows and/or columns so they stay visible when scrolling
  • Auto-filter — add drop-down filter controls to column headers
  • Named ranges / defined names — define workbook-scoped or sheet-scoped names; read them back from existing files
  • Sheet visibility states — mark sheets as visible, hidden, or veryHidden; read back state from existing files
  • Number formats — write and read cells with custom number formats (currency, percentage, custom format strings)
  • Cell styling — fonts (bold, italic, underline, name, size, color), fills, borders (thin, medium, thick, dashed, dotted, double), alignment (horizontal, vertical, wrap text, rotation), and number formats on styled cells
  • Typed cell extraction — strings, numbers, booleans, dates, datetimes, formulas, and empty cells are returned as native Python types
  • Context manager support — Pythonic with statement for safe resource management
  • Comments and hyperlinks — add cell comments with author/text and hyperlinks with optional tooltips; read them back from existing files
  • Sheet protection — protect sheets with optional password and 15+ configurable permission flags
  • Structured tables — create Excel tables with column definitions, auto-filter, and table styles
  • Data validation — add validation rules (list, whole, decimal, date, time, textLength, custom) with input/error messages
  • .xlsm read support — read macro-enabled workbooks (macros gracefully ignored)
  • Document properties — read and write core (title, author, etc.) and custom document properties
  • AI/RAG-ready — convert spreadsheets to markdown tables, embedding-sized chunks, or plain text for LLM and RAG pipelines
  • Cross-platform — tested on Linux, macOS, and Windows across Python 3.9–3.13
  • Pandas integration — read XLSX files into DataFrames and write DataFrames to XLSX (pip install opensheet-core[pandas])
  • Zero Python dependencies — single native extension, no dependency tree to manage

Benchmarks

Benchmarked against openpyxl 3.1.5 on a 100,000-row x 10-column dataset (1M cells), 5 interleaved runs, current RSS measurement (not high-water mark):

Operation OpenSheet Core openpyxl Speedup Memory (RSS delta)
Write 2.3s 3.7s 1.6x faster 1.7x less (1.2 MB vs 2.1 MB)
Read 253ms 3.5s 13.8x faster 2.5x less (13.5 MB vs 33.3 MB)

OpenSheet Core is faster and uses less memory for both reads and writes. The speed advantage comes from a Rust streaming parser with deferred shared-string resolution — strings are stored as indices during parsing and only converted to Python objects at the boundary. Write memory is low because the Rust writer streams data directly to disk.

Run it yourself: python benchmarks/benchmark.py

See the Benchmarking Methodology doc for details on how we measure and avoid common benchmarking pitfalls.

Installation

pip install opensheet-core

# With pandas support
pip install opensheet-core[pandas]

From source (requires Rust toolchain)

pip install maturin
git clone https://github.com/0xNadr/opensheet-core
cd opensheet-core
maturin develop --release

Quick Start

Reading an XLSX file

from opensheet_core import read_xlsx, read_sheet

# Read all sheets
sheets = read_xlsx("report.xlsx")
for sheet in sheets:
    print(f"Sheet: {sheet['name']}")
    for row in sheet["rows"]:
        print(row)  # List of typed Python values

# Read a specific sheet
rows = read_sheet("report.xlsx", sheet_name="Data")

Writing an XLSX file

from opensheet_core import XlsxWriter

with XlsxWriter("output.xlsx") as writer:
    writer.add_sheet("Data")
    writer.write_row(["Name", "Age", "Active"])
    writer.write_row(["Alice", 30, True])
    writer.write_row(["Bob", 25, False])

Writing dates

import datetime
from opensheet_core import XlsxWriter

with XlsxWriter("output.xlsx") as writer:
    writer.add_sheet("Events")
    writer.write_row(["Event", "Date", "Timestamp"])
    writer.write_row(["Launch", datetime.date(2025, 3, 15), datetime.datetime(2025, 3, 15, 14, 30)])

Merging cells

from opensheet_core import XlsxWriter

with XlsxWriter("output.xlsx") as writer:
    writer.add_sheet("Report")
    writer.write_row(["Title spanning three columns", "", ""])
    writer.write_row(["A", "B", "C"])
    writer.merge_cells("A1:C1")

Column widths and row heights

from opensheet_core import XlsxWriter

with XlsxWriter("output.xlsx") as writer:
    writer.add_sheet("Data")
    writer.set_column_width("A", 25.0)   # By letter
    writer.set_column_width(1, 15.0)     # By 0-based index
    writer.set_row_height(1, 30.0)       # Row 1 (1-based)
    writer.write_row(["Name", "Age"])
    writer.write_row(["Alice", 30])

Freeze panes

from opensheet_core import XlsxWriter

with XlsxWriter("output.xlsx") as writer:
    writer.add_sheet("Data")
    writer.freeze_panes(row=1, col=0)    # Freeze top row
    writer.write_row(["Header1", "Header2", "Header3"])
    writer.write_row(["data", "data", "data"])

Auto-filter

from opensheet_core import XlsxWriter

with XlsxWriter("output.xlsx") as writer:
    writer.add_sheet("Data")
    writer.write_row(["Name", "Age", "City"])
    writer.write_row(["Alice", 30, "NYC"])
    writer.write_row(["Bob", 25, "LA"])
    writer.auto_filter("A1:C1")

Number formats

from opensheet_core import XlsxWriter, FormattedCell

with XlsxWriter("output.xlsx") as writer:
    writer.add_sheet("Finance")
    writer.write_row(["Item", "Price", "Tax Rate"])
    writer.write_row([
        "Widget",
        FormattedCell(19.99, "$#,##0.00"),   # Currency
        FormattedCell(0.08, "0.00%"),         # Percentage
    ])

Cell styling

from opensheet_core import XlsxWriter, CellStyle, StyledCell

with XlsxWriter("output.xlsx") as writer:
    writer.add_sheet("Report")
    # Bold header with fill color
    writer.write_row([
        StyledCell("Name", CellStyle(bold=True, fill_color="4472C4", font_color="FFFFFF")),
        StyledCell("Score", CellStyle(bold=True, fill_color="4472C4", font_color="FFFFFF")),
    ])
    # Data with borders and alignment
    writer.write_row([
        StyledCell("Alice", CellStyle(border="thin", horizontal_alignment="left")),
        StyledCell(95, CellStyle(border="thin", number_format="0.0")),
    ])

Named ranges / defined names

from opensheet_core import XlsxWriter, defined_names

# Write named ranges
with XlsxWriter("output.xlsx") as writer:
    writer.add_sheet("Config")
    writer.write_row(["Rate"])
    writer.write_row([0.08])
    writer.define_name("TaxRate", "Config!$A$2")                    # Workbook-scoped
    writer.define_name("LocalRate", "Config!$A$2", sheet_index=0)   # Sheet-scoped

# Read named ranges
names = defined_names("output.xlsx")
for n in names:
    print(f"{n['name']}{n['value']} (sheet_index={n['sheet_index']})")

Comments and hyperlinks

from opensheet_core import XlsxWriter

with XlsxWriter("output.xlsx") as writer:
    writer.add_sheet("Data")
    writer.write_row(["Name", "Website"])
    writer.write_row(["Alice", "https://example.com"])
    writer.add_comment("A1", "Admin", "Primary contact")
    writer.add_hyperlink("B2", "https://example.com", tooltip="Visit site")

Sheet protection

from opensheet_core import XlsxWriter

with XlsxWriter("output.xlsx") as writer:
    writer.add_sheet("Protected")
    writer.write_row(["Locked data"])
    writer.protect_sheet(password="secret", sheet=True, sort=True, auto_filter=True)

Structured tables

from opensheet_core import XlsxWriter

with XlsxWriter("output.xlsx") as writer:
    writer.add_sheet("Data")
    writer.write_row(["Name", "Age", "City"])
    writer.write_row(["Alice", 30, "NYC"])
    writer.write_row(["Bob", 25, "LA"])
    writer.add_table("A1:C3", ["Name", "Age", "City"], name="People", style="TableStyleMedium2")

Writing formulas

from opensheet_core import XlsxWriter, Formula

with XlsxWriter("output.xlsx") as writer:
    writer.add_sheet("Budget")
    writer.write_row(["Item", "Cost"])
    writer.write_row(["Rent", 1200])
    writer.write_row(["Food", 400])
    writer.write_row(["Total", Formula("SUM(B2:B3)", cached_value=1600)])

Pandas integration

import pandas as pd
from opensheet_core import read_xlsx_df, to_xlsx

# Read XLSX into a DataFrame
df = read_xlsx_df("data.xlsx", sheet_name="Sheet1")

# Write a DataFrame to XLSX
df = pd.DataFrame({"Name": ["Alice", "Bob"], "Age": [30, 25]})
to_xlsx(df, "output.xlsx", sheet_name="Results")

AI/RAG extraction

from opensheet_core import xlsx_to_markdown, xlsx_to_text, xlsx_to_chunks

# Convert to a markdown table (great for LLM prompts)
md = xlsx_to_markdown("data.xlsx")

# Plain text extraction for search indexes
text = xlsx_to_text("data.xlsx", delimiter="\t")

# Embedding-sized chunks for RAG pipelines (header repeated per chunk)
chunks = xlsx_to_chunks("data.xlsx", max_rows=50)

LangChain integration

from opensheet_core.langchain import OpenSheetLoader

# Markdown mode (default) — one document per file
loader = OpenSheetLoader("data.xlsx")
docs = loader.load()

# Chunked mode — multiple documents for RAG
loader = OpenSheetLoader("data.xlsx", mode="chunks", max_rows=25)
docs = loader.load()

LlamaIndex integration

from opensheet_core.llamaindex import OpenSheetReader

reader = OpenSheetReader()
docs = reader.load_data("data.xlsx")

# Use with SimpleDirectoryReader
from llama_index.core import SimpleDirectoryReader
reader = SimpleDirectoryReader(
    input_dir="./data",
    file_extractor={".xlsx": OpenSheetReader()},
)

API Reference

read_xlsx(path: str) -> list[dict]

Reads an XLSX file and returns a list of dicts with "name" (str), "rows" (list of lists), "merges" (list of range strings like "A1:C1"), "column_widths" (dict of 0-based col index to width), "row_heights" (dict of 0-based row index to height), "freeze_pane" (tuple of (rows_frozen, cols_frozen) or None), "auto_filter" (range string like "A1:C1" or None), "state" (str: "visible", "hidden", or "veryHidden"), "comments" (list of dicts with "cell", "author", "text"), "hyperlinks" (list of dicts with "cell", "url", "tooltip"), "protection" (dict of protection settings or None), and "tables" (list of table definition dicts). Each cell is a typed Python value (str, int, float, bool, datetime.date, datetime.datetime, Formula, FormattedCell, or None).

read_sheet(path, sheet_name=None, sheet_index=None) -> list[list]

Reads a single sheet by name or index. Returns the first sheet by default.

sheet_names(path: str) -> list[str]

Returns the list of sheet names in a workbook.

defined_names(path: str) -> list[dict]

Returns the defined names (named ranges) in a workbook. Each dict has "name" (str), "value" (str, the cell reference or formula), and "sheet_index" (int if sheet-scoped, None if workbook-scoped).

document_properties(path: str) -> dict

Returns document properties with "core" (dict of title, subject, creator, keywords, description, last_modified_by, category, created, modified) and "custom" (list of dicts with "name" and "value").

XlsxWriter(path: str)

Streaming XLSX writer. Use as a context manager.

Method Description
add_sheet(name: str) Create a new worksheet
write_row(values: list) Write a row of values to the current sheet
merge_cells(range: str) Merge a range of cells (e.g. "A1:C1")
set_column_width(column, width) Set column width (column is a letter or 0-based int)
set_row_height(row, height) Set row height in points (row is 1-based)
freeze_panes(row=0, col=0) Freeze top row rows and left col columns
auto_filter(range) Set auto-filter on a range (e.g. "A1:C1")
set_sheet_state(state) Set sheet visibility: "visible", "hidden", or "veryHidden"
define_name(name, value, sheet_index=None) Define a named range (workbook-scoped by default, or sheet-scoped)
add_comment(cell_ref, author, text) Add a comment to a cell
add_hyperlink(cell_ref, url, tooltip=None) Add a hyperlink to a cell
protect_sheet(password=None, ...) Protect sheet with optional password and 15+ permission flags
add_table(reference, columns, name=None, style=None) Add a structured table with auto-filter
add_data_validation(type, sqref, ...) Add data validation rules to cell ranges
set_document_property(key, value) Set core document property (title, creator, etc.)
set_custom_property(name, value) Set a custom document property
close() Finalize and close the file

read_xlsx_df(path, sheet_name=None, sheet_index=None, header=True)

Reads a single XLSX sheet into a pandas DataFrame. Requires pip install opensheet-core[pandas]. When header=True (default), the first row is used as column names. Formulas are unwrapped to cached values, FormattedCell values are unwrapped to plain numbers.

to_xlsx(df, path, sheet_name="Sheet1", header=True, index=False)

Writes a pandas DataFrame to an XLSX file. Handles numpy int/float/bool types, NaN/NaT (written as empty cells), and datetime64/Timestamp columns. Set index=True to include the DataFrame index as column(s).

CellStyle(**kwargs)

Style properties for a cell. All parameters are keyword-only. Properties: bold (bool), italic (bool), underline (bool), font_name (str), font_size (float), font_color (str, hex RGB), fill_color (str, hex RGB), border (str, shorthand for all 4 sides), border_left/border_right/border_top/border_bottom (str: "thin", "medium", "thick", "dashed", "dotted", "double"), border_color (str, hex RGB), horizontal_alignment (str: "left", "center", "right"), vertical_alignment (str: "top", "center", "bottom"), wrap_text (bool), text_rotation (int, 0-180), number_format (str, Excel format code).

StyledCell(value, style: CellStyle)

A cell value with styling. Pass as a cell value in write_row(). Returned by read_xlsx() and read_sheet() for cells that have visual styling. The inner value can be a string, number, bool, date, datetime, or formula.

FormattedCell(value, number_format: str)

A numeric value with a custom Excel number format code. Pass as a cell value in write_row(). Returned by read_xlsx() for cells with non-default number formats. Common format codes: "$#,##0.00" (currency), "0.00%" (percentage), "#,##0" (thousands separator).

Formula(formula: str, cached_value=None)

Represents a spreadsheet formula. Pass as a cell value when writing, and received when reading cells that contain formulas.

xlsx_to_markdown(path, sheet_name=None, sheet_index=None, header=True) -> str

Converts an XLSX file to markdown table(s). When multiple sheets are converted, each table is preceded by a ## Sheet Name heading. Formulas, FormattedCell, and StyledCell values are automatically unwrapped to their plain display values.

xlsx_to_text(path, sheet_name=None, sheet_index=None, delimiter="\t") -> str

Converts an XLSX file to plain text with one row per line, cells separated by the delimiter (default: tab). Suitable for search indexes and simple text pipelines.

xlsx_to_chunks(path, sheet_name=None, sheet_index=None, max_rows=50, header=True) -> list[str]

Splits an XLSX file into embedding-sized markdown table chunks. Each chunk contains at most max_rows data rows with the header row repeated at the top for self-contained context. Ideal for RAG pipelines.

OpenSheetLoader(file_path, mode="markdown", ...) (LangChain)

LangChain document loader. Requires pip install langchain-core. Modes: "markdown" (default), "text", "chunks". Supports sheet_name, sheet_index, header, max_rows, and delimiter options. Use loader.load() or loader.lazy_load().

OpenSheetReader(mode="markdown", ...) (LlamaIndex)

LlamaIndex data reader. Requires pip install llama-index-core. Modes: "markdown" (default), "text", "chunks". Call reader.load_data(file_path) with optional sheet_name, sheet_index, and extra_info arguments. Compatible with SimpleDirectoryReader via file_extractor.

Architecture

┌──────────────────────────┐
│      Python API          │  ← opensheet_core (PyO3 bindings)
├──────────────────────────┤
│      Rust Core           │  ← Streaming parser & writer
│  ┌────────┐ ┌──────────┐ │
│  │ Reader │ │  Writer  │ │
│  │ (SAX)  │ │ (Stream) │ │
│  └────────┘ └──────────┘ │
├──────────────────────────┤
│  quick-xml  │    zip     │  ← Dependencies
└──────────────────────────┘

Feature Comparison vs openpyxl

OpenSheet Core is designed to be a faster, memory-efficient alternative to openpyxl for the most common spreadsheet workflows. Here's where we stand:

What we already do better

OpenSheet Core openpyxl
Write 1M cells ~2.3s ~3.7s
Read 1M cells ~0.25s ~3.5s
Write memory 1.2 MB RSS delta 2.1 MB RSS delta
Read memory 13.5 MB RSS delta 33.3 MB RSS delta
Python dependencies Zero Several
Architecture Rust streaming core Pure Python DOM

Memory optimization: shared strings are stored as indices during parsing and resolved to Python objects at the boundary via pre-interned lookup, avoiding duplicate string allocations. A future streaming iterator API will bring constant-memory reads.

Feature coverage

Category Feature openpyxl OpenSheet Core
Formats .xlsx read/write Yes Yes
.xlsm (macro-enabled) Yes Read
.xltx/.xltm (templates) Yes
Cell Types Strings, numbers, booleans Yes Yes
Dates and datetimes Yes Yes
Formulas with cached values Yes Yes
Rich text Yes Planned
Error values Yes Planned
Styling Fonts (name, size, bold, italic, color) Yes Yes
Fill (solid, pattern, gradient) Yes Solid
Borders (14 styles) Yes 6 styles
Alignment (horizontal, vertical, wrap, rotation) Yes Yes
Number formats (30+ builtins + custom) Yes Yes
Named styles Yes Planned
Conditional formatting (6 rule types) Yes Planned
Worksheet Merged cells Yes Yes
Freeze panes Yes Yes
Auto-filter Yes Yes
Column widths / row heights Yes Yes
Comments Yes Yes
Hyperlinks Yes Yes
Data validation (7 types) Yes Yes
Sheet protection Yes Yes
Row/column insert/delete Yes
Print settings Yes Planned
Row/column grouping Yes
Workbook Named ranges / defined names Yes Yes
Document properties Yes Yes
Workbook protection Yes
Multiple sheet states (hidden, veryHidden) Yes Yes
Charts 12+ chart types (bar, line, pie, scatter, etc.) Yes Planned
3D variants and combined charts Yes
Images Embed PNG/JPEG Yes Planned
Tables Structured tables with styles Yes Yes
Pivot Tables Read/preserve existing Yes
VBA/Macros Preserve on load (.xlsm) Yes Read
Integration Pandas DataFrame I/O Yes Yes
NumPy type support Yes Yes
AI/RAG Markdown/text extraction for LLMs Yes
Embedding-sized chunking Yes
LangChain / LlamaIndex loaders Yes
Performance Streaming read (constant memory) Yes (read_only mode) Yes (default)
Streaming write (constant memory) Yes (write_only mode) Yes (default)

Legend: Yes = implemented, Planned = on the roadmap, — = not planned for now

Our approach

We are not trying to clone openpyxl. We are building a fast, safe, memory-efficient core for the most common Excel workflows. The goal is to cover the ~80% of features that people use day-to-day, while being up to 14x faster and using 2–3x less memory. Streaming is the default, not an opt-in mode.

Roadmap

Done

  • XLSX reading with typed cell extraction
  • Streaming XLSX writing with low memory usage
  • Formula read/write support with cached values
  • Date/time cell support with automatic serial number conversion
  • Merged cell metadata (read and write)
  • Python bindings via PyO3
  • Type stubs (.pyi) and py.typed marker for IDE autocomplete
  • CI across Linux, macOS, Windows (Python 3.9–3.13)
  • Prebuilt wheels on PyPI
  • Benchmarks vs openpyxl
  • Runnable benchmark script (python benchmarks/benchmark.py)
  • Zero Python dependencies
  • Column widths and row heights
  • Freeze panes
  • Auto-filter
  • Number formats (currency, percentage, custom format strings)
  • Pandas DataFrame integration (read_xlsx_df / to_xlsx)
  • Basic cell styling (fonts, fills, borders, alignment)
  • Sheet visibility states (visible, hidden, veryHidden)
  • Named ranges / defined names (workbook-scoped and sheet-scoped)
  • xlsx_to_markdown() — structured markdown tables for LLM consumption
  • xlsx_to_text() — plain text extraction for search indexes
  • xlsx_to_chunks() — embedding-sized chunks with header attachment
  • LangChain OpenSheetLoader document loader
  • LlamaIndex OpenSheetReader data connector
  • Comments and hyperlinks (read and write)
  • .xlsm read support (macros gracefully ignored)
  • Sheet protection with optional password
  • Structured tables with styles and auto-filter
  • Data validation (7 types with input/error messages)
  • Document and custom properties (read and write)
  • NumPy type support (int64, float64, bool_, etc.)
  • Security hardening (XML bomb prevention, zip limits)

Phase 2 — Broader compatibility (v0.3.0)

  • Named ranges / defined names
  • Data validation (7 types with input/error messages)
  • Comments and hyperlinks
  • .xlsm read support (macros gracefully ignored)
  • Sheet protection (with optional password and 15+ permission flags)
  • Structured tables with styles
  • Multiple sheet states (hidden, veryHidden)
  • Document and custom properties
  • NumPy type support
  • Security hardening (XML bomb prevention, zip limits)

Phase 3 — Rich content and ecosystem

  • Charts (bar, line, pie, scatter — most common types)
  • Image embedding (PNG, JPEG)
  • Conditional formatting
  • Broader test corpus and fuzzing

Docs & community

  • Migration guide: openpyxl → opensheet-core (side-by-side code comparisons)
  • FastAPI/Flask streaming XLSX download examples
  • Benchmark methodology documentation
  • Dedicated benchmark page with chart visualizations

Project Status

v0.3.0 — all Phase 2 features complete: comments, hyperlinks, sheet protection, structured tables, data validation, document properties, .xlsm read support, NumPy types, and security hardening. 280+ passing tests. Streaming reader/writer with formulas, dates, merged cells, column widths/row heights, freeze panes, auto-filter, number formats, cell styling, named ranges, pandas DataFrames, and AI/RAG extraction. Prebuilt wheels on PyPI. The API may change before 1.0.

Contributing

Contributions are welcome! Here are some great ways to get involved:

  • Report bugs or real-world spreadsheet edge cases
  • Submit representative sample files for testing
  • Suggest benchmark scenarios
  • Improve documentation
  • Open PRs for roadmap items

License

MIT


Built with Rust and PyO3  |  Open digital infrastructure for the Python ecosystem

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

opensheet_core-0.3.0.tar.gz (114.6 kB view details)

Uploaded Source

Built Distributions

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

opensheet_core-0.3.0-pp311-pypy311_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (684.6 kB view details)

Uploaded PyPymanylinux: glibc 2.17+ x86-64

opensheet_core-0.3.0-pp311-pypy311_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (666.3 kB view details)

Uploaded PyPymanylinux: glibc 2.17+ ARM64

opensheet_core-0.3.0-cp314-cp314t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (663.2 kB view details)

Uploaded CPython 3.14tmanylinux: glibc 2.17+ ARM64

opensheet_core-0.3.0-cp314-cp314-win_amd64.whl (568.8 kB view details)

Uploaded CPython 3.14Windows x86-64

opensheet_core-0.3.0-cp314-cp314-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (683.9 kB view details)

Uploaded CPython 3.14manylinux: glibc 2.17+ x86-64

opensheet_core-0.3.0-cp314-cp314-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (664.9 kB view details)

Uploaded CPython 3.14manylinux: glibc 2.17+ ARM64

opensheet_core-0.3.0-cp314-cp314-macosx_11_0_arm64.whl (629.6 kB view details)

Uploaded CPython 3.14macOS 11.0+ ARM64

opensheet_core-0.3.0-cp314-cp314-macosx_10_12_x86_64.whl (657.0 kB view details)

Uploaded CPython 3.14macOS 10.12+ x86-64

opensheet_core-0.3.0-cp313-cp313t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (663.1 kB view details)

Uploaded CPython 3.13tmanylinux: glibc 2.17+ ARM64

opensheet_core-0.3.0-cp313-cp313-win_amd64.whl (568.9 kB view details)

Uploaded CPython 3.13Windows x86-64

opensheet_core-0.3.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (683.9 kB view details)

Uploaded CPython 3.13manylinux: glibc 2.17+ x86-64

opensheet_core-0.3.0-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (665.2 kB view details)

Uploaded CPython 3.13manylinux: glibc 2.17+ ARM64

opensheet_core-0.3.0-cp313-cp313-macosx_11_0_arm64.whl (629.8 kB view details)

Uploaded CPython 3.13macOS 11.0+ ARM64

opensheet_core-0.3.0-cp313-cp313-macosx_10_12_x86_64.whl (657.0 kB view details)

Uploaded CPython 3.13macOS 10.12+ x86-64

opensheet_core-0.3.0-cp312-cp312-win_amd64.whl (569.3 kB view details)

Uploaded CPython 3.12Windows x86-64

opensheet_core-0.3.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (684.4 kB view details)

Uploaded CPython 3.12manylinux: glibc 2.17+ x86-64

opensheet_core-0.3.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (665.5 kB view details)

Uploaded CPython 3.12manylinux: glibc 2.17+ ARM64

opensheet_core-0.3.0-cp312-cp312-macosx_11_0_arm64.whl (629.9 kB view details)

Uploaded CPython 3.12macOS 11.0+ ARM64

opensheet_core-0.3.0-cp312-cp312-macosx_10_12_x86_64.whl (657.2 kB view details)

Uploaded CPython 3.12macOS 10.12+ x86-64

opensheet_core-0.3.0-cp311-cp311-win_amd64.whl (572.0 kB view details)

Uploaded CPython 3.11Windows x86-64

opensheet_core-0.3.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (683.6 kB view details)

Uploaded CPython 3.11manylinux: glibc 2.17+ x86-64

opensheet_core-0.3.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (664.7 kB view details)

Uploaded CPython 3.11manylinux: glibc 2.17+ ARM64

opensheet_core-0.3.0-cp311-cp311-macosx_11_0_arm64.whl (630.9 kB view details)

Uploaded CPython 3.11macOS 11.0+ ARM64

opensheet_core-0.3.0-cp311-cp311-macosx_10_12_x86_64.whl (659.0 kB view details)

Uploaded CPython 3.11macOS 10.12+ x86-64

opensheet_core-0.3.0-cp310-cp310-win_amd64.whl (571.9 kB view details)

Uploaded CPython 3.10Windows x86-64

opensheet_core-0.3.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (683.7 kB view details)

Uploaded CPython 3.10manylinux: glibc 2.17+ x86-64

opensheet_core-0.3.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (664.9 kB view details)

Uploaded CPython 3.10manylinux: glibc 2.17+ ARM64

opensheet_core-0.3.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (686.0 kB view details)

Uploaded CPython 3.9manylinux: glibc 2.17+ x86-64

opensheet_core-0.3.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (667.6 kB view details)

Uploaded CPython 3.9manylinux: glibc 2.17+ ARM64

File details

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

File metadata

  • Download URL: opensheet_core-0.3.0.tar.gz
  • Upload date:
  • Size: 114.6 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: maturin/1.12.6

File hashes

Hashes for opensheet_core-0.3.0.tar.gz
Algorithm Hash digest
SHA256 fccdab0e8fd157b735336c467efab98c0cee29a57638d1e319d4683dfd5b8040
MD5 9494692c0316b9267dd3bd038c4634bb
BLAKE2b-256 e3ed257d449fb79a0ff679c07ef3cc149d9158c22d7a20cc3e61b65b4b717033

See more details on using hashes here.

File details

Details for the file opensheet_core-0.3.0-pp311-pypy311_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for opensheet_core-0.3.0-pp311-pypy311_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 d2e85e769c6ebfde1d8b3889ac894810142fba37caea6dae4203e85556ad4fd1
MD5 ca77a8600ac0634685102cbdf027328e
BLAKE2b-256 fad7c1d7674b75352cde00d21f2bfe3fd5da6e17182e9333f66002a32c408461

See more details on using hashes here.

File details

Details for the file opensheet_core-0.3.0-pp311-pypy311_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl.

File metadata

File hashes

Hashes for opensheet_core-0.3.0-pp311-pypy311_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 27f3fadd04e7ef5d1790e1c132cbede1bac1b5fe02ba6b0f0504f7e840fc1768
MD5 b69638c91ada2a374570ad75fee2cf19
BLAKE2b-256 4ea8fe0d7dbe3d34fa562c31217de70d2b8f830ff9befa2288be61d2fab51efb

See more details on using hashes here.

File details

Details for the file opensheet_core-0.3.0-cp314-cp314t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl.

File metadata

File hashes

Hashes for opensheet_core-0.3.0-cp314-cp314t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 08199a971b103070b949de6ad811798309ac011283f3938b9ccfe2cf3e118362
MD5 986d0b0c9acaab220c1e3cc45de7dce5
BLAKE2b-256 b974d0e8074511ef37bd794778342f0df47dd07e222571c52f0c145745b0118e

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for opensheet_core-0.3.0-cp314-cp314-win_amd64.whl
Algorithm Hash digest
SHA256 746b11e040994486d341dd79b7e11453fc4eaf32c88540bcc8d732b0ce73492f
MD5 6360809c6aeed71b992574c70933a15d
BLAKE2b-256 081c56dffe49513fa86c0fca0b82f818edc047af45f3872f21b84ea78373e550

See more details on using hashes here.

File details

Details for the file opensheet_core-0.3.0-cp314-cp314-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for opensheet_core-0.3.0-cp314-cp314-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 2d9d1264011a95b88eb27c6a12f96dace59aab5eaee3ccdc749a2a9fae697237
MD5 5c0a46ceaa36ba186e04983757082aa2
BLAKE2b-256 539bc95b59267e2c9018a3827a16f7cf01be3e2de5322543500857305f54fd47

See more details on using hashes here.

File details

Details for the file opensheet_core-0.3.0-cp314-cp314-manylinux_2_17_aarch64.manylinux2014_aarch64.whl.

File metadata

File hashes

Hashes for opensheet_core-0.3.0-cp314-cp314-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 331b3e26d576b7983d7a3478d3f33ad876133f8074c09f50a7ad7026e013057a
MD5 0e53d714c8fdde3c354404e0c64fa3e3
BLAKE2b-256 c88e67f1e7ecb79fbd11ccf6efcd5864cad4505731b3926e4212d25807ec256f

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for opensheet_core-0.3.0-cp314-cp314-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 ee84ab828c83c5628031bc0f5b7485344d35f82b2bde88c334a4034f78fe9f59
MD5 187e5ae71d369975209242b2f9cb7e84
BLAKE2b-256 99a56c2dc02c30be072939e8c66e32f75f204fcba4669885acbb17f549c810be

See more details on using hashes here.

File details

Details for the file opensheet_core-0.3.0-cp314-cp314-macosx_10_12_x86_64.whl.

File metadata

File hashes

Hashes for opensheet_core-0.3.0-cp314-cp314-macosx_10_12_x86_64.whl
Algorithm Hash digest
SHA256 40328ec7e919b7f23f28867bfed3bfba5692678a9663465e3f0e11734d73b656
MD5 c98bdc1eb81a65a2d5bb070c4b1c2125
BLAKE2b-256 4fef88ef45c156c69756f6abbe3604e6c43e27b405d9e4cb91ce0f3ff9694318

See more details on using hashes here.

File details

Details for the file opensheet_core-0.3.0-cp313-cp313t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl.

File metadata

File hashes

Hashes for opensheet_core-0.3.0-cp313-cp313t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 b2e79ef0d209c6fa717ed8e566425a9ed20b6287833ebdffa3660bac15720a7e
MD5 64c6530ee14f68817f03c0570badcead
BLAKE2b-256 1069e509e3c1a23496d9312da052289b56069c7f21496e8df2bc190614562cc9

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for opensheet_core-0.3.0-cp313-cp313-win_amd64.whl
Algorithm Hash digest
SHA256 7380294018d21cf1e08fee5858b04cddc69429d95da7380915e3ebb582b6c4ed
MD5 ac446fbcdc920be0a54154421b5c6859
BLAKE2b-256 6a53c81e8b311261ccbb0a7ff3770943906e12d4819888a00dc38e3ef6604edc

See more details on using hashes here.

File details

Details for the file opensheet_core-0.3.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for opensheet_core-0.3.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 6ddb9bdb8e654cef23811932e233f8ab754e0aae1ecbbc74455a317e0555028a
MD5 1bc9f7343f5f32614f832b1d7112aaa7
BLAKE2b-256 51488455bbfb5acf0193072e1b42b7cf24840ff8174a125852780b4ee1c3193d

See more details on using hashes here.

File details

Details for the file opensheet_core-0.3.0-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl.

File metadata

File hashes

Hashes for opensheet_core-0.3.0-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 d0f9302b6484068624f356f622ad0a747ba3f5e7d03e8f6c5bde0f950c8275a6
MD5 40ed25c677786c1ad870fb36cf880993
BLAKE2b-256 fb2fdd8e65b5c8763dd0a09e61c115cc50c002890ceb43975281a19307dbedf9

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for opensheet_core-0.3.0-cp313-cp313-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 7371cade80c7e7f78f34e424f20deee66fb32bb93fd38532bac389527efaf01b
MD5 dce13d0eecc43539f712e0d647d6d41e
BLAKE2b-256 f02ac63f7afa8e84f8456a0321d13769f239c71f90f31d74d5318b2ff0655500

See more details on using hashes here.

File details

Details for the file opensheet_core-0.3.0-cp313-cp313-macosx_10_12_x86_64.whl.

File metadata

File hashes

Hashes for opensheet_core-0.3.0-cp313-cp313-macosx_10_12_x86_64.whl
Algorithm Hash digest
SHA256 bdf134bae03d69a2141b3c3f782bb9e6ff4f08e7d60d0c62cd7beff898cc065c
MD5 4f4edcad6c06aa38758aa1d84c215605
BLAKE2b-256 60a543b0a4b9df274edb7105aca2a7ee71b9eb78ef00476f4e725dc30799c42a

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for opensheet_core-0.3.0-cp312-cp312-win_amd64.whl
Algorithm Hash digest
SHA256 231d386323bf9abf84762609607ef3d5929238f81dc95c067c2de5db043e2cc1
MD5 aad55a8c7b00b6ae75ff6ff42db99cb8
BLAKE2b-256 fb78f95123c56b5b88c87503974e5468a43cb6dd0b44199e4e3006e9ec664369

See more details on using hashes here.

File details

Details for the file opensheet_core-0.3.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for opensheet_core-0.3.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 d0306a84e00a34f1d9e2f2a31e8699217b4d106ac312d668a8c67c029bfc8bf8
MD5 e2889d0d98b82bf805d505b4beeb91a0
BLAKE2b-256 2c69a4c16e2d3879fa9a9aaddd75fdd4d4addc602ba4b692ec9f10336e04a225

See more details on using hashes here.

File details

Details for the file opensheet_core-0.3.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl.

File metadata

File hashes

Hashes for opensheet_core-0.3.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 64a93893f7a1d2636cd30d1d9b6408492577dcfcd280cd19acc224f3e73d395c
MD5 12a2a45a2ecdabec95c6f98f58756de1
BLAKE2b-256 3d5c957ea95965dba43629c1b363e5cf0f77a800c80f0000773900d47eab727a

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for opensheet_core-0.3.0-cp312-cp312-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 91d415bb042f1ab15aff3d78754f7e421808dd7115d6bb2e5199eb50b948e4db
MD5 938d5f14cac2fe40e8ed7de1bffcf0f5
BLAKE2b-256 64847415b36163a750f031ad3b903b27b39cc6d4916e08a257a71465dd2cb342

See more details on using hashes here.

File details

Details for the file opensheet_core-0.3.0-cp312-cp312-macosx_10_12_x86_64.whl.

File metadata

File hashes

Hashes for opensheet_core-0.3.0-cp312-cp312-macosx_10_12_x86_64.whl
Algorithm Hash digest
SHA256 c43037d5f87f980695b8f6bb117295eb520e5cf5430654b0381c127b07936adb
MD5 2852f9ef4d340ee3850651779b83be0e
BLAKE2b-256 db1250f348dec6babbe66a5d18b5f55994c2a5f8dff031839086668f3a49fc8c

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for opensheet_core-0.3.0-cp311-cp311-win_amd64.whl
Algorithm Hash digest
SHA256 ab89ef7822b98ddf42db374c5cd41ed6f7c977b56ff79d2c53a9b0a7d4072050
MD5 75bc6738cb2cee212ccfc14e9ba539c4
BLAKE2b-256 c8ca516ad950f85351679a163aa59ac9b3756e7aacbc4451838f5f28c46bb82c

See more details on using hashes here.

File details

Details for the file opensheet_core-0.3.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for opensheet_core-0.3.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 9bcab4f132d3ba9b0fa0fa7ac8fb1246c55028e252c3d25d5e07125aa0edf676
MD5 62f445907f9497799f7a88261ec240b9
BLAKE2b-256 932c1a0101e3f3faff16e5561b886af88d58d13e9830e345d8a20bf28587569b

See more details on using hashes here.

File details

Details for the file opensheet_core-0.3.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl.

File metadata

File hashes

Hashes for opensheet_core-0.3.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 4d2a30aef1367911b964e0c3d8f40f397736bad82486d202bf1e9eca512a5672
MD5 1e7d8ece536ff52b5fbf41892e9d7f9b
BLAKE2b-256 a95e335df8511cf85e28673b3b6475da4e150520add7e9751bf4990777fe8fa6

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for opensheet_core-0.3.0-cp311-cp311-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 cc7d14839975092269e1aae5e817a3266e09781fb3eed049a6c6c56acbef228f
MD5 f62a7c31f50998be8a3384569287a224
BLAKE2b-256 c3d96e3cf54bf6ebeac2696b82a028590fbe6e4ab82e5bac2fdb61eb855409b4

See more details on using hashes here.

File details

Details for the file opensheet_core-0.3.0-cp311-cp311-macosx_10_12_x86_64.whl.

File metadata

File hashes

Hashes for opensheet_core-0.3.0-cp311-cp311-macosx_10_12_x86_64.whl
Algorithm Hash digest
SHA256 6c95c9be2108dfa0a2cac5ccc2e0759c8a55caffcfb65009ce4b1c910b59d128
MD5 cf08e3d6680fb428c5e99f8d5dd55366
BLAKE2b-256 64f0db5cf965547e4a569bbe9b6afb52af0a8caf03d6bac0ad3af2c55c6dd1ac

See more details on using hashes here.

File details

Details for the file opensheet_core-0.3.0-cp310-cp310-win_amd64.whl.

File metadata

File hashes

Hashes for opensheet_core-0.3.0-cp310-cp310-win_amd64.whl
Algorithm Hash digest
SHA256 abb53498d6ec9058a4d1dbd1dab6870671a8328356cb5e14324a1e2b9ae94832
MD5 fb0f59c596829e9f5ee1725d60c19579
BLAKE2b-256 e04fba0432485d2fc59cca5a62a8c5b2cc58fed202afa5f6a7d79d82a8b96ece

See more details on using hashes here.

File details

Details for the file opensheet_core-0.3.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for opensheet_core-0.3.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 a617885bd842bcf19a73382841bc9166aad00cbebed0d80a0cd5ede63d950b6d
MD5 0fb9c477be0caaee7f5c9987b1cdad5c
BLAKE2b-256 8590806d5c58f6c6afa6cc4449cec4765b420571979a972783ad209e58815a72

See more details on using hashes here.

File details

Details for the file opensheet_core-0.3.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl.

File metadata

File hashes

Hashes for opensheet_core-0.3.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 872b91abad02abfae7635d7d1d9a8bf6f4cce58308f008e0c97e09214340b2d5
MD5 b1bbf921a7c788fb40a9d909c48e6e86
BLAKE2b-256 ce9a0e1f1f743e7ca7e40b4262609a7f8b78136abf293525301f2af300cc67c6

See more details on using hashes here.

File details

Details for the file opensheet_core-0.3.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for opensheet_core-0.3.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 f3013c9b752cda6e7331e91d99615154d1efdf4932703dde0110508ae72b1f4c
MD5 a3f015b87da8a3efce1172babd0f6c1d
BLAKE2b-256 c7b315f7a7d160b3edc398191e8055db2de84b6aa18b0889b3e4b76aae6010aa

See more details on using hashes here.

File details

Details for the file opensheet_core-0.3.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl.

File metadata

File hashes

Hashes for opensheet_core-0.3.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 65543c778e114f29173af5265c79a255f9e75ee1d9ed04d4a68d6b09df16f4f8
MD5 04d6ee3a2d8816279f3090aec1a1c539
BLAKE2b-256 a5be3de7b4c49a997ea126c4041fe245e32c6cf35b8942330055d991689fd5f4

See more details on using hashes here.

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