# Microsoft Excel

La integración de **Microsoft Excel** te permite automatizar tareas de hojas de cálculo directamente dentro de tus flujos de Dapta. Con estos nodos, puedes leer, escribir y gestionar archivos de Excel alojados en **OneDrive for Business** o **SharePoint** de manera fluida.

### 🚀 Capacidades Clave

* **Leer Datos**: Recupera filas con opciones avanzadas de filtrado y paginación.
* **Escribir Datos**: Añade nuevas filas o actualiza registros existentes de forma eficiente.
* **Sincronización Inteligente (Upsert)**: Crea automáticamente una fila si no existe, o la actualiza si ya está presente.
* **Operaciones por Lotes**: Actualiza o elimina múltiples filas que coincidan con un criterio en un solo paso.
* **Seguridad de Fórmulas**: Las actualizaciones preservan estrictamente las fórmulas existentes en tus hojas.

***

### ⚙️ Requisitos Previos

Para usar esta integración, necesitas:

1. Una cuenta de **Microsoft 365 Business** o **Escolar** (OneDrive for Business / SharePoint).
2. Un archivo de Excel (`.xlsx`) almacenado en tu carpeta de OneDrive o SharePoint.
3. *Nota: Las cuentas personales de OneDrive (ej. hotmail/outlook.com) pueden tener compatibilidad limitada.*

***

### 🔐 Autenticación

Para conectar tu cuenta de Microsoft Excel a Dapta, elige uno de los siguientes métodos:

#### Opción 1: Conexión Rápida (Recomendada)

1. Añade el nodo de **Microsoft Excel** a tu lienzo de flujo.
2. Ubica el desplegable **Credential** en el panel de configuración.
3. Haz clic en el botón **+ (Más)** junto al desplegable.
4. Sigue los pasos de inicio de sesión de Microsoft para autorizar tu cuenta.
5. Tu nueva credencial se guardará y seleccionará automáticamente.

#### Opción 2: Menú de Configuración

