Saltar al contenido

Leer datos de Excel con Powershell y escribir en una variable

Buscamos en todo el mundo on line para darte la solución para tu problema, si tienes dificultades puedes dejar la inquietud y contestaremos con gusto, porque estamos para ayudarte.

Solución:

La entrada del usuario se puede leer así:

$num = Read-Host "Store number"

Excel se puede manejar así:

$xl = New-Object -COM "Excel.Application"
$xl.Visible = $true
$wb = $xl.Workbooks.Open("C:pathtoyour.xlsx")
$ws = $wb.Sheets.Item(1)

Buscar un valor en una columna y asignar el valor correspondiente de otra columna a una variable se puede hacer así:

for ($i = 1; $i -le 3; $i++) 
  if ( $ws.Cells.Item($i, 1).Value -eq $num ) 
    $GoLiveDate = $ws.Cells.Item($i, 2).Value
    break
  

No olvides limpiar una vez que hayas terminado:

$wb.Close()
$xl.Quit()
[System.Runtime.Interopservices.Marshal]::ReleaseComObject($xl)

Me parece preferible usar una conexión OleDB para interactuar con Excel. Es más rápido que la interoperabilidad COM y menos propenso a errores que import-csv. Puede preparar una colección de psobjects (un psobject es una fila, cada propiedad corresponde a una columna) para que coincida con la cuadrícula de destino deseada e insertarla en el archivo de Excel. De manera similar, puede insertar un DataTable en lugar de una colección de PSObject, pero a menos que comience recuperando datos de alguna fuente de datos, la forma de recolección de PSObject suele ser más fácil.

Aquí hay una función que uso para escribir una colección de psobject en Excel:

function insert-OLEDBData ($file,$sheet,$ocol) %$_.name

    $names = '[' + ($hdr-join"],[") + ']'
    $vals = (@("?")*([array]$hdr).length)-join','

    $sql = "insert into [$sheet`$] ($names) values ($vals)"

    $sqlCmd = New-Object system.Data.OleDb.OleDbCommand($sql)
    $sqlCmd.connection = $oledbcon

    $cpary = @($null)*([array]$hdr).length

    $i=0
    [array]$hdr

Si para ti ha sido de utilidad este artículo, nos gustaría que lo compartas con otros programadores de esta manera nos ayudas a dar difusión a este contenido.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

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