← Back to Skills
Productivity

google-sheet

longmaba By longmaba 👁 6 views ▲ 0 votes

Read, write, append, and manage Google Sheets via the Google

GitHub
---
name: google-sheets
description: Read, write, append, and manage Google Sheets via the Google Sheets API (Node.js SDK). Use when you need to interact with spreadsheets — reading data, writing/updating cells, appending rows, clearing ranges, formatting cells, managing sheets. Requires a Google Cloud service account with Sheets API enabled.
---

# Google Sheets Skill

Interact with Google Sheets using a service account.

## Setup (One-time)

1. **Google Cloud Console:**
   - Create/select a project
   - Enable "Google Sheets API"
   - Create a Service Account (IAM → Service Accounts → Create)
   - Download JSON key

2. **Configure credentials** (one of these):
   - Set env: `GOOGLE_SERVICE_ACCOUNT_KEY=/path/to/key.json`
   - Place `service-account.json` or `credentials.json` in the skill directory
   - Place in `~/.config/google-sheets/credentials.json`

3. **Share sheets** with the service account email (found in JSON key as `client_email`)

4. **Install dependencies:**
   ```bash
   cd skills/google-sheets && npm install
   ```

## Usage

```bash
node scripts/sheets.js <command> [args]
```

## Commands

### Data Operations

| Command | Args | Description |
|---------|------|-------------|
| `read` | `<id> <range>` | Read cells |
| `write` | `<id> <range> <json>` | Write data |
| `append` | `<id> <range> <json>` | Append rows |
| `clear` | `<id> <range>` | Clear range |

### Formatting

| Command | Args | Description |
|---------|------|-------------|
| `format` | `<id> <range> <formatJson>` | Format cells |
| `getFormat` | `<id> <range>` | Get cell formats |
| `borders` | `<id> <range> [styleJson]` | Add borders |
| `copyFormat` | `<id> <source> <dest>` | Copy format between ranges |
| `merge` | `<id> <range>` | Merge cells |
| `unmerge` | `<id> <range>` | Unmerge cells |

### Layout

| Command | Args | Description |
|---------|------|-------------|
| `resize` | `<id> <sheet> <cols\|rows> <start> <end> <px>` | Resize columns/rows |
| `autoResize` | `<id> <sheet> <startCol> <endCol>` | Auto-fit columns |
| `freeze` | `<id> <sheet> [rows] [cols]` | Freeze rows/columns |

### Sheet Management

| Command | Args | Description |
|---------|------|-------------|
| `create` | `<title>` | Create spreadsheet |
| `info` | `<id>` | Get metadata |
| `addSheet` | `<id> <title>` | Add sheet tab |
| `deleteSheet` | `<id> <sheetName>` | Delete sheet tab |
| `renameSheet` | `<id> <oldName> <newName>` | Rename sheet tab |

## Examples

```bash
# Read data
node scripts/sheets.js read "SPREADSHEET_ID" "Sheet1!A1:C10"

# Write data
node scripts/sheets.js write "SPREADSHEET_ID" "Sheet1!A1:B2" '[["Name","Score"],["Alice",95]]'

# Format cells (yellow bg, bold)
node scripts/sheets.js format "SPREADSHEET_ID" "Sheet1!A1:B2" '{"backgroundColor":{"red":255,"green":255,"blue":0},"textFormat":{"bold":true}}'

# Copy format from one range to another
node scripts/sheets.js copyFormat "SPREADSHEET_ID" "Sheet1!A1:C3" "Sheet1!D1:F3"

# Add borders
node scripts/sheets.js borders "SPREADSHEET_ID" "Sheet1!A1:C3"

# Resize columns to 150px
node scripts/sheets.js resize "SPREADSHEET_ID" "Sheet1" cols A C 150

# Auto-fit column widths
node scripts/sheets.js autoResize "SPREADSHEET_ID" "Sheet1" A Z

# Freeze first row and column
node scripts/sheets.js freeze "SPREADSHEET_ID" "Sheet1" 1 1

# Add new sheet tab
node scripts/sheets.js addSheet "SPREADSHEET_ID" "NewSheet"
```

## Format Options

```json
{
  "backgroundColor": {"red": 255, "green": 255, "blue": 0},
  "textFormat": {
    "bold": true,
    "italic": false,
    "fontSize": 12,
    "foregroundColor": {"red": 0, "green": 0, "blue": 0}
  },
  "horizontalAlignment": "CENTER",
  "verticalAlignment": "MIDDLE",
  "wrapStrategy": "WRAP"
}
```

## Border Style

```json
{
  "style": "SOLID",
  "color": {"red": 0, "green": 0, "blue": 0}
}
```

Border styles: DOTTED, DASHED, SOLID, SOLID_MEDIUM, SOLID_THICK, DOUBLE

## Finding Spreadsheet ID

From URL: `https://docs.google.com/spreadsheets/d/SPREADSHEET_ID/edit`

## Troubleshooting

- **403 Forbidden**: Sheet not shared with service account email
- **404 Not Found**: Wrong spreadsheet ID or sheet name
productivity

Comments

Sign in to leave a comment

Loading comments...