A continuación vamos a ver cómo leer una hoja de Excel desde la consola de comandos PowerShell. ¡Qué comiencen los scripts!
Crear una Excel
En primer lugar crearemos una hoja Excel para realizar una prueba a la que llamaremos ExcelFtw.xlsx.
Ejecutar PowerShell
Tras ello abriremos la consola de PowerShell y ejecutaremos el siguiente código, o bien abriremos un fichero *.txt para introducir este código y generar un script.
NOTA: Si queréis saber más acerca de los comandos básicos de PowerShell, como crear scripts, o librerías de funciones, no dudéis en consultar estas otras entradas del blog:
1 2 3 4 5 6 7 8 9 10 11 12 |
# Nuevo objeto de tipo Excel $Excel = New-Object -ComObject Excel.Application # Así evitamos que la hoja se abra tras asignar su dirección física $Excel.Visible = $false # Suponemos que la hoja Excel está en la misma dirección que el script PowerShell $CurrentPath = Split-Path $MyInvocation.MyCommand.Path $FilePath = $CurrentPath + "\ExcelFtw.xlsx" # Ya tenemos cargado nuestra libro Excel $WorkBook = $Excel.Workbooks.Open($FilePath) |
Tras realizar estas primeras líneas tendremos un objeto que contiene toda el libro Excel.
A continuación vamos a ver cómo realizar las operaciones más básicas, tales como, leer las diferentes hojas (sheets) y recorrer el contenido de las celdas, filas y columnas para enumerar su contenido. ¡Sigamos programando!
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 |
# Leer la primera hoja $FirstWorkSheet = $WorkBook.WorkSheets.Item(1) $WorksheetRange = $FirstWorkSheet.UsedRange $maxRow = $WorksheetRange.Rows.Count # Contador de filas $intRow = 1 # Limpiamos la pantalla Clear-Host do { # Contador de columnas $intColumn = 1 do { # Obtenemos el valor para la fila y columna de las variables $ColumnValue = $FirstWorkSheet.Cells.Item($intRow, $intColumn).Value() # Dibujamos y sumamos uno al contador de columnas Write-Host -NoNewLine "`t $ColumnValue" $intColumn ++ # Continuar mientras la siguiente columna no esté vacía } While($FirstWorkSheet.Cells.Item($intRow, $intColumn).Value()-ne $null) # Dibujamos un separador de filas y sumamos uno a dicho contador Write-Host "`n------------------------------" $intRow++ # Continuar mientras no sea la última } While($maxRow -ge $intRow) |
Este será el resultado tras ejecutar nuestro script en PowerShell:
Más adelante veremos cómo hacer un uso eficiente de esto, para automatizar tareas como crear columnas de sitio, tipos de contenido o listas.
¡Nos vemos en el siguiente script!