Categorías
Excel Powershell

Combinar varios excels en uno

Alguna vez has querido combinar varios excels en uno?. Una solución sería abrir un nuevo excel y luego todos los demas e ir moviendo en cada uno de los excels la primera hoja al excel que hemos creado para tal proposito. Esta solución puede ir bien cuando tenemos un par de excels que «unir» pero cuando son mas o lo tenemos que hacer repetidas veces, es más facil utilizar el script que os voy a enseñar a continuación.

Supongamos que en una carpeta tenemos varios excel como podeis ver en la imagen de más abajo. En el ejmplo tenemos que en la carpeta (1) c:\tmp\archivosexcel tenemos (2) tres archivos excel (3)(4) y (5), los cuales los queremos unir en uno solo.

Con el siguiente script de powershell podremos unirlos fácil y rapidamente.

#Abrimos una aplicación excel
$ExcelObject=New-Object -ComObject excel.application
$ExcelObject.visible=$true

#Cogemos los excels que queremos unir.
$ExcelFiles=Get-ChildItem -Path C:\tmp\archivosexcel

$Workbook=$ExcelObject.Workbooks.add()
$Worksheet=$Workbook.Sheets.Item("Hoja1")

foreach($ExcelFile in $ExcelFiles){
    #Abrimos cada hoja de cada fichero y la copiamos en nuestro nuevo excel.
    $Everyexcel=$ExcelObject.Workbooks.Open($ExcelFile.FullName,0,$true)
    $Everysheet=$Everyexcel.sheets.item(1)
    $Everysheet.Copy($Worksheet)
    $Everyexcel.Close()
 
}
#Grabamos nuestro excel que contiene los demas.
$Workbook.SaveAs("C:\tmp\archivosexcel\ExcelUnido.xlsx")
$ExcelObject.Quit()

Como podeis ver, el script es bastante sencillo. Hay cuatro partes diferenciadas. Primero abrimos una instancia del excel

Luego por una parte cogemos los ficheros que queremos unir y añadimos una hoja de excel en el archivo excel que habiamos creado en el primer paso.

A continuación, para cada uno de los ficheros de la carpeta, abrimos su primera hoja y la copiamos en libro que hemos creado al inicio. Una vez hecho esto cerramos el fichero excel del cual hemos copiado la hoja.

Por último, guardamos el libro que hemos utilizado para unir todos los demás excel y cerramos la instancia de excel que hemos utilizado.

El resultado de todo es un excel con todas las primeras hojas de los excels originarios.

Como habeis visto, este script solo copia la primera hoja de cada libro, con una pequeña modificación os podeis adaptar el script para que copie todas las hojas de cada de uno de los ficheros involucrados.

A continuación podeis ver un video con todo el proceso.

Dejad vuestra opinión sobre este script.

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *