¿Qué tal estáis?, espero que bien!
Después de todos las publicaciones que he realizado sobre Typescript (y que seguiré haciendo) cada vez estoy más convencido que este lenguaje es un sólido sustito de VBA.
Una de estas razones es la sencillez con la que se adapta a los nuevos entornos de office, como por ejemplo Power Automate. Y es que un script de Typescript es muy sencillo de incluir en un flujo de Automate.
Mucho más sencillo que con VBA y desde luego única forma de hacerlo en excel Online.
Para el ejemplo de hoy, voy a ejecutar desde mi teléfono una script que calcula un proyección de un presupuesto anual (todo muy simple). Comenzamos por la programación y lo que queremos hacer con Typescript:
Lo que necesitamos es a partir de presupuesto:

Generar reparto para todos los meses del año según el siguiente criterio. Para importes de presupuesto mayor o igual a 350.000 euros, se divide entre 12, para importes menores a esa doceava parte se le sumará el 2% de la misma:

En el código podéis ver cómo se hace:
function main(workbook: ExcelScript.Workbook) {
const miHoja = workbook.getWorksheet("Hoja1");
const valores = miHoja.getUsedRange().getValues();
const scadena: (string | number |boolean)[][]= [] ;
var mes = ["Enero", "Febrero", "Marzo", "Abril", "Mayo", "Junio", "Julio", "Agosto", "Septiembre", "Octubre", "Noviembre", "Diciembre"];
var i = 1
while (i <= mes.length){i++
miHoja.getCell(0, i).setValues([
[mes[i - 2]]
])
valores.splice(1).forEach((row) => {
var impMes = 0;
var imp = +row[1];
if (imp >= 320000) {
impMes = (imp/12);
} else {
impMes = imp/12+(imp/12*0.02)
};
scadena.push(
[impMes]
)
});
const hojaDest = workbook.getWorksheet("Hoja1");
const resultado = hojaDest.getRangeByIndexes(1, i, scadena.length, scadena[0].length);
resultado.setValues(scadena);
}
}
Este es un código muy interesante donde podemos ver como generamos los encabezados de los meses pasado el dato de la matriz a un rango usando un loop while.
Por otra parte generamos la información usando un loop for que posiciona cada columna de datos generada por una instrucción for-each.
Finalmente pasamos la información a la misma hoja para completar a partir de la segunda columna (pero podríamos pasar la información a cualquier hoja).
Pues bien, esto lo vamos a ejecutar a través de Power Automate. Es tan sencillo como pinchar sobre los tres puntos y seleccionar Automatizar una tarea.

El resto es crear el flujo en Power Automate (no lo voy a incluir en este post, pero tenéis ejemplos en este web)
En mi teléfono, ejecutando Flow (Power Automate) se muestra este flujo:

Para ejecutarlo solo debo pulsar en Botones y luego en el Botón que aparece:

Y el resultado es la ejecución del script que hemos creado.
¿Qué os parece?, sencillo, verdad?. Pues este es el futuro de VBA, y creo que ahora es un excelente momento para comenzar a formarse en este lenguaje.
Espero que os haya gustado!!
¿Te ha resultado de interés?, puedes apoyar a Excel Signum con una pequeña donación.
¡¡Muchas gracias!!
Mediante la suscripción al blog, la realización comentarios o el uso del formulario de contacto estás dando tu consentimiento expreso al tratamiento de los datos personales proporcionados según lo dispuesto en la ley vigente (LOPD). Tienes más información al respecto en esta página del blog: Política de Privacidad y Cookies