Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

135
Vistas
Uso de la última fila con GetRangeByIndexes - Excel

Estoy tratando de aprender las mejores prácticas para crear un rango en JS. Estoy tratando de evitar el error que cometí al aprender VBA, que fue que usé el formato Range("A1:A2") durante mucho tiempo antes de darme cuenta de que era mejor usar Range(Cells(1,1),Cells(2,1)) porque generalmente es más fácil trabajar con números enteros.

Encontré getRangeByIndexes para JS, y no es perfecto, ya que tengo que hacer cálculos matemáticos en el número de filas si la primera fila no es 0. Preferiría usar números enteros para establecer la primera y la última celda en el rango, pero esa es otra historia.

Actualmente puedo seleccionar el rango si codifico los números, pero ahora estoy trabajando para agregar la función "LastRow" para hacer que el rango sea dinámico y no puedo hacer que funcione. También luché para que se imprimiera en console.log, pero decidí intentar trabajar con el rango en vez de imprimirlo. Actualmente estoy editando taskpane.js y soy muy nuevo en esto.

Aquí está mi código hasta ahora:

 /* * Copyright (c) Microsoft Corporation. All rights reserved. Licensed under the MIT license. * See LICENSE in the project root for license information. */ /* global console, document, Excel, Office */ // The initialize function must be run each time a new page is loaded Office.initialize = () => { document.getElementById("sideload-msg").style.display = "none"; document.getElementById("app-body").style.display = "flex"; document.getElementById("run").onclick = run; }; export async function run() { try { await Excel.run(async (context) => { var ws = context.workbook.worksheets.getItem("Sheet1"); ws.activate(); var lrow = ws.getUsedRange().getLastRow(); lrow.load("rowindex"); context.sync(); var range = ws.getRangeByIndexes(0, 0, 4, 5); //This Works //var range = ws.getRangeByIndexes(0, 0, lrow.rowIndex, 5); //This does nothing, but no errors either, just nothing. range.select(); await context.sync(); console.log("END"); }); } catch (error) { console.error(error); } }

Si reemplazo lrow.rowindex con 4 , funciona como se esperaba. ¿Alguien puede aconsejarme qué estoy haciendo mal y si esta es la mejor manera de generar un rango con números (¿hay alguna forma de hacer la primera/última celda?)

about 4 years ago · Juan Pablo Isaza
3 Respuestas
Responde la pregunta

0

Creo que debe llamar a await context.sync() antes de poder usar cualquier propiedad que cargue. Está intentando usar una propiedad cargada (rowIndex) antes de la llamada context.sync(). Por eso creo que no funciona.

Si actualiza su código de esto:

 var lrow = ws.getUsedRange().getLastRow(); lrow.load("rowindex"); var range = ws.getRangeByIndexes(0, 0, 4, 5); //This Works //var range = ws.getRangeByIndexes(0, 0, lrow.rowIndex, 5); //This does nothing, but no errors either, just nothing. range.select(); await context.sync();

A esto:

 var lrow = ws.getUsedRange().getLastRow(); lrow.load("rowindex"); await context.sync(); //var range = ws.getRangeByIndexes(0, 0, 4, 5); //This Works var range = ws.getRangeByIndexes(0, 0, lrow.rowIndex, 5); //This does nothing, but no errors either, just nothing. range.select(); await context.sync();

Eso debería arreglar las cosas.

about 4 years ago · Juan Pablo Isaza Denunciar

0

Definitivamente necesita el "esperar" en su primera declaración "context.sync ()". Agregué eso y funciona bien siempre que haya datos en la hoja 1. Si lrow.rowIndex se evalúa en 0, causará un error porque getRangesByIndexes necesita al menos una fila para seleccionar.

Aquí está el código como lo ejecuté.

 async function run() { try { await Excel.run(async (context) => { var ws = context.workbook.worksheets.getItem("Sheet1"); ws.activate(); var lrow = ws.getUsedRange().getLastRow(); lrow.load("rowindex"); await context.sync(); var range = ws.getRangeByIndexes(0, 0, lrow.rowIndex, 5); range.select(); await context.sync(); console.log("END"); }); } catch (error) { console.error(error); } }

Tomé la directiva de "exportación" porque el entorno en el que trabajo se quejó.

En caso de que esté interesado, estoy usando un complemento llamado "Entorno de desarrollo de automatización de JavaScript (JADE)" de la tienda de complementos. Está diseñado para automatizar el código en un libro de trabajo, no para crear un complemento, pero es realmente simple para probar cosas como esta. Descargo de responsabilidad: escribí JADE.

about 4 years ago · Juan Pablo Isaza Denunciar

0

Esto está definitivamente relacionado con context.sync . Todavía estoy aprendiendo sobre promise/return/async , etc. Cambié a Visual Studio y obtuve una mejor idea de los archivos del proyecto, este es mi ajuste a la función predeterminada para el panel de tareas en los archivos del proyecto.

Nota: La función anidada finaliza el resto de la función.

 function setColor() { Excel.run(function (context) { //Start Func var ws = context.workbook.worksheets.getActiveWorksheet(); var lrow = ws.getUsedRange().getLastRow(); lrow.load("rowindex"); // Run the queued-up command, and return a promise to indicate task completion return context.sync() .then(function () { //var range = ws.getRangeByIndexes(0, 0, 4, 5); //This Works var range = ws.getRangeByIndexes(0, 0, lrow.rowIndex, 5); //This does nothing, but no errors either, just nothing. range.select(); }) //End Func return context.sync(); }).catch(function (error) { console.log("Error: " + error); if (error instanceof OfficeExtension.Error) { console.log("Debug info: " + JSON.stringify(error.debugInfo)); } }); } })();
about 4 years ago · Juan Pablo Isaza Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda