# Fórmulas de Excel con Gemini (SHN-LAB · 003)

Los materiales de un experimento de shinacer. lab: ¿cuántas de las fórmulas que propone Gemini funcionan al pegarlas
en Excel, y cuánto cambia eso según lo que lleve el comando? El protocolo, con las hipótesis y la forma de decidir,
está en <https://shinacer.dev/lab/formulas-de-excel-con-gemini/>. Aquí está todo lo que hace falta para repetir la
medición y comprobarla.

## Qué hay

| Archivo | Qué es |
|---|---|
| `tareas.json` | Las tarjetas de las 20 tareas: la hoja y la celda, la acción de los comandos completos, la situación para las frases A, el tipo de dato, la tolerancia, la fórmula de referencia y los errores típicos. También las partes comunes de los comandos y las cinco tareas del piloto. |
| `invitacion-frases.md` | El mensaje con el que se piden las frases de la versión A, con las mismas situaciones de las tarjetas. |
| `frases-a/` | Las frases de la versión A, tal como llegaron. No las escribieron personas: las escribieron cinco participantes simulados por un asistente de IA, que solo recibieron un perfil y la invitación (`participantes.md` cuenta cómo). |
| `semilla.json`, `azar.mjs` | La semilla publicada y el azar con semilla: la elección de las frases A, el orden y las repeticiones salen de ahí. |
| `comandos.mjs` → `comandos.json` | Los comandos de las cinco versiones (A, A+H, B, B−P y B−R) para cada tarea, y los del piloto. |
| `orden.mjs` → `orden.json` | El orden de la recogida: el piloto, cinco bloques permutados (un cuadrado latino) y el bloque de repeticiones. |
| `generar.mjs` → `datos/` | Las dos hojas (la de prueba y la alterna) en JSON y CSV, y los resultados esperados, calculados sin hoja de cálculo. |
| `controles.mjs` → `controles.json` | Los controles de antes de medir, con lo que dio Excel en cada uno. |
| `extraer.mjs` | La regla que saca las fórmulas de una respuesta. |
| `cascada.mjs` | La cascada del tipo de fallo (idioma, separadores, lógica) y la medida «idioma y separadores». |
| `calificacion.mjs`, `calificar.mjs` | Prueban cada fórmula en Excel, en las dos hojas, con la tolerancia de su tarjeta. |
| `excel/` | El programa que escribe en Excel (`evaluar.ps1`, por COM, y `excel.mjs`) y la lista de funciones que no existen en Excel 2016. |
| `recogida/` | La página de recogida: se construye con los comandos y el orden dentro, y solo deja añadir registros. |
| `analisis/` | El análisis (`analizar.mjs`, `estadistica.mjs`) y su prueba con datos simulados (`simular.mjs` → `simulacion.md`). |
| `pruebas/` | Las pruebas automáticas. |
| `cuaderno.mjs` → `para-llevar/` | El cuaderno de práctica (`cuaderno-de-practica.xlsx`): las hojas, los 20 ejercicios con sus respuestas en las dos hojas y una fórmula posible para cada uno, para practicar o usarlo en clase. |
| `manifiesto.mjs` → `MANIFIESTO.md` | La huella SHA-256 de cada archivo publicado. |

## Lo que hace falta

- **Node.js 22** o más reciente. No hay dependencias que instalar.
- **Para lo que toca Excel** (los controles, la calificación y la lista de funciones): Windows, Excel de Microsoft 365 y
  PowerShell 7 (`pwsh`). El programa abre Excel en una instancia aparte y oculta, sin cambiar sus opciones guardadas, y
  la cierra al acabar. Los resultados de este experimento salieron de Excel 16.0, compilación 20430, con la interfaz en
  español y la región de Colombia (punto y coma entre argumentos y coma decimal): con otra región, las fórmulas en la
  forma local no son las mismas. Mientras corre, no abras libros con doble clic: Windows podría abrirlos en la
  instancia oculta.
- **Para la prueba de la página de recogida:** Chrome.

## Paso a paso

Antes de medir:

```bash
node generar.mjs
node excel/funciones-recientes.mjs
node controles.mjs
node --test "pruebas/*.prueba.mjs"
node analisis/simular.mjs
```

Con las frases A en `frases-a/persona-1.txt`, `persona-2.txt`… (cada respuesta, copiada tal cual):

```bash
node comandos.mjs
node orden.mjs
node recogida/construir.mjs
node cuaderno.mjs
node manifiesto.mjs
```

La recogida: se abre `recogida/recolector.html` en Chrome, junto a Gemini, y se sigue el orden. Al terminar cada
bloque, se exporta el respaldo (`recogida-AAAA-MM-DD-HH-MM.jsonl`). Para ensayarla sin tocar la de verdad:
`node comandos.mjs --ensayo` y `node recogida/construir.mjs --ensayo`, que construyen `recolector-ensayo.html`.

Después de recoger:

```bash
node calificar.mjs recogida/recogida-AAAA-MM-DD-HH-MM.jsonl
node analisis/analizar.mjs
```

## Las reglas, en corto

- **Funciona al pegarla:** la primera fórmula completa de la respuesta, escrita en la celda de la tarjeta como la pega
  una persona en Microsoft 365 (con matrices dinámicas), da el resultado esperado en las dos hojas. Si derrama varios
  valores, falla. Pesos y conteos, exactos; los valores con decimales, con 0,005 de tolerancia; la variación, como
  fracción o como porcentaje.
- **Funciona en alguna:** lo mismo con cualquiera de las fórmulas de la respuesta.
- **La extracción** (`extraer.mjs`): las líneas que empiezan por «=» en los bloques de código, el código en línea que
  empieza por «=» y las líneas de texto que empiezan por «=», en ese orden de aparición; solo las completas.
- **La cascada** (`cascada.mjs`): si la fórmula funciona escrita en la forma inglesa de Excel, el fallo era de
  idioma; si funciona con los separadores locales, de separadores; si nada la arregla, de lógica u otro.

## Licencias

El contenido, con CC BY 4.0; el código, con MIT. Los detalles, en `LICENCIA.md`.

Correcciones: <contacto@shinacer.dev>.