1. Navega a la [**Página de Credenciales**](https://app.dapta.ai/settings/oauth) en tu panel de Dapta.
2. Haz clic en **Add Credential** y selecciona **Microsoft Excel**.
3. Haz clic en **Connect** e inicia sesión con tu cuenta de **Microsoft 365**.
4. Una vez conectado, regresa a tu flujo y selecciona esta credencial.

***

### 🛠️ Operaciones

#### 1. Get Rows (Obtener Filas)

Recupera datos de una hoja de trabajo específica. Usa filtros para refinar tus resultados.

**Parámetros**

* **Workbook** *(Desplegable, Requerido)* Selecciona el archivo de Excel fuente.
* **Worksheet** *(Desplegable, Requerido)* Selecciona la pestaña de la hoja específica.
* **Filters** *(Lista, Opcional)* Define condiciones para filtrar filas (ej. `Status` = `Pending`). Múltiples filtros usan lógica **AND**.
* **Use Pagination** *(Booleano, Opcional)* Activa esto para procesar archivos grandes en fragmentos.
* **Limit** *(Número, Opcional)* Máximo de filas a devolver por solicitud (si la paginación está activa). Por defecto: `100`.
* **Offset** *(Número, Opcional)* Número de filas a omitir (si la paginación está activa). Esencial para recorrer conjuntos de datos en bucle.

**Ejemplo de Salida**

```json
{
  "results": 2,
  "values": [
    {
      "row_number": 2,
      "Name": "Alice Smith",
      "Email": "alice@example.com",
      "Status": "Active"
    },
    {
      "row_number": 5,
      "Name": "Bob Jones",
      "Email": "bob@example.com",
      "Status": "Active"
    }
  ],
  "pagination": {
    "enabled": true,
    "total": 50,
    "has_more": true
  }
}
```

***

#### 2. Append Row (Agregar Fila)

Añade una nueva fila al final de la hoja de trabajo seleccionada.

**Parámetros**

* **Workbook** *(Desplegable, Requerido)* Selecciona el archivo de Excel.
* **Worksheet** *(Desplegable, Requerido)* Selecciona la hoja de destino.
* **Values to Send** *(Mapa, Requerido)* Mapea tus datos a las columnas específicas de Excel (ej. Columna `A` -> `{{name}}`).

{% hint style="info" %}
**Consejo**: Puedes mapear valores dinámicamente usando variables de nodos anteriores. Las columnas no mapeadas quedarán vacías.
{% endhint %}

***

#### 3. Update Row (Actualizar Fila)

Modifica filas existentes basándose en una clave de búsqueda. Puedes actualizar una sola coincidencia o todas.

**Características Clave**:

* **Preservación de Fórmulas**: Actualizar un valor activará el recálculo automático de fórmulas dependientes.
* **Actualizaciones Parciales**: Solo se modifican las columnas mapeadas; las demás permanecen intactas.

**Parámetros**

* **Workbook** *(Desplegable, Requerido)* Selecciona el archivo de Excel.
* **Worksheet** *(Desplegable, Requerido)* Selecciona la hoja de destino.
* **Key Column** *(Texto, Requerido)* El encabezado de columna donde buscar (ej. `Email`).
* **Key Value** *(Texto, Requerido)* El valor a buscar (ej. `alice@example.com`).
* **Values to Update** *(Mapa, Requerido)* Los nuevos datos para escribir en la(s) fila(s) coincidente(s).
* **Update All Matches** *(Booleano, Opcional)*
  * `false` (Por defecto): Actualiza solo la **primera** fila encontrada.
  * `true`: Actualiza **todas** las filas que coincidan con el Key Value.
* **Max Rows to Update** *(Número, Opcional)* Límite de seguridad para actualizaciones por lotes. Por defecto: `1000`.

***

#### 4. Upsert Row (Actualizar o Crear)

La forma más robusta de sincronizar datos. Verifica la existencia de una fila antes de actuar:

* **¿Encontrada?** → Actualiza la fila existente.
* **¿No Encontrada?** → Crea una nueva fila.

**Parámetros**

Igual que **Update Row**. `Key Column` y `Key Value` se usan para verificar la existencia.

***

#### 5. Delete Row (Eliminar Fila)

Elimina filas del archivo basándose en una coincidencia o un número de fila específico.

**Parámetros**

* **Delete Mode** *(Selección, Requerido)* Elige entre `By Match` (Por Coincidencia) o `By Row Number` (Por Número).
* **Key Column** *(Texto, Requerido)* (Modo Match) La columna donde buscar.
* **Key Value** *(Texto, Requerido)* (Modo Match) El valor para identificar la(s) fila(s) a eliminar.
* **Row Number** *(Número, Requerido)* (Modo Row Number) El índice de fila específico a eliminar (ej. `5`).
* **Delete All Matches** *(Booleano, Opcional)* Si es `true`, elimina **TODAS** las filas coincidentes encontradas. Úsalo con precaución.
* **Max Rows to Delete** *(Número, Opcional)* Límite de seguridad para borrado por lotes. Por defecto: `1000`.

***

### 🚧 Límites de Uso y Cuotas

Para garantizar la estabilidad, la API de Microsoft Graph impone límites de velocidad.

* **Límites de API**: Procesar miles de filas en un bucle rápido puede provocar un error `429 Too Many Requests`.
* **Recomendación**: Usa siempre **Paginación** para grandes conjuntos de datos.
* **Consejo**: Si iteras sobre una lista grande, añade un nodo **Wait** (Espera) de 1-2 segundos entre iteraciones para evitar límites de velocidad.

***

### ❓ Solución de Problemas

| Problema               | Causa                 | Solución                                                                                      |
| ---------------------- | --------------------- | --------------------------------------------------------------------------------------------- |
| **"Column not found"** | Diferencia mayúsculas | Los nombres son sensibles a mayúsculas. Asegúrate que "Email" coincida exactamente con Excel. |
| **"File not found"**   | Archivo movido        | Si el archivo fue renombrado o movido en OneDrive, vuelve a seleccionarlo en el desplegable.  |
| **"Values are empty"** | Mapeo incorrecto      | Verifica que tus variables de entrada (ej. `{{step.data}}`) realmente contengan datos.        |
| **Lentitud**           | Archivo grande        | Usa **Paginación** o filtros para limitar la cantidad de datos solicitados.                   |

{% hint style="warning" %}
**Límite**: La API procesa hasta **10,000 filas** por defecto. Para conjuntos de datos mayores a este, **debes** usar paginación.
{% endhint %}


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://docs.dapta.ai/dapta-docs-es/integraciones/microsoft-excel.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
