Hola a todos!.
Cuando queremos pasar los elementos de una matriz a un rango de celdas existen varias posibilidades en función del proceso en el que estemos. Si trabajamos con funciones, simplemente retornamos el resultado de la función como un array y los datos se derramarán directamente en celdas contiguas.
Si lo hacemos como un proceso automatizado podemos contar con la función: .getRangeByIndexes()
Su sintaxis es muy interesante:
getRangeByIndexes(startRow: number, startColumn: number, rowCount: number, columnCount: number): Excel.Range;
startRow number
Fila de inicio (indizada en cero)
.startColumn number
Columna De inicio (indizada en cero)
.rowCount number
Número de filas que se van a incluir en el intervalo
.columnCount number
Número de columnas que se van a incluir en el intervalo.
Devoluciones
Rango de excel
Es decir, una vez introducidos los parámetros obtendremos como resultado un rango con los datos indicados.
Esta función por lo tango nos puede servir para pasar los datos de una matriz a un rango. Cómo lo hacemos?
Imaginad que tenemos en la celda A2 una cadena delimitada con un carácter específico, la coma (,). Y queremos pasar cada uno de los elementos a partir de la columna B y en la misma fila (es obvio que podríamos usar la herramienta texto en columnas o incluso la fórmula DividirTexto(), pero estamos en un supuesto en el que solo podemos usar typescript y en un entorno de programación):
Pues bien, os propongo este sencillo código para realizar lo comentado.
function main(workbook: ExcelScript.Workbook) {
var miHoja = workbook.getWorksheet("Hoja1");
var micadena = miHoja.getRange("A2").getValues();
//expresamos el rango como una matriz
var resultado = micadena.toString().split(',')
//identificamos el largo de la cadena
var fin = resultado.length
//Pasamos los datos al rango definido en la función
miHoja.getRangeByIndexes(1,1,1,fin).setValue([resultado]);
}
Lo primero es capturar el dato de A2,
var micadena = miHoja.getRange("A2").getValues();
A continuación pasamos esa cadena a una matriz con la función .split()
var resultado = micadena.toString().split(',')
Finalmente usamos la función .getRangeByIndexes() para obtener el resultado:
miHoja.getRangeByIndexes(1,1,1,fin).setValue([resultado]);
Y esto es todo, espero que os sea de utilidad el procedimiento que os comento.
¿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