Leer datos de hojas de Excel en PowerShell

Leer datos de hojas de Excel en PowerShell

Una de las herramientas comunes que la mayoría de los profesionales de TI deberían haber usado al menos una vez en su empleo es Microsoft Excel. Pero desafortunadamente, muchos profesionales de TI usan Excel como una pequeña base de datos que almacena toneladas de datos.

Este artículo nos enseñará los fundamentos del uso de PowerShell para automatizar la lectura de datos en un libro de Excel.

Leer valor de Excel en PowerShell

Podemos guardar un libro de Excel en un objeto de PowerShell que luego se puede leer y manipular usando el comando COM New-Object -ComObject Excel.Application. Asegúrese de tener un paquete de Office 2016 instalado en su máquina para que funcionen los comandos.

Tomemos el siguiente archivo de Excel como ejemplo.

Ejemplo.xlsx:

Name,Salary
John,1000
Paul,2000
Mary,1500
Matt,3000

Para encontrar un valor de celda, abra el libro de Excel para traerlo a la memoria usando el siguiente fragmento.

$excel = New-Object -ComObject Excel.Application
$workbook = $excel.workbooks.Open('C:\PS\Sample.xlsx')

A continuación, elija la hoja de trabajo dentro del libro de trabajo. El argumento acepta un valor entero, donde 1 es la Hoja 1, 2 es la Hoja 2, y así sucesivamente.

$sheet = $workbook.Sheets.Item(1)

Una vez que asignamos la hoja de trabajo a una variable, podemos profundizar en filas, columnas y celdas individuales. Tal vez necesitemos encontrar valores de celda para una celda específica.

Luego, debemos hacer referencia a la propiedad de celdas proporcionando las coordenadas de fila y columna.

$cellValue = $sheet.Cells.Item(2,2).Value2

Sin embargo, si no queremos las coordenadas de la celda sino la dirección de su nombre, podemos utilizar la función Dirección para visualizarla.

Código de ejemplo:

$cellAddress = $sheet.Cells.Item(2,2).Address()
Write-Output $cellAddress

Producción :

$B$2

Ahora, con todos estos comandos, podemos formular un fragmento de código de muestra que generará todos los datos de una columna específica mediante PowerShell.

$rangeAddress = $sheet.Cells.Item(2,2).Address() + ":" + $sheet.Cells.Item(5,2).Address()

$sheet.Range($rangeAddress).Value2 | foreach {
	$salary = $_
	Write-Output $salary
}

Producción :

1000
2000
1500
3000
Marion Paul Kenneth Mendoza avatar Marion Paul Kenneth Mendoza avatar

Marion specializes in anything Microsoft-related and always tries to work and apply code in an IT infrastructure.

LinkedIn