Powershell exe Datei in Label anzeigen
Hallo an alle,
ich habe folgendes Problem:
Ich habe eine xlsx Datei auf einem Netzlaufwerk liegen, diese Datei beinhaltet Name Telefon und Handy Nummern.
Diese möchte ich gerne in einer GUI in einem Label anzeigen lassen, bzw die GUI existiert bereits.
Jetzt meine Frage kann ich eine xlsx Datei einbinden oder geht nur CSV und wenn jemand diese Datei ändert (Eintrag)
wird sie dann automatisch synchronisiert ?
Ich bin noch relativ neu in Powershell und freue mich auf Vorschäge bzw Hilfe.
ich habe folgendes Problem:
Ich habe eine xlsx Datei auf einem Netzlaufwerk liegen, diese Datei beinhaltet Name Telefon und Handy Nummern.
Diese möchte ich gerne in einer GUI in einem Label anzeigen lassen, bzw die GUI existiert bereits.
Jetzt meine Frage kann ich eine xlsx Datei einbinden oder geht nur CSV und wenn jemand diese Datei ändert (Eintrag)
wird sie dann automatisch synchronisiert ?
Ich bin noch relativ neu in Powershell und freue mich auf Vorschäge bzw Hilfe.
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 1890468488
Url: https://administrator.de/forum/powershell-exe-datei-in-label-anzeigen-1890468488.html
Ausgedruckt am: 23.04.2025 um 04:04 Uhr
7 Kommentare
Neuester Kommentar
Moin.
*Hust*, also in dem Text und Titel ist ziemlich viel wirres und widersprüchliches Zeug enthalten, sorry.
Im Titel schreibst du eine "exe Datei" in einem Label anzeigen?? Wie soll das gehen, eine EXE Datei hat binäre Daten und die in einem Label der nur aus Text besteht anzuzeigen macht keinen Sinn, oder meinst du ein zur Exe gewrapptes PS Skript?!
Genauso macht es eigentlich keinen Sinn eine Excel-Datei in einem Label anzuzeigen, Excel Dateien bestehen aus Spalten und Zeilen und der Label nur aus reinem Text. Willst du die Daten einer Excel-Datei vernünftig anzeigen und aktualisieren lassen würde man das bspw. in einem DataGridView machen.
Beispiel wie man die Daten einer Excel-Datei in ein DataGridView-Control lädt und regelmäßig aktualisiert
Grüße Uwe
*Hust*, also in dem Text und Titel ist ziemlich viel wirres und widersprüchliches Zeug enthalten, sorry.
Im Titel schreibst du eine "exe Datei" in einem Label anzeigen?? Wie soll das gehen, eine EXE Datei hat binäre Daten und die in einem Label der nur aus Text besteht anzuzeigen macht keinen Sinn, oder meinst du ein zur Exe gewrapptes PS Skript?!
Genauso macht es eigentlich keinen Sinn eine Excel-Datei in einem Label anzuzeigen, Excel Dateien bestehen aus Spalten und Zeilen und der Label nur aus reinem Text. Willst du die Daten einer Excel-Datei vernünftig anzeigen und aktualisieren lassen würde man das bspw. in einem DataGridView machen.
Beispiel wie man die Daten einer Excel-Datei in ein DataGridView-Control lädt und regelmäßig aktualisiert
# excel data source
$excelfile = 'D:\test.xlsx'
# excel sheet name
$tablename = 'Tabelle1'
# update data every x seconds
$update_seconds = 5
# ======================
function GenerateForm {
Add-Type -A System.Windows.Forms
$dt = New-Object System.Data.DataTable
$timer = New-Object System.Windows.Forms.Timer -P @{
add_Tick = {UpdateDataSource}
Interval = $update_seconds * 1000
}
function UpdateDataSource {
$conn = $null
try{
$conn = New-Object System.Data.OleDb.OleDbConnection ("Provider=Microsoft.ACE.OLEDB.12.0;Data Source=`"$excelfile`";Extended Properties=`"Excel 12.0;HDR=YES;`";Mode=Read;")
$conn.Open()
if ($conn.State -eq 'Open'){
$dt.Rows.Clear()
$adapter = New-Object System.Data.OleDb.OleDbDataAdapter "SELECT * FROM [$tablename$];",$conn
$adapter.Fill($dt)
$dgv.Update()
}
}catch{
}finally{
if ($conn){$conn.close()}
}
}
$form = New-Object System.Windows.Forms.Form -P @{
ClientSize = '800,600'
Text = "Load Excel Data into DataGridView"
}
$dgv = New-Object System.Windows.Forms.DataGridView -P @{
Size = '780,540'
Location = '10,10'
Anchor = 'Top,Right,Bottom,Left'
DataSource = $dt
ReadOnly = $true
}
$btn = New-Object System.Windows.Forms.Button -P @{
Text = "Load Data"
Location = '10,560'
Size = '180,30'
Anchor = 'Bottom,Left'
add_Click = {
if ($this.Text -eq 'Start Update'){
if (!(Test-Path $excelfile)){
[System.Windows.Forms.MessageBox]::Show("Excel-File $excelfile could not be found!",'Error',0,48)
return
}
UpdateDataSource
$timer.Start()
$this.Text = 'Stop Update'
}else{
$this.Text = 'Start Update'
$timer.Stop()
}
}
}
$form.Controls.AddRange(@($btn,$dgv))
[void]$form.ShowDialog()
# cleanup timer
$timer.Stop();$timer.Dispose()
}
GenerateForm
Selbstverständlich kann man CSV-Daten auch in einer Form anzeigen lassen ... Das geht sogar out of the box auch ohne extra Form
Lässt sich aber genausogut ähnlich wie oben in ein DataGridView in einer Form laden. Musst dich halt mal für etwas entscheiden sonst wird das nix
. Deine Schilderung ist dahingehend leider viel zu ungenau ...
Import-CSV .\data.csv -delimiter ";" | out-gridview
Lass doch das Gefrickel mit einer Richtextbox, wie oben schon geschrieben gibt es für tabellarische Daten geeignetere Controls wie bspw. das DataGridview: (Spaltenname und Delimiter nach der die CSV sortiert werden soll anpassen (Zeile 21))...
Oder wenn man mit den Spalten-Headern nachträglich die Sortierung ändern möchte:
Sortieren macht man übrigens mit Sort-Object
Ich bin jetzt raus, genügend Beispiele wie man sowas vernünftig angeht hast du ja nun
.
Für den Rest etwas Lektüre : Powershell - Leitfaden für Anfänger
Viel Erfolg
Grüße Uwe
function GenerateForm {
Add-Type -A System.Windows.Forms
$form1 = New-Object System.Windows.Forms.Form -P @{
ClientSize = '800,600'
Text = "CSV-Data in Gridview darstellen"
}
$dgv = New-Object System.Windows.Forms.DataGridView -P @{
Location = '10,10'
Size = '780,540'
Anchor = 'Top,Left,Right,Bottom'
}
$btn = New-Object System.Windows.Forms.Button -P @{
Text = "Load data"
Location = '10,560'
Size = '180,30'
Anchor = 'Bottom,Left'
add_Click = {
$data = New-Object System.Collections.ArrayList
$data.AddRange(@(Import-CSV 'C:\OPT\Foits\WICHTIGE_TELEFONNUMMERN_MASTER.CSV' -Delimiter ";" | sort "MeinSpalte"))
$dgv.DataSource = $data
}
}
$form1.Controls.AddRange(@($dgv,$btn))
[void]$form1.ShowDialog()
}
GenerateForm
function GenerateForm {
Add-Type -A System.Windows.Forms
$form1 = New-Object System.Windows.Forms.Form -P @{
ClientSize = '800,600'
Text = "Data-Gridview"
}
$dgv = New-Object System.Windows.Forms.DataGridView -P @{
Location = '10,10'
Size = '780,540'
Anchor = 'Top,Left,Right,Bottom'
}
$btn = New-Object System.Windows.Forms.Button -P @{
Text = "Load data"
Location = '10,560'
Size = '180,30'
Anchor = 'Bottom,Left'
add_Click = {
$csv = Import-CSV 'C:\OPT\Foits\WICHTIGE_TELEFONNUMMERN_MASTER.CSV' -Delimiter ";"
$dt = New-Object System.Data.DataTable
[string[]]$cols = ($csv | gm -MemberType NoteProperty).Name
$dt.Columns.AddRange($cols)
foreach($row in $csv) {
$dr = $dt.NewRow()
$cols | %{$dr[$_] = $row.$_}
$dt.Rows.Add($dr)
}
$dgv.DataSource = $dt
}
}
$form1.Controls.AddRange(@($dgv,$btn))
[void]$form1.ShowDialog()
}
GenerateForm
Sortieren macht man übrigens mit Sort-Object
Ich bin jetzt raus, genügend Beispiele wie man sowas vernünftig angeht hast du ja nun
Für den Rest etwas Lektüre : Powershell - Leitfaden für Anfänger
Viel Erfolg
Grüße Uwe