Skip to content
Documentation
Command

/start-10-3.es

Lesson command

From plugin
ai-agent-camp
345200 skills8 agents200 commands
Install
$ npx -y skills add minicoohei/ai-agent-camp --agent claude-code

How it fires

How this command gets triggered: by you, by Claude, or both.

  • Fires itselfClaude auto-loads it when your prompt matches the work.
  • You can call itInvoke it directly when you want it.
  • Slash command/start-10-3.es

Context preview

What this command does when you run it.

Lesson command

Command definition

start-10-3.es.md
description: "Lesson command"
chapter: "courses/aiagent/lesson03-core/module10-gas"
prerequisites: ["start-10-1", "start-10-2"]
duration: "~30 min"
level: "intermediate"
tags: ["gas", "sheets", "google", "automation"]
nonInteractiveMode: deferred

🎓 Lesson 10-3: Ejecucion programada y configuracion de triggers

📍 Lo que hara en esta sesion

**Lección 10-3: Integración de GAS con Google Sheets**!

| Elemento | Contenido | |------|------| | Objetivo | Automatizar la lectura/escritura de hojas de calculo, procesamiento de datos y generacion de informes desde GAS | | Duracion | ~30 min | | Habilidades utilizadas | gas-clasp-ops, Google Sheets API, gogcli | | Requisitos previos | Lesson 10-1 y 10-2 completadas, proyecto GAS creado | | Pagina del curso | [Module 10: GAS](https://ai-agent.camp/es/course/module-10) como referencia paralela |

**Flujo de la sesion:** 1. Acceso a hoja de cálculo 2. Funcionalidad de lectura de datos 3. Funcionalidad de escritura de datos 4. Funcionalidad de generación de informes 5. Flujo de trabajo de automatización

Al final de esta sesion, podra automatizar la integracion con Sheets.

> **💡 Consejo**: Si la respuesta de la IA se detiene a mitad de camino, escriba "por favor continue" o "siga adelante" para reanudar. Este es un comportamiento de Cursor, no un mal funcionamiento.

---

🎯 Verificacion de preparacion

Primero verifiquemos que todo este listo.

**Configuracion de AskQuestion:**

{
  "title": "🎯 Verificacion previa a la sesion",
  "questions": [{
    "id": "readiness",
    "prompt": "Esta listo/a?",
    "options": [
      {"id": "ready", "label": "Listo! Comencemos"},
      {"id": "check_prereq", "label": "Verificar requisitos previos"},
      {"id": "view_html", "label": "Ver primero la pagina del curso"},
      {"id": "different_lesson", "label": "Ir a otra leccion"}
    ]
  }]
}

(ready → Ir al Step 1) (check_prereq → Ejecutar verificacion de requisitos previos) (view_html → Mostrar ruta de la pagina del curso) (different_lesson → Mostrar lista de modulos)

---

🚀 Step 1: Spreadsheet Access

Utilice AskQuestion para elegir "Continuar / Solo ver el ejemplo / Omitir".

**Configuracion de AskQuestion:**

{
  "title": "🚀 Step 1: Acceso a hoja de cálculo",
  "questions": [{
    "id": "step_action",
    "prompt": "Que desea hacer con este paso?",
    "options": [
      {"id": "practice", "label": "Continuar"},
      {"id": "review", "label": "Solo ver el ejemplo"},
      {"id": "skip", "label": "Omitir"}
    ]
  }]
}

**Indicaciones tras la seleccion:** Entrada:

Por favor, cree un archivo Sheets.gs en el directorio gas-example con el siguiente contenido:

function getActiveSpreadsheet() {
  const ss = SpreadsheetApp.getActiveSpreadsheet();
  if (!ss) {
    Logger.log("No hay hoja de cálculo activa. Por favor, cree una nueva.");
    return null;
  }
  Logger.log("Hoja de cálculo: " + ss.getName());
  Logger.log("ID de la hoja de cálculo: " + ss.getId());
  return ss;
}

function getAllSheets() {
  const ss = SpreadsheetApp.getActiveSpreadsheet();
  if (!ss) return [];

  const sheets = ss.getSheets();
  Logger.log("Total de hojas: " + sheets.length);

  sheets.forEach(sheet => {
    Logger.log("- " + sheet.getName() + " (" + sheet.getLastRow() + " filas)");
  });

  return sheets;
}

Por favor, sincronice con clasp push.

**Resultado esperado:** Sheets.gs se sincroniza con Google Drive.

---

🚀 Step 2: Data Reading Functions

Utilice AskQuestion para elegir "Continuar / Solo ver el ejemplo / Omitir".

**Configuracion de AskQuestion:**

{
  "title": "🚀 Step 2: Funciones de lectura de datos",
  "questions": [{
    "id": "step_action",
    "prompt": "Que desea hacer con este paso?",
    "options": [
      {"id": "practice", "label": "Continuar"},
      {"id": "review", "label": "Solo ver el ejemplo"},
      {"id": "skip", "label": "Omitir"}
    ]
  }]
}

**Indicaciones tras la seleccion:** Entrada:

Por favor, añada las siguientes funciones de lectura de datos a Sheets.gs:

function getDataRange(sheetName, range) {
  const ss = SpreadsheetApp.getActiveSpreadsheet();
  const sheet = ss.getSheetByName(sheetName);
  if (!sheet) {
    Logger.log("Hoja no encontrada: " + sheetName);
    return [];
  }

  const data = sheet.getRange(range).getValues();
  Logger.log("Datos obtenidos: " + range + " (" + data.length + " filas)");
  return data;
}

function getAllData(sheetName) {
  const ss = SpreadsheetApp.getActiveSpreadsheet();
  const sheet = ss.getSheetByName(sheetName);
  if (!sheet) return [];

  const lastRow = sheet.getLastRow();
  const lastColumn = sheet.getLastColumn();

  if (lastRow < 1) {
    Logger.log("No hay datos disponibles");
    return [];
  }

  return sheet.getRange(1, 1, lastRow, lastColumn).getValues();
}

Por favor, sincronice con clasp push.

**Resultado esperado:** Se agrega una funcion para leer datos de la hoja de calculo.

---

🚀 Step 3: Data Writing Functions

Utilice AskQuestion para elegir "Continuar / Solo ver el ejemplo / Omitir".

**Configuracion de AskQuestion:**

{
  "title": "🚀 Step 3: Funciones de escritura de datos",
  "questions": [{
    "id": "step_action",
    "prompt": "Que desea hacer con este paso?",
    "options": [
      {"id": "practice", "label": "Continuar"},
      {"id": "review", "label": "Solo ver el ejemplo"},
      {"id": "skip", "label": "Omitir"}
    ]
  }]
}

**Indicaciones tras la seleccion:** Entrada:

Por favor, añada las siguientes funciones de escritura de datos a Sheets.gs:

function writeSingleCell(sheetName, cell, value) {
  const ss = SpreadsheetApp.getActiveSpreadsheet();
  const sheet = ss.getSheetByName(sheetName);
  if (!sheet) {
    Logger.log("Hoja no encontrada: " + sheetName);
    return false;
  }

  sheet.getRange(cell).setValue(value);
  Logger.log("Escritura en celda: " + cell + " = " + value);
  return true;
}

function appendRow(sheetName, rowData) {
  const ss = SpreadsheetApp.getActive
Read more
Ships withai-agent-camp

AI Agent Training for Non-Engineers - Complete Guide to Claude Code / Cursor / Codex ### ⚠️ Before you clone Official repository (maintained by the authors): Running AI agents from this repo grants them shell, file-write, and external-API permissions on your

Get the whole plugin