Manages Google Docs, Sheets, and Slides through the Docs, Sheets, and Slides APIs. Create, read, and edit documents, spreadsheets, and presentations programmatically. Format content, manage collaboration, extract data, and automate document workflows. Use when working with Google Workspace documents, editing content, extracting data, or automating document creation.
Comprehensive Google Workspace document integration enabling programmatic creation, editing, and management of Docs, Sheets, and Slides through their respective APIs.
When asked to work with Google Docs, Sheets, or Slides:
1. Enable APIs:
# Visit Google Cloud Console
# https://console.cloud.google.com/
# Enable these APIs:
# - Google Docs API
# - Google Sheets API
# - Google Slides API
# - Google Drive API (for file operations)
2. Create OAuth2 Credentials:
# In Google Cloud Console:
# APIs & Services > Credentials > Create Credentials > OAuth client ID
# Application type: Desktop app
# Download credentials as credentials.json
3. Install Dependencies:
pip install google-auth google-auth-oauthlib google-auth-httplib2 google-api-python-client --break-system-packages
4. Initial Authentication:
python scripts/authenticate.py
# Opens browser for Google sign-in
# Saves token.json for future use
See reference/setup-guide.md for detailed setup.
Create blank Doc:
# New document
python scripts/create_doc.py --title "Project Proposal"
# With initial content
python scripts/create_doc.py \
--title "Meeting Notes" \
--content-file template.txt
Create from template:
# Copy template and customize
python scripts/create_from_template.py \
--template-id TEMPLATE_DOC_ID \
--title "Q4 Report" \
--replacements "{{date}}:2025-01-20,{{author}}:John Smith"
Get document content:
# Read as text
python scripts/read_doc.py --doc-id DOC_ID
# Get structured content
python scripts/get_doc_structure.py --doc-id DOC_ID --output doc.json
# Export as different format
python scripts/export_doc.py --doc-id DOC_ID --format pdf --output report.pdf
python scripts/export_doc.py --doc-id DOC_ID --format docx --output report.docx
Extract specific elements:
# Get headings only
python scripts/extract_headings.py --doc-id DOC_ID
# Get tables
python scripts/extract_tables.py --doc-id DOC_ID
# Get images
python scripts/extract_images.py --doc-id DOC_ID --output ./images/
Append content:
# Add text to end
python scripts/append_doc.py \
--doc-id DOC_ID \
--text "New paragraph content"
# Add formatted content
python scripts/append_doc.py \
--doc-id DOC_ID \
--content-file content.json
Insert content:
# Insert at specific position
python scripts/insert_text.py \
--doc-id DOC_ID \
--index 100 \
--text "Inserted text"
# Insert before/after heading
python scripts/insert_after_heading.py \
--doc-id DOC_ID \
--heading "Introduction" \
--text "New content"
Replace content:
# Find and replace
python scripts/replace_text.py \
--doc-id DOC_ID \
--find "old text" \
--replace "new text"
# Replace with regex
python scripts/replace_text.py \
--doc-id DOC_ID \
--pattern "\d{4}-\d{2}-\d{2}" \
--replace "2025-01-20"
Delete content:
# Delete range
python scripts/delete_range.py \
--doc-id DOC_ID \
--start-index 100 \
--end-index 200
Apply text formatting:
# Bold text
python scripts/format_text.py \
--doc-id DOC_ID \
--range 10:50 \
--bold
# Multiple formats
python scripts/format_text.py \
--doc-id DOC_ID \
--range 10:50 \
--bold --italic --underline \
--font-size 14 \
--font-family "Arial"
Apply paragraph formatting:
# Set heading style
python scripts/set_paragraph_style.py \
--doc-id DOC_ID \
--range 0:20 \
--style "HEADING_1"
# Adjust alignment and spacing
python scripts/format_paragraph.py \
--doc-id DOC_ID \
--range 50:100 \
--alignment "CENTER" \
--line-spacing 1.5
Insert elements:
# Insert image
python scripts/insert_image.py \
--doc-id DOC_ID \
--index 100 \
--image-url "https://example.com/image.jpg"
# Insert table
python scripts/insert_table.py \
--doc-id DOC_ID \
--index 100 \
--rows 3 \
--columns 4
# Insert page break
python scripts/insert_page_break.py \
--doc-id DOC_ID \
--index 500
Create blank Sheet:
# New spreadsheet
python scripts/create_sheet.py --title "Budget 2025"
# With initial data
python scripts/create_sheet.py \
--title "Sales Data" \
--data data.csv
Create with structure:
# Multiple sheets with headers
python scripts/create_sheet.py \
--title "Project Tracker" \
--sheets "Tasks,Timeline,Budget" \
--headers "Task,Owner,Status,Due Date"
Get data:
# Read range
python scripts/read_sheet.py \
--sheet-id SHEET_ID \
--range "Sheet1!A1:D10"
# Read entire sheet
python scripts/read_sheet.py \
--sheet-id SHEET_ID \
--sheet "Sheet1"
# Export as CSV
python scripts/export_sheet.py \
--sheet-id SHEET_ID \
--format csv \
--output data.csv
Get sheet properties:
# Get sheet metadata
python scripts/get_sheet_info.py --sheet-id SHEET_ID
# List all sheets
python scripts/list_sheets.py --sheet-id SHEET_ID
Update cells:
# Update single cell
python scripts/update_cell.py \
--sheet-id SHEET_ID \
--cell "A1" \
--value "New Value"
# Update range
python scripts/update_range.py \
--sheet-id SHEET_ID \
--range "A1:B10" \
--values data.csv
# Append rows
python scripts/append_rows.py \
--sheet-id SHEET_ID \
--sheet "Sheet1" \
--values new_data.csv
Formulas:
# Add formula
python scripts/set_formula.py \
--sheet-id SHEET_ID \
--cell "D2" \
--formula "=SUM(A2:C2)"
# Copy formula down column
python scripts/fill_formula.py \
--sheet-id SHEET_ID \
--range "D2:D100" \
--formula "=SUM(A2:C2)"
Formatting:
# Format cells
python scripts/format_cells.py \
--sheet-id SHEET_ID \
--range "A1:D1" \
--bold \
--background-color "blue" \
--text-color "white"
# Number format
python scripts/set_number_format.py \
--sheet-id SHEET_ID \
--range "B2:B100" \
--format "CURRENCY"
Sheet structure:
# Add sheet
python scripts/add_sheet.py \
--sheet-id SHEET_ID \
--title "New Sheet"
# Delete sheet
python scripts/delete_sheet.py \
--sheet-id SHEET_ID \
--sheet-name "Old Sheet"
# Rename sheet
python scripts/rename_sheet.py \
--sheet-id SHEET_ID \
--old-name "Sheet1" \
--new-name "Data"
Sort and filter:
# Sort range
python scripts/sort_range.py \
--sheet-id SHEET_ID \
--range "A1:D100" \
--sort-by-column 1 \
--ascending
# Create filter
python scripts/create_filter.py \
--sheet-id SHEET_ID \
--range "A1:D100"
Create blank presentation:
# New presentation
python scripts/create_slides.py --title "Q4 Review"
# From template
python scripts/create_from_template.py \
--template-id TEMPLATE_ID \
--title "Sales Presentation"
Get presentation content:
# Read all slides
python scripts/read_slides.py --presentation-id PRES_ID
# Get specific slide
python scripts/get_slide.py \
--presentation-id PRES_ID \
--slide-index 0
# Export as PDF
python scripts/export_slides.py \
--presentation-id PRES_ID \
--format pdf \
--output presentation.pdf
Add slides:
# Add blank slide
python scripts/add_slide.py \
--presentation-id PRES_ID \
--layout "TITLE_AND_BODY" \
--index 1
# Add slide with content
python scripts/add_slide.py \
--presentation-id PRES_ID \
--layout "TITLE_AND_BODY" \
--title "Key Points" \
--body "Point 1\nPoint 2\nPoint 3"
Update slides:
# Update text
python scripts/update_slide_text.py \
--presentation-id PRES_ID \
--slide-index 0 \
--find "{{title}}" \
--replace "Q4 Results"
# Replace image
python scripts/replace_image.py \
--presentation-id PRES_ID \
--slide-index 1 \
--image-url "https://example.com/chart.png"
Delete slides:
# Delete slide
python scripts/delete_slide.py \
--presentation-id PRES_ID \
--slide-index 2
Multiple operations in one API call:
# Example: Create doc with multiple sections
requests = [
{'insertText': {'location': {'index': 1}, 'text': 'Title\n'}},
{'updateParagraphStyle': {'range': {'startIndex': 1, 'endIndex': 6},
'paragraphStyle': {'namedStyleType': 'HEADING_1'}}},
{'insertText': {'location': {'index': 7}, 'text': 'Content here\n'}}
]
python scripts/batch_update_doc.py \
--doc-id DOC_ID \
--requests requests.json
Scenario: Generate monthly report from data
# 1. Create doc from template
python scripts/create_from_template.py \
--template-id TEMPLATE_ID \
--title "Monthly Report - Jan 2025"
# 2. Fetch data from Sheet
python scripts/read_sheet.py \
--sheet-id DATA_SHEET_ID \
--range "Summary!A1:B10" \
--output data.json
# 3. Insert data into doc
python scripts/populate_doc.py \
--doc-id NEW_DOC_ID \
--data data.json \
--template-mapping mappings.json
# 4. Export as PDF
python scripts/export_doc.py \
--doc-id NEW_DOC_ID \
--format pdf \
--output "Report-Jan-2025.pdf"
Scenario: Append form responses to Sheet
# Append new row with timestamp
python scripts/append_with_timestamp.py \
--sheet-id SHEET_ID \
--values "name,email,response" \
--add-timestamp
Scenario: Generate presentation from data
# Create presentation with data-driven slides
python scripts/generate_presentation.py \
--template-id TEMPLATE_ID \
--data-source SHEET_ID \
--output-title "Weekly Dashboard"
Scenario: Create multi-language versions
# Extract text and translate
python scripts/translate_doc.py \
--source-doc-id DOC_ID \
--target-languages "es,fr,de" \
--create-copies
Scenario: Track and manage document changes
# Get revision history
python scripts/get_revisions.py --doc-id DOC_ID
# Accept/reject suggestions
python scripts/manage_suggestions.py \
--doc-id DOC_ID \
--suggestion-id SUGG_ID \
--action accept
{
"title": "Document Title",
"body": {
"content": [
{
"paragraph": {
"elements": [
{
"startIndex": 1,
"endIndex": 10,
"textRun": {
"content": "Text here",
"textStyle": {
"bold": true,
"fontSize": {"magnitude": 12, "unit": "PT"}
}
}
}
],
"paragraphStyle": {
"namedStyleType": "HEADING_1"
}
}
}
]
}
}
{
"properties": {
"title": "Spreadsheet Title"
},
"sheets": [
{
"properties": {
"title": "Sheet1",
"sheetId": 0
},
"data": [
{
"rowData": [
{
"values": [
{"userEnteredValue": {"stringValue": "Cell A1"}}
]
}
]
}
]
}
]
}
Docs API:
Sheets API:
Slides API:
Best practices:
'https://www.googleapis.com/auth/documents' # Read/write
'https://www.googleapis.com/auth/documents.readonly' # Read-only
'https://www.googleapis.com/auth/spreadsheets' # Read/write
'https://www.googleapis.com/auth/spreadsheets.readonly' # Read-only
'https://www.googleapis.com/auth/presentations' # Read/write
'https://www.googleapis.com/auth/presentations.readonly' # Read-only
Docs:
create_doc.py - Create documentread_doc.py - Read contentappend_doc.py - Append textinsert_text.py - Insert at positionreplace_text.py - Find and replaceformat_text.py - Apply formattingexport_doc.py - Export to formatSheets:
create_sheet.py - Create spreadsheetread_sheet.py - Read dataupdate_cell.py - Update cellupdate_range.py - Update rangeappend_rows.py - Append dataset_formula.py - Add formulaformat_cells.py - Format cellssort_range.py - Sort dataSlides:
create_slides.py - Create presentationread_slides.py - Read slidesadd_slide.py - Add new slideupdate_slide_text.py - Update textreplace_image.py - Replace imageexport_slides.py - Export formatCommon:
authenticate.py - OAuth setupbatch_update.py - Batch operationscreate_from_template.py - Template operationsSee examples/ for complete workflows:
"Invalid index"
"Permission denied"
"Rate limit exceeded"
"Invalid range"