Lesen Sie Excel-Tabellendaten in PowerShell
Eines der alltäglichen Tools, das die meisten IT-Experten mindestens einmal in ihrer Anstellung verwendet haben sollten, ist Microsoft Excel. Aber leider verwenden viele IT-Profis Excel als kleine Datenbank, die zu Unmengen von Daten führt.
Dieser Artikel vermittelt uns die Grundlagen der Verwendung von PowerShell zum Automatisieren des Datenlesens in einer Excel-Arbeitsmappe.
Lesen Sie den Excel-Wert in PowerShell
Wir können eine Excel-Arbeitsmappe in einem PowerShell-Objekt speichern, das dann mit dem COM-Befehl New-Object -ComObject Excel.Application
gelesen und bearbeitet werden kann. Stellen Sie sicher, dass auf Ihrem Computer ein Office 2016-Paket installiert ist, damit die Befehle funktionieren.
Nehmen wir als Beispiel die folgende Excel-Datei.
Beispiel.xlsx
:
Name,Salary
John,1000
Paul,2000
Mary,1500
Matt,3000
Um einen Zellenwert zu finden, öffnen Sie die Excel-Arbeitsmappe, um sie mithilfe des folgenden Codeausschnitts in den Speicher zu bringen.
$excel = New-Object -ComObject Excel.Application
$workbook = $excel.workbooks.Open('C:\PS\Sample.xlsx')
Wählen Sie als Nächstes das Arbeitsblatt in der Arbeitsmappe aus. Das Argument akzeptiert einen ganzzahligen Wert, wobei 1
Blatt 1, 2
Blatt 2 usw. ist.
$sheet = $workbook.Sheets.Item(1)
Sobald wir das Arbeitsblatt einer Variablen zuweisen, können wir einzelne Zeilen, Spalten und Zellen aufschlüsseln. Vielleicht müssen wir Zellwerte für eine bestimmte Zelle finden.
Dann müssen wir auf die Eigenschaft cell verweisen, die die Zeilen- und Spaltenkoordinaten bereitstellt.
$cellValue = $sheet.Cells.Item(2,2).Value2
Wenn wir jedoch nicht die Zellkoordinaten, sondern die Name-Adresse möchten, können wir sie mit der Funktion Adresse
anzeigen.
Beispielcode:
$cellAddress = $sheet.Cells.Item(2,2).Address()
Write-Output $cellAddress
Ausgang:
$B$2
Mit all diesen Befehlen können wir jetzt einen Beispielcodeausschnitt formulieren, der alle Daten einer bestimmten Spalte mit PowerShell ausgibt.
$rangeAddress = $sheet.Cells.Item(2,2).Address() + ":" + $sheet.Cells.Item(5,2).Address()
$sheet.Range($rangeAddress).Value2 | foreach {
$salary = $_
Write-Output $salary
}
Ausgang:
1000
2000
1500
3000
Marion specializes in anything Microsoft-related and always tries to work and apply code in an IT infrastructure.
LinkedIn