Python y Excel 365: el operador @ en fórmulas exportadas con openpyxl (solución con xlwings)
Problema frecuente para quienes automatizan Excel con Python: al exportar fórmulas usando openpyxl, Excel 365 añade el operador @ delante de las funciones (por ejemplo, @SI en vez de SI). Esto ocurre porque openpyxl no tiene soporte nativo para matrices dinámicas, y Excel 365 interpreta las fórmulas en modo clásico aplicando la intersección implícita (el operador @ fuerza que solo se muestre el primer resultado).
La raíz técnica es la diferencia entre Formula (modo clásico, que openpyxl usa) y Formula2 (modo moderno con matrices dinámicas y desbordamiento natural). A partir de Excel 365, las fórmulas que podrían desbordar se limitan con @ si se escriben en modo clásico.
La comunidad propuso usar xlwings, que permite acceder a la API COM de Excel y escribir fórmulas con Formula2. Se compartió un script Python completo y bien documentado que detecta si el archivo ya está abierto en Excel (para no abrir una instancia duplicada), escribe fórmulas usando Formula2 con fallback a Formula clásico, y gestiona correctamente el ciclo de vida de la instancia Excel:
``python
Con xlwings, usar Formula2 para modo moderno (matrices dinámicas)
try:
rng.api.Formula2 = formula # Modo moderno
except Exception:
rng.api.Formula = formula # Fallback al modo clásico
`
El trade-off es rendimiento: openpyxl procesa en ~30 segundos (trabaja directamente con el XML del xlsx), mientras que xlwings tarda ~4-5 minutos (usa COM, necesita una instancia de Excel corriendo). Pero la ventaja de xlwings es que las fórmulas matriciales y dinámicas funcionan correctamente sin el operador @.
Funciones y conceptos clave: Formula2 vs Formula (API COM), operador de intersección implícita (@), matrices dinámicas y desbordamiento (spill), SEQUENCE, SUM, TAKE con referencias desbordadas (F1#`).
Más contenido de Excel en InflueXcel
- Reto de Excel: El cumpleaños de Bilbo 🎂 | CONTAR.SI y SUMAR.SI desde cero (Nivel 1) TutorialEn La Comarca se celebra el cumpleaños número 111 de Bilbo Bolsón: cerveza, pasteles, fuegos artificiales… y algún curioso escondido tras el
- ¡Excel PowerQuery Hack! Conexiones con rutas relativas en 10 minutos! Tutorial¿Harto de ajustar las conexiones en PowerQuery cada vez que compartes tu archivo de Excel? 🙄 Convierte las conexiones de PowerQuery con ruta
- Mejora un 90% el rendimiento de Power Query con SQLite TutorialPower Query es una herramienta potente para consolidar, combinar y calcular datos, pero cuando trabajamos con millones de registros y calcul
- Nueva Función IMPORTTEXT TutorialNueva función IMPORTTEXT en Excel!! https://techcommunity.microsoft.com/blog/microsoft365insiderblog/bring-data-into-excel-with-the-new-impo
- ¿Columnas con nombres distintos en Power Query? Tutorial¿Columnas con nombres distintos en Power Query? Aquí tienes la solución definitiva para normalizar tus datos y evitar errores al combinar fi
- BUSCARX con valor devuelto dinámico: elige la columna con un botón o un segmentador CasoUna integrante de la comunidad planteó un reto muy habitual al trabajar con tablas de varias columnas: tiene una lista de municipios con cua
- Saldo acumulado por mes: tres enfoques (REDUCE+BYROW, PIVOTARPOR+acumulado, MMULT) CasoJuan plantea una pregunta que parece sencilla y se acaba convirtiendo en tres clases magistrales sobre cómo recorrer una matriz mes a mes. T
- Mapa de España con burbujas: ubicar variables por provincia usando coordenadas X/Y CasoEsta semana surgió una duda muy visual en el grupo: cómo mostrar dos variables por provincia en un mapa de España — una pintada en intensida
- Regularización trimestral con AGRUPARPOR y ARCHIVOMAKEARRAY: del caos a una fórmula CasoCaso fresquito de la comunidad. Juan plantea un problema contable: tiene una tabla de movimientos (Nombre, Cuenta, Importe, Fecha) y necesit
- Grado de avance por proyecto: despivotar y volver a pivotar por fecha CasoNuevo caso de la comunidad con mucho jugo para los que trabajan con reporting de proyectos. Juan plantea un problema habitual en oficinas té