Skip to main content

A Python library for Google Sheets with high-level API, automatic type inference, and efficient caching.

Project description

SmartSpread

A Python library for Google Sheets that extends gspread with a high-level API, automatic type inference, and efficient caching.

Features

  • Simple API: Intuitive interface for spreadsheet and tab operations
  • Multiple Data Formats: Work with DataFrames, list of dicts, or list of lists
  • Automatic Type Inference: Smart conversion of numeric, string, and None values
  • Efficient Caching: Minimizes API calls to stay within rate limits
  • Pandas Integration: Seamless DataFrame read/write operations
  • Row Operations: Update or insert rows based on column patterns

Installation

pip install smartspread

Quick Start

Authentication

  1. Create a Google Cloud Project
  2. Enable the Google Sheets API
  3. Create a service account and download credentials JSON
  4. Share your spreadsheet with the service account email

Basic Usage

from smart_spread import SmartSpread

# Initialize with credentials
spread = SmartSpread(
    sheet_identifier="your-spreadsheet-id-or-name",
    key_file="path/to/credentials.json"
)

# Get or create a tab
tab = spread.tab("MyTab")

# Read data as DataFrame
df = tab.read_data()

# Modify data
tab.data["new_column"] = "value"

# Write back to Google Sheets
tab.write_data(overwrite_tab=True)

Update Rows by Pattern

# Update existing row or insert new one
tab.update_row_by_column_pattern(
    column="ID",
    value=123,
    updates={"Status": "completed", "Updated": "2024-01-01"}
)
tab.write_data(overwrite_tab=True)

Filter Data

# Filter rows by pattern
filtered = tab.filter_rows_by_column("Name", "Alice")
print(filtered)

Work with Different Formats

# DataFrame format (default)
tab_df = spread.tab("Sheet1", data_format="DataFrame")
df = tab_df.data  # pandas DataFrame

# List of dicts format
tab_dict = spread.tab("Sheet2", data_format="dict")
data = tab_dict.data  # [{"col1": "val1", ...}, ...]

# List of lists format
tab_list = spread.tab("Sheet3", data_format="list")
data = tab_list.data  # [["header1", "header2"], ["val1", "val2"], ...]

Refresh Data

# Reload data after external changes
tab.refresh()

# Refresh spreadsheet metadata
spread.refresh()

API Reference

SmartSpread

  • SmartSpread(sheet_identifier, key_file=None, service_account_data=None, user_email=None)
  • spread.tab(tab_name, data_format="DataFrame", keep_number_formatting=False) - Get or create tab
  • spread.tab_names - List all tab names
  • spread.tab_exists(tab_name) - Check if tab exists
  • spread.url - Get spreadsheet URL
  • spread.grant_access(email, role="owner") - Grant access to user
  • spread.refresh() - Clear cache and reload metadata

SmartTab

  • tab.read_data() - Read data from Google Sheets
  • tab.write_data(overwrite_tab=False, as_table=False) - Write data to Google Sheets
  • tab.update_row_by_column_pattern(column, value, updates) - Update or insert row
  • tab.filter_rows_by_column(column, pattern) - Filter rows by pattern
  • tab.refresh() - Reload data from Google Sheets
  • tab.data - Access the data (DataFrame, list of dicts, or list of lists)

Notes

  • Google Sheets API has rate limits (60 requests/minute for free tier)
  • SmartSpread uses caching to minimize API calls
  • Empty cells are represented as None in DataFrames
  • Integer columns use nullable Int64 dtype to preserve None values

License

MIT License - see LICENSE file for details.

Links

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

smartspread-1.1.0.tar.gz (11.9 kB view details)

Uploaded Source

Built Distribution

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

smartspread-1.1.0-py3-none-any.whl (9.0 kB view details)

Uploaded Python 3

File details

Details for the file smartspread-1.1.0.tar.gz.

File metadata

  • Download URL: smartspread-1.1.0.tar.gz
  • Upload date:
  • Size: 11.9 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.14.2

File hashes

Hashes for smartspread-1.1.0.tar.gz
Algorithm Hash digest
SHA256 0700a362f619272ebae6c955a192c244d08ea7a38c4832d20ed75b33e01e89ec
MD5 5ce32d29d5fc500369f7756f8ec99d51
BLAKE2b-256 ba70e75f8982a38d4309bfde46cb848d3923f681f0c6b8e3e948b004f8ee5c9a

See more details on using hashes here.

File details

Details for the file smartspread-1.1.0-py3-none-any.whl.

File metadata

  • Download URL: smartspread-1.1.0-py3-none-any.whl
  • Upload date:
  • Size: 9.0 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.14.2

File hashes

Hashes for smartspread-1.1.0-py3-none-any.whl
Algorithm Hash digest
SHA256 8c392f52edd24f2b7efc16e469fac6be3912d8e6b35f0564ec4215dd6901914d
MD5 638e090d39f76c80dd460012bc1ac189
BLAKE2b-256 cd07ac71821fe34816d14679271ce684ce220c52587235e77f3f38b9113bda0b

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