--- name: google-sheet 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 [args] ``` ## Commands ### Data Operations | Command | Args | Description | |---------|------|-------------| | `read` | ` ` | Read cells | | `write` | ` ` | Write data | | `append` | ` ` | Append rows | | `clear` | ` ` | Clear range | ### Formatting | Command | Args | Description | |---------|------|-------------| | `format` | ` ` | Format cells | | `getFormat` | ` ` | Get cell formats | | `borders` | ` [styleJson]` | Add borders | | `copyFormat` | ` ` | Copy format between ranges | | `merge` | ` ` | Merge cells | | `unmerge` | ` ` | Unmerge cells | ### Layout | Command | Args | Description | |---------|------|-------------| | `resize` | ` ` | Resize columns/rows | | `autoResize` | ` ` | Auto-fit columns | | `freeze` | ` [rows] [cols]` | Freeze rows/columns | ### Sheet Management | Command | Args | Description | |---------|------|-------------| | `create` | `` | 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