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
- Create a Google Cloud Project
- Enable the Google Sheets API
- Create a service account and download credentials JSON
- 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 tabspread.tab_names- List all tab namesspread.tab_exists(tab_name)- Check if tab existsspread.url- Get spreadsheet URLspread.grant_access(email, role="owner")- Grant access to userspread.refresh()- Clear cache and reload metadata
SmartTab
tab.read_data()- Read data from Google Sheetstab.write_data(overwrite_tab=False, as_table=False)- Write data to Google Sheetstab.update_row_by_column_pattern(column, value, updates)- Update or insert rowtab.filter_rows_by_column(column, pattern)- Filter rows by patterntab.refresh()- Reload data from Google Sheetstab.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
Nonein DataFrames - Integer columns use nullable
Int64dtype to preserveNonevalues
Changelog
v1.1.1 (2024)
- Fixed: JSON serialization error when using
data_format="list"with nullable Int64 columns containingpd.NAvalues
License
MIT License - see LICENSE file for details.
Links
Project details
Release history Release notifications | RSS feed
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.1.tar.gz
(12.3 kB
view details)
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file smartspread-1.1.1.tar.gz.
File metadata
- Download URL: smartspread-1.1.1.tar.gz
- Upload date:
- Size: 12.3 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.14.2
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
cca64622323811f02acfcf6f95b4a28679d83bb11ac0410293b568faf431a12e
|
|
| MD5 |
b53b16e781cda9c911de2945926934e9
|
|
| BLAKE2b-256 |
cdc1627c1926362db50650d4748e2cc47c8c84543abfe2554517ceac3c75063e
|
File details
Details for the file smartspread-1.1.1-py3-none-any.whl.
File metadata
- Download URL: smartspread-1.1.1-py3-none-any.whl
- Upload date:
- Size: 9.2 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.14.2
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
4f949461946ed685193b1ed33a472fbdccb5bca76d9ed58266e4608bb7d7c3f4
|
|
| MD5 |
09eeab35abde7ec13eb1fe9da25b4172
|
|
| BLAKE2b-256 |
d4b4f3d5aa14470950bd006a15801846af09be95f44dc51c74912b9743748d2d
|