Hola a todos:
Como sabéis hace unos meses he comenzado a publicar post sobre Typescript, son relativamente pocos, (afortunadamente) y están en la vanguardia de lo que se está definiendo como el futuro de la programación en Excel.
Pues bien, al ser un lenguaje que se está creando, implementando y eficientando, éste sufre cambios a lo largo de su desarrollo.
Aunque normalmente estos cambios no suelen afectar al código creado anteriormente, en este caso el problema es que sí. Los post que he escrito y en los que he dejado programación relacionada ahora no son operativos en el nuevo modelo del API. Esto es lo que indica Microsoft al respecto:
El modelo asíncrono solo se puede usar con scripts creados antes de la implementación del modelo API actual . Las secuencias de comandos están permanentemente bloqueadas en el modelo API que tienen en el momento de la creación. Esto también significa que si desea convertir un script heredado al nuevo modelo, debe usar un script nuevo. Le recomendamos actualizar sus scripts anteriores al nuevo modelo cuando realice cambios, ya que el modelo actual es más fácil de usar. La sección Convertir scripts asíncronos heredados al modelo actual tiene consejos sobre cómo hacer esta transición.
Y esto nos lleva a tener que modificar muchas partes del código para que vuelva a funcionar. Y dado que los post que tengo están en el modelo asíncrono es necesario modificarlos, y empezaré por el primer post: LOOP WHILE CON TYPESCRIPT EN EXCEL
No he acudido a Stack Overflow (que es lo que indica Microsoft para obtener ayuda), he seguido únicamente estos tres puntos que indican en la web:
- Cree un nuevo script y copie el antiguo código asíncrono en él. Asegúrese de no incluir la
main
firma del método anterior, utilizando la actual en sufunction main(workbook: ExcelScript.Workbook)
lugar. - Eliminar todos los
load
ysync
las llamadas. Ya no son necesarios. - Todas las propiedades han sido eliminadas. Ahora accede a esos objetos a través
get
yset
métodos, por lo que tendrá que cambiar las referencias de propiedades a llamadas de método.
El resto lo he ido probando directamente en el código. así pues, os dejo el código del post de referencia actualizado y listo para que funcione correctamente en el nuevo modelo:
function main(workbook: ExcelScript.Workbook) {
//Definimos constantes
type Color = "808000" | "0000FF" | "00FF00";
const OLIVA: Color = "808000";
const AZUL: Color = "0000FF";
const LIMA: Color = "00FF00";
// Definimos variables
let MiHoja = workbook.getWorksheet("Hoja1");
let MiRango = MiHoja.getUsedRange();
//Limpiamos datos en columna B y C
MiRango.clear(ExcelScript.ClearApplyTo.formats);
MiRango.getColumn(1).getCell(0, 0).getRowsBelow(MiRango.getRowCount() - 1).clear(ExcelScript.ClearApplyTo.all);
MiRango.getColumn(2).getCell(0, 0).getRowsBelow(MiRango.getRowCount()-1).clear(ExcelScript.ClearApplyTo.all);
//Determinamos rango
let Fin = MiRango.getRowCount();
let Info = MiHoja.getRangeByIndexes(1, 0, Fin, 1).getValues();
//iniciamos While hasta llegar a fin
let i = -1;
while (i < Fin - 2) {
i++;
let MiInfo = Info[i];
// iniciamos select case
let mi_msg: string;
let importe: number;
switch (true) {
case MiInfo[0] <= 35:
mi_msg = "GRUPO 1";
MiRango.getCell(i + 1, 1).getFormat().getFill().setColor(OLIVA);
if (MiInfo[0] < 20) {
importe = 1000;
} else {
importe = 1500;
}
break;
case MiInfo[0] > 35 && MiInfo[0] <= 50:
mi_msg = "GRUPO 2";
MiRango.getCell(i + 1, 1).getFormat().getFill().setColor(AZUL);
importe = 2000
break;
default:
mi_msg = "GRUPO 3";
MiRango.getCell(i + 1, 1).getFormat().getFill().setColor(LIMA);
importe = 2500
break;
}
// indicamos el comentario según condición
MiRango.getCell(i + 1, 1).setValues([[mi_msg]]);
MiRango.getCell(i + 1, 2).setValues([[importe]]);
MiRango.getCell(i + 1, 2).setNumberFormatLocal("#.##0,00 €");
}
}
Dejo el post anterior y también el actual para que podáis ver las diferencias entre ambos códigos y os ayuden a modificar y actualizar las propiedades eliminadas en el modelo actual.
No ha sido sencillo realizar las modificaciones dado que es difícil detectar qué propiedad es la adecuada al carecer de documentación al respecto (nuevo modelo). No obstante, este script está completamente actualizado.
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