8 junio, 2023

ASIGNAR COLOR Y MOVER HOJAS DE UN LIBRO CON TYPESCRIPT

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 postASIGNAR 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.

Donate Button with Credit Cards

¡¡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

Comparte este post

Si te ha gustado o tienes alguna duda, puedes dejar aquí tu comentario.

Este sitio web utiliza cookies para que usted tenga la mejor experiencia de usuario. Si continúa navegando está dando su consentimiento para la aceptación de las mencionadas cookies y la aceptación de nuestra política de cookies, pinche el enlace para mayor información.plugin cookies

ACEPTAR
Aviso de cookies