Contents

Descubriendo módulos: Exportar a Excel con PowerShell

Este post es el primero de la nueva serie “Descubriendo módulos” en la que instalaremos módulos de terceros publicados en los distintos canales online y juguetearemos con su funcionalidad. En esta primera entrega veremos el módulo ImportExcel, que nos permitirá, entre otras cosas,** exportar a Excel con PowerShell** con su función Export-Excel.

Descargando ImportExcel

Tal como vimos en la introducción a los módulos de PowerShell existen distintos sitios en los que encontrar módulos de PowerShell, pero sin duda el mejor y el que más cómodo nos va a resultar es la PowerShell Gallery. Para nuestra suerte ImportExcel está publicado en dicho repositorio, por lo que para instalarlo simplemente nos valdremos de Install-Module:

1
2
3
4
# Para instalarlo sólo para nuestro usuario:
Install-Module ImportExcel -scope CurrentUser
# Para instalarlo para todos los usuarios (requiere iniciar la consola de PowerShell como administrador)
Install-Module ImportExcel

Si no hemos autorizado explicítamente la instalación desde PSGallery nos aparecerá un mensaje como el siguiente:

1
2
3
Repositorio que no es de confianza
Estás instalando los módulos desde un repositorio que no es de confianza. Si confías en este repositorio, cambia su valor InstallationPolicy ejecutando el cmdlet Set-PSRepository. ¿Estás
seguro de que quieres instalar los módulos de 'PSGallery'?

Podemos simplemente decirle que sí y permitir la instalación o bien podemos autorizar el origen para así evitarnos el mensaje en futuras instalaciones con:

1
Set-PSRepository PSGallery -InstallationPolicy Trusted

Una vez instalado podemos ver con Get-Command todas las funciones que se han instalado en nuestro equipo:

/wp-content/uploads/2018/07/ImportExcel-Functions.png
Funciones de ImportExcel

Exportar a Excel con PowerShell e ImportExcel

Si bien la exportación a csv que incorpora PowerShell con Export-Csv funciona a las mil maravillas con Export-Excel podemos llevar las exportaciones a otro nivel si lo que pretendemos es consumir directamente dicha exportación.

Empecemos a trastear, esta sería la exportación básica:

1
Get-Service | Select Name,ServiceName,Status,StartType | Export-Excel -Path C:\Export\services.xlsx

Que nos daría un resultado como este:

/wp-content/uploads/2018/07/Primer_Export.png
Exportar a Excel con PowerShell

Si bien es un adelanto respecto a una exportación a csv tampoco nos aporta mucho. Para empezar podríamos ajustar el ancho de las columnas que daña a la vista y, por ejemplo, podríamos poner en negrita la primera fila para que se vea que es el encabezado:

1
Get-Service | Select Name,ServiceName,Status,StartType | Export-Excel -Path C:\Export\services.xlsx -AutoSize -BoldTopRow

/wp-content/uploads/2018/07/Segundo_Export.png
Exportar a Excel con PowerShell Autosize

Bueno, bueno, esto ya tiene otra pinta. Para hacer la tabla más manejable se nos podría ocurrir añadir autofiltro:

1
Get-Service | Select Name,ServiceName,Status,StartType | Export-Excel -Path C:\Export\services.xlsx -AutoSize -BoldTopRow -AutoFilter

/wp-content/uploads/2018/07/Tercer_Export.png
Exportar a Excel con autofiltro

Si queremos ir un paso más allá Export-Excel nos permite incluso jugar con formatos condicionales. Vamos a darle un poco de color:

1
2
3
4
Get-Service | Select Name,ServiceName,Status,StartType | Export-Excel -Path C:\Export\services.xlsx -AutoSize -BoldTopRow -AutoFilter -ConditionalText $(
   New-ConditionalText Stopped
   New-ConditionalText Running -BackgroundColor LightGreen -ConditionalTextColor DarkGreen
   )

/wp-content/uploads/2018/07/Cuarto_Export.png
Exportar a Excel con formato condicional

Y ya por último, podemos probar a generar tablas dinámicas utilizando los datos que hemos extraído:

1
2
3
4
Get-Service | Select Name,ServiceName,Status,StartType | Export-Excel -Path C:\Export\services.xlsx -AutoSize -BoldTopRow -AutoFilter -ConditionalText $(
   New-ConditionalText Stopped
   New-ConditionalText Running -BackgroundColor LightGreen -ConditionalTextColor DarkGreen
   ) -IncludePivotTable -PivotTableName TablaDinamica -PivotRows Status -PivotData Name -PivotColumns StartType

/wp-content/uploads/2018/07/Quinto_Export.png
Tabla dinámica con PowerShell

Conclusión

Y hasta aquí el primer “Descubriendo módulos” en el que hemos visto una buena forma de exportar datos obtenidos con PowerShell y que puede funcionar a las mil maravillas en nuestros scripts de reporting programados. Os invito a que descarguéis el módulo y trasteeis con él puesto que tiene infinidad de opciones que no hemos tocado en esta entrada.