IMPORTANTE: Este post ha sido actualizado al nuevo modelo del API, los cambios son significativos y necesarios para que el código funcione, por favor, después de leer la publicación completa, visita el nuevo post: ASIGNAR COLOR Y MOVER HOJAS DE UN LIBRO CON TYPESCRIPT: CONVIRTIENDO SCRIPT ASÍNCRONO HEREDADO AL MODELO ACTUAL
Hola a todos!:
Qué tal estáis?, espero que muy bien 🙂
Hoy vamos a continuar con algunos ejemplos de programación en TypeScript. Como sabéis ya va apareciendo documentación sobre este lenguaje aplicado a Excel: Información general de la API de JavaScript de Excel
En este enlace que os he dejado podréis ver multitud de ejemplos de código muy interesante. Lo ideal es que os leáis la documentación (toda) y luego vayáis reproduciendo el código, analizándolo y por último implementando vuestros propios desarrollos.
Para el ejemplo de hoy me gustaría añadir un ejercicio en el que vamos a ver cómo podemos dar color de fondo y mover las hojas/pestañas de nuestro libro en base a unos criterios específicos:
Veamos las pestañas:

Lo que deseamos hacer es: si existe una hoja denominada «Hoja1», entonces la coloreamos en rojo, caso contrario coloreamos en verde.
Si una hora es color rojo (debería ser Hoja1), la moveremos a la última posición en el libro.
Pues bien, vamos a utilizar el siguiente código:
async function main(context: Excel.RequestContext) {
var nHojas = context.workbook.worksheets;
nHojas.load("items/name");
return context.sync()
//Si existe Hoja1 coloreamos en rojo la hoja
.then(function () {
nHojas.items.forEach(function (sheet) {
if (sheet.name == "Hoja1") {
sheet.tabColor = "FF0000";
}
//Caso contrario de verde
else {
sheet.tabColor = "008000";
}
// Si la hoja es roja la pasamos al final
var uHoja = nHojas.items.length - 1
if (sheet.tabColor == "FF0000") {
// Activamos hoja
sheet.activate();
// Pasamos la hoja a la última posición
var miHoja = context.workbook.worksheets.getActiveWorksheet();
miHoja.position = uHoja
console.log(`La hoja "${sheet.name}" se ha movido al final`);
}
});
});
}
Una vez aplicado este será el resultado, adicionalmente en el código incluyo un mensaje que indicará que la Hoja1 ha sido movida al final de libro.

Por otra parte también me ha parecido interesante programar una instrucción For-Each para que elimine el color de todas las pestañas:
async function main(context: Excel.RequestContext) {
var nHojas = context.workbook.worksheets;
nHojas.load("items");
return context.sync()
.then(function () {
nHojas.items.forEach(function (sheet) {
sheet.tabColor = "";
});
});
}
De esta forma dejará las pestañas como al principio.
Es interesante analizar la forma en la que movemos la hoja: Primero detectamos el número de hojas que tiene el libro (restamos 1) y pasamos el número a una variable:
var uHoja = nHojas.items.length - 1
Y luego indicamos la posición en esta línea de código:
var miHoja = context.workbook.worksheets.getActiveWorksheet();
miHoja.position = uHoja
Y esto es todo, es un post muy sencillo pero muy habitual en VBA y el uso de Excel en general y por eso me ha parecido útil.
¿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