/start-10-3.es
Lesson command
$ npx -y skills add minicoohei/ai-agent-camp --agent claude-codeHow 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.mddescription: "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.getActiveRead more
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.getActiveAI 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
Other commands on ai-agent-camp.
- /check-setup.en
Top-level alias — see lesson/check-setup.en.md for the full body.
Open command - /check-setup.es
Alias de nivel superior — el cuerpo completo está en lesson/check-setup.es.md.
Open command - /check-setup
Top-level alias — see lesson/check-setup.md for the full body.
Open command - /check-security.en
Lesson command
Open command - /check-security.es
Lesson command
Open command - /check-security
Lesson command
Open command

