Hola a todos!
Hace unas semanas publiqué un método para consolidar el contenido de tantas hojas como tengamos en un archivos de Excel utilizando Typescript: CONSOLIDAR HOJAS DE UN LIBRO DE EXCEL ONLINE CON TYPESCRIPT
Y aunque el script funciona fenomenal, hay algo que faltaba y era el crear una columna en la que se indicase la hoja de la que procedía cada fragmento.
La solución que he aplicado ha sido la siguiente, este es script:
async function main(workbook: ExcelScript.Workbook) {
var nHojas = workbook.getWorksheets();
var resultado = workbook.getWorksheet("RESULTADO");
//creamos títulos
var titulos = ["ID", "NOMBRE COMPLETO", "SECCIÓN", "NACIMIENTO", "2º IDIOMA", "ESTUDIOS","HOJA"]
resultado.getRange("A1:G1").setValues([titulos])
//por cada hoja que no sea RESULTADO
nHojas.forEach((sheet) => {
var hoja = sheet.getName()
if (hoja != 'RESULTADO') {
var filas = sheet.getUsedRange().getRowCount();
var columnas = sheet.getUsedRange().getColumnCount();
var mFila = +resultado.getUsedRange().getRowCount();
var nFila = sheet.getUsedRange().getRowCount();
//copiamos rango de hoja con datos y lo pegamos en hoja RESULTADO
resultado.getRange("A" + (mFila + 1)).copyFrom(sheet.getRangeByIndexes(1, 0, filas, columnas), ExcelScript.RangeCopyType.all);
resultado.getRange("G" + (mFila + 1) + ":" + "G" + (mFila + nFila - 1)).setValue(hoja);
resultado.activate();
}
});
}
Para que podamos mostrar la hoja de la que procede cada contenido debemos crear una variable que nos permita contar las filas de cada fragmento de datos que vayamos a consolidar, en este caso la variable es nFila.
Una vez con este dato, solo tendremos que componer un rango para indicar el valor con el que lo queremos rellenar, es decir, el nombre de la hoja:
resultado.getRange("G" + (mFila + 1) + ":" + "G" + (mFila + nFila - 1)).setValue(hoja);
El resultado es perfecto, en la columna G he colocado el nombre de la hoja en la que se encuentra cada fragmento consolidado:

Y esto es todo, 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