Hola a todos!,
Recordaréis que cuando estamos trabajando con VBA, una forma de controlar errores es mediante etiquetas y la instrucción GoTo.
Pues bien, en typescript tenemos la declaración Try … Catch para controlar errores. Básicamente lo que hace la declaración en una primera parte es tratar (Try) de realizar una tarea, y en caso de producirse una excepción (error) se lanza una respuesta con la sentencia Catch.
Finally recoge la parte final del proceso, y son las sentencias que van después de Try y Catch.
Además de la documentación que os dejado a modo de enlace, vamos a poner un ejemplo, (algo típico). Vamos a recoger el error de una operación matemática, una división, cuando el divisor es igual a 0.
Por ejemplo:
Dividir 25 entre 5 nos da un resultado de 5, pero si lo hacemos entre 0 nos dará un error en Excel de ¡DIV/0!. Con typescript podemos controlar este error y mostrar un mensaje o lo que estimemos, cuando se produzca.
El código que os propongo es el siguiente:
function errorDividir(a: number, b: number): number {
if (b === 0) {
throw new Error('No es posible dividir por cero');
}
return a / b;
}
function main(workbook: ExcelScript.Workbook) {
// Acceder a la hoja activa
let activeWorksheet = workbook.getActiveWorksheet();
try {
//
let dividendo = activeWorksheet.getRange("B1").getValue();
let divisor = activeWorksheet.getRange("B2").getValue();
// Convertir los valores a números
let nDividendo = Number(dividendo);
let nDivisor = Number(divisor);
// Pasamos los valores de las celdas como argumentos de la función
const resultado = errorDividir(nDividendo, nDivisor);
// Pasamos el resultado a la celda B3
activeWorksheet.getRange("B3").setValue(resultado.toString());
} catch (error) {
// Si existe un error pasamos el valor a B3
activeWorksheet.getRange("B3").setValue("Error: " + error.message);
} finally {
// Escribimos mensaje final en B4
activeWorksheet.getRange("B4").setValue('Proceso de la división finalizado');
}
}
Como podéis observar, aquí tenemos la declaración try – catch y además le he añadido una parte final (finally) para que se informe de cuando el proceso de la división ha finalizado.
Si el divisor es 0 el mensaje de error será ‘No es posible dividir por cero’, si el resultado es correcto, se mostrará en la misma celda.
Ojo, lo he programado para que solo capture errores con el 0:
if (b === 0) {
throw new Error('No es posible dividir por cero');
}
Si fuese necesario hacer un cambio y capturar otro tipo de error, debéis especificarlo en este condicional, por ejemplo:
if (isNaN(a) || isNaN(b) || (b === 0)) {
throw new Error('Se esperaban dos números como argumentos o que el divisor no sea igual a 0');
}
Podremos capturar el error de introducir un carácter que no sea número en los argumentos de la división o que el divisor sea 0
En caso de ser cero este sería el resultado:
Y esto es todo, espero que sea de utilidad!!
¿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