Files
IO-Konvertierer/Test-Skripte/GUI-Angepasst4_Backup1.ps1
2023-06-13 15:37:11 +02:00

1270 lines
45 KiB
PowerShell

Function Main
{
Write-Host "Programmstart"
$StartPfad = "R:\m.kraft\Excel Werte ändern"
GUI $StartPfad
<#$PfadUrsprungsdatei = GuiTxtWaehlen $StartPfad
Write-Host "Pfad Ursprungsdatei: " $PfadUrsprungsdatei
# Testen, ob übergebener Pfad gültig ist? Könnte ungültig sein, wenn in PfadFeld unsinn steht und das Fenster via x geschlossen wird
$PfadUrsprungsdateiMod = Split-Path $PfadUrsprungsdatei
$PfadZielDateien = GuiVerzeichnisWaehlen $PfadUrsprungsdateiMod
Write-Host "Dateirückgabe in Main(2): " $PfadZielDateien
GUI für Fortschrittsanzeige
GuiFortschrittsAnzeige $PfadUrsprungsdatei
#Todo: Nur öffnen, wenn es weder gleiche Eingänge, noch gleiche Ausgänge gibt?
GuiGleicheAnzeigen $GleicheEingaenge $GleicheAusgaenge#>
}
Function GUI ($StartPfad)
{
[void] [System.Reflection.Assembly]::LoadWithPartialName("System.Windows.Forms")
[void] [System.Reflection.Assembly]::LoadWithPartialName("System.Drawing")
# Eigenschaften Fenster
$Fenster = New-Object System.Windows.Forms.Form
$Fenster.Size = New-Object System.Drawing.Size(940,660) #Breite, Höhe
$Fenster.StartPosition = "CenterScreen"
$Fenster.KeyPreview = $true # was macht das?
$Fenster.MaximumSize = $Fenster.Size # legt fest, dass Größe des Fensters nicht verändert werden kann
$Fenster.MinimumSize = $Fenster.Size
$Fenster.Text = "Dateikonvertierer txt zu xlsx"
$TabBasis = New-Object System.Windows.Forms.TabControl
$TabBasis.Location = New-Object System.Drawing.Size(10,10)
$TabBasis.Size = New-Object System.Drawing.Size(900,600)
$TabBasis.DataBindings.DefaultDataSourceUpdateMode = 0 # Was macht das?
$Fenster.Controls.Add($TabBasis)
$TabSeiteTXTAuswaehlen = New-Object System.Windows.Forms.TabPage
$TabSeiteTXTAuswaehlen.TabIndex = 0
$TabSeiteTXTAuswaehlen.UseVisualStyleBackColor = $true
$TabSeiteTXTAuswaehlen.Text = "txt-Datei Auswaehlen"
#Paddings
$TabSeiteTXTAuswaehlen.DataBindings.DefaultDataSourceUpdateMode = 0
$TabBasis.Controls.Add($TabSeiteTXTAuswaehlen)
# TXTPfadFeld
$TXTPfadFeld = New-Object System.Windows.Forms.TextBox
$TXTPfadFeld.Location = New-Object System.Drawing.Size(10,10)
$TXTPfadFeld.Size = New-Object System.Drawing.Size(860,20)
$TXTPfadFeld.Add_KeyDown({
# Reaktion bei gedrückter Taste
$Taste = $_.KeyCode
TXTTastenReaktionPfadFeld $Taste
})
$TabSeiteTXTAuswaehlen.Controls.Add($TXTPfadFeld)
# TXTListeOrdnernamen
$TXTListeOrdnernamen = New-Object System.Windows.Forms.ListBox
$TXTListeOrdnernamen.Location = New-Object System.Drawing.Size(10,40)
$TXTListeOrdnernamen.Size = New-Object System.Drawing.Size(860,20)
$TXTListeOrdnernamen.Height = 450
$TXTListeOrdnernamen.Font = New-Object System.Drawing.Font("Arial",12,[System.Drawing.FontStyle]::Regular)
$TXTListeOrdnernamen.Add_DoubleClick({
# Variablen bestimmen zur Übergabe
$Auswahl = $TXTListeOrdnernamen.SelectedItem
$Pfad = $TXTPfadFeld.Text
# Write-Host "Gewählter Ordner/ Datei: " $Auswahl
# Write-Host "Vorheriger Pfad: " $TXTPfad
# Pfad aktualisieren
TXTVerzeichnisAuswaehlen $Pfad $Auswahl
})
$TXTListeOrdnernamen.Add_KeyDown({
# Reaktion bei gedrückter Taste
$Taste = $_.KeyCode
TXTTastenReaktionListeOrdnernamen $Taste
})
$TabSeiteTXTAuswaehlen.Controls.Add($TXTListeOrdnernamen)
# ZurückButton
$TXTZurueckButton = New-Object System.Windows.Forms.Button
$TXTZurueckButton.Location = New-Object System.Drawing.Size(10,500)
$TXTZurueckButton.Size = New-Object System.Drawing.Size(100,30)
$TXTZurueckButton.Text = "Zurueck"
$TXTZurueckButton.Add_Click({
# Write-Host "Pfad ausgabe: " $TXTPfadFeld.Text
$Pfad = $TXTPfadFeld.Text
#Pfad aktualisieren
TXTVerzeichnisZurueck $Pfad
})
$TXTZurueckButton.Add_KeyDown({
# Reaktion bei gedrückter Taste
$Taste = $_.KeyCode
TXTTastenReaktionButtons $Taste
})
$TabSeiteTXTAuswaehlen.Controls.Add($TXTZurueckButton)
# AuswaehlenButton
$TXTAuswaehlenButton = New-Object System.Windows.Forms.Button
$TXTAuswaehlenButton.Location = New-Object System.Drawing.Size(750,500)
$TXTAuswaehlenButton.Size = New-Object System.Drawing.Size(100,30)
$TXTAuswaehlenButton.Text = "Auswaehlen"
$TXTAuswaehlenButton.Add_Click({
# Variablen bestimmen zur Übergabe
$Auswahl = $TXTListeOrdnernamen.SelectedItem
# Falls nicht aktiv ein Eintrag gewählt wurde, in den obersten navigieren
<#if ($($Auswahl.length -eq 0))
{
$Auswahl = $TXTListeOrdnernamen.Items[0]
}#>
$Pfad= $TXTPfadFeld.Text
# Write-Host "Gewählter Ordner/ Datei: " $Auswahl
# Write-Host "Vorheriger Pfad: " $TXTPfad
# Pfad aktualisieren
TXTVerzeichnisAuswaehlen $Pfad $Auswahl
})
$TXTAuswaehlenButton.Add_KeyDown({
# Reaktion bei gedrückter Taste
$Taste = $_.KeyCode
TXTTastenReaktionButtons $Taste
})
$TabSeiteTXTAuswaehlen.Controls.Add($TXTAuswaehlenButton)
# Dieser Funktionsaufruf zerstört die Rückgabe, wenn er keiner Variable zugewiesen wird
$A = TXTAnzeigeAktualisieren $StartPfad
$TXTDatei = $TXTPfadFeld.Text
# return $Rueckgabe
#$TabBasis.SelectedIndex = 1
$TabSeiteZielVerzeichnisAuswaehlen = New-Object System.Windows.Forms.TabPage
$TabSeiteZielVerzeichnisAuswaehlen.TabIndex = 1
$TabSeiteZielVerzeichnisAuswaehlen.UseVisualStyleBackColor = $true
$TabSeiteZielVerzeichnisAuswaehlen.Text = "Zielverzeichnis Auswaehlen"
#Paddings
$TabSeiteZielVerzeichnisAuswaehlen.DataBindings.DefaultDataSourceUpdateMode = 0
$TabBasis.Controls.Add($TabSeiteZielVerzeichnisAuswaehlen)
# PfadFeld
$VERPfadFeld = New-Object System.Windows.Forms.TextBox
$VERPfadFeld.Location = New-Object System.Drawing.Size(10,10)
$VERPfadFeld.Size = New-Object System.Drawing.Size(860,20)
$VERPfadFeld.Add_KeyDown({
# Reaktion bei gedrückter Taste
$Taste = $_.KeyCode
VERTastenReaktionPfadFeld $Taste
})
$TabSeiteZielVerzeichnisAuswaehlen.Controls.Add($VERPfadFeld)
# ListeOrdnernamen
$VERListeOrdnernamen = New-Object System.Windows.Forms.ListBox
$VERListeOrdnernamen.Location = New-Object System.Drawing.Size(10,40)
$VERListeOrdnernamen.Size = New-Object System.Drawing.Size(860,20)
$VERListeOrdnernamen.Height = 450
$VERListeOrdnernamen.Font = New-Object System.Drawing.Font("Arial",12,[System.Drawing.FontStyle]::Regular)
$VERListeOrdnernamen.Add_DoubleClick({
# Variablen bestimmen zur Übergabe
$Auswahl = $VERListeOrdnernamen.SelectedItem
$Pfad = $VERPfadFeld.Text
# Write-Host "Gewählter Ordner/ Datei: " $Auswahl
# Write-Host "Vorheriger Pfad: " $VERPfad
# Pfad aktualisieren
VERVerzeichnisAuswaehlen $Pfad $Auswahl
})
$VERListeOrdnernamen.Add_KeyDown({
# Reaktion bei gedrückter Taste
$Taste = $_.KeyCode
VERTastenReaktionListeOrdnernamen $Taste
})
$TabSeiteZielVerzeichnisAuswaehlen.Controls.Add($VERListeOrdnernamen)
# ZurückButton
$VERZurueckButton = New-Object System.Windows.Forms.Button
$VERZurueckButton.Location = New-Object System.Drawing.Size(10,500)
$VERZurueckButton.Size = New-Object System.Drawing.Size(100,30)
$VERZurueckButton.Text = "Zurueck"
$VERZurueckButton.Add_Click({
# Write-Host "Pfad ausgabe: " $VERPfadFeld.Text
$Pfad = $VERPfadFeld.Text
#Pfad aktualisieren
VERVerzeichnisZurueck $Pfad
})
$VERZurueckButton.Add_KeyDown({
# Reaktion bei gedrückter Taste
$Taste = $_.KeyCode
VERTastenReaktionButtons $Taste
})
$TabSeiteZielVerzeichnisAuswaehlen.Controls.Add($VERZurueckButton)
# AuswaehlenButton
$VERAuswaehlenButton = New-Object System.Windows.Forms.Button
$VERAuswaehlenButton.Location = New-Object System.Drawing.Size(630,500)
$VERAuswaehlenButton.Size = New-Object System.Drawing.Size(100,30)
$VERAuswaehlenButton.Text = "Auswaehlen"
$VERAuswaehlenButton.Add_Click({
# Variablen bestimmen zur Übergabe
$Auswahl = $VERListeOrdnernamen.SelectedItem
# Falls nicht aktiv ein Eintrag gewählt wurde, in den obersten navigieren
<#if ($($Auswahl.length -eq 0))
{
$Auswahl = $VERListeOrdnernamen.Items[0]
}#>
$Pfad = $VERPfadFeld.Text
# Write-Host "Gewählter Ordner/ Datei: " $Auswahl
# Write-Host "Vorheriger Pfad: " $VERPfad
if ($($VERListeOrdnernamen.Items[0] -eq ""))
{
VERAuswahlBestaetigt $Pfad $Auswahl
}
else
{
# Pfad aktualisieren
VERVerzeichnisAuswaehlen $Pfad $Auswahl
}
})
$VERAuswaehlenButton.Add_KeyDown({
# Reaktion bei gedrückter Taste
$Taste = $_.KeyCode
VERTastenReaktionButtons $Taste
})
$TabSeiteZielVerzeichnisAuswaehlen.Controls.Add($VERAuswaehlenButton)
# BestaetigenButton
$VERBestaetigenButton = New-Object System.Windows.Forms.Button
$VERBestaetigenButton.Location = New-Object System.Drawing.Size(750,500)
$VERBestaetigenButton.Size = New-Object System.Drawing.Size(100,30)
$VERBestaetigenButton.Text = "Bestaetigen"
$VERBestaetigenButton.Add_Click({
$Auswahl = $VERListeOrdnernamen.SelectedItem
# Falls nicht aktiv ein Eintrag gewählt wurde, in den obersten navigieren
<#if ($($Auswahl.length -eq 0))
{
$Auswahl = $VERListeOrdnernamen.Items[0]
}#>
$Pfad = $VERPfadFeld.Text
VERAuswahlBestaetigt $Pfad $Auswahl
})
$VERBestaetigenButton.Add_KeyDown({
# Reaktion bei gedrückter Taste
$Taste = $_.KeyCode
VERTastenReaktionButtons $Taste
})
$TabSeiteZielVerzeichnisAuswaehlen.Controls.Add($VERBestaetigenButton)
# Dieser Funktionsaufruf zerstört die Rückgabe, wenn er keiner Variable zugewiesen wird
$A = VERAnzeigeAktualisieren $TXTPfadFeld.Text
$ZielVerzeichnis = $VERPfadFeld.Text
#return $Rueckgabe2
#$TabBasis.SelectedIndex = 2
$TabSeiteFortschrittsanzeige = New-Object System.Windows.Forms.TabPage
$TabSeiteFortschrittsanzeige.TabIndex = 2
$TabSeiteFortschrittsanzeige.UseVisualStyleBackColor = $true
$TabSeiteFortschrittsanzeige.Text = "Bearbeitungsfortschritt"
#Paddings
$TabSeiteFortschrittsanzeige.DataBindings.DefaultDataSourceUpdateMode = 0
$TabBasis.Controls.Add($TabSeiteFortschrittsanzeige)
$FATextfeld1 = New-Object System.Windows.Forms.Label
$FATextfeld1.Location = New-Object System.Drawing.Size(10,10)
$FATextfeld1.Size = New-Object System.Drawing.Size(200,20)
$FATextfeld1.Text = "Aktuelle Aufgabe"
$TabSeiteFortschrittsanzeige.Controls.Add($FATextfeld1)
$FATextfeld2 = New-Object System.Windows.Forms.Label
$FATextfeld2.Location = New-Object System.Drawing.Size(300,10)
$FATextfeld2.Size = New-Object System.Drawing.Size(430,20)
$FATextfeld2.Text = "Erledigte Aufgaben"
$TabSeiteFortschrittsanzeige.Controls.Add($FATextfeld2)
$FATextfeldAktuelleAufgabe = New-Object System.Windows.Forms.Label
$FATextfeldAktuelleAufgabe.Location = New-Object System.Drawing.Size(10,40)
$FATextfeldAktuelleAufgabe.Size = New-Object System.Drawing.Size(280,60)
$FATextfeldAktuelleAufgabe.Text = "txt-Datei auswaehlen"
$TabSeiteFortschrittsanzeige.Controls.Add($FATextfeldAktuelleAufgabe)
$FAListeErledigteAufgaben = New-Object System.Windows.Forms.ListBox
$FAListeErledigteAufgaben.Location = New-Object System.Drawing.Size(300,40)
$FAListeErledigteAufgaben.Size = New-Object System.Drawing.Size(430,20)
$FAListeErledigteAufgaben.Height = 150
$FAListeErledigteAufgaben.Font = New-Object System.Drawing.Font("Arial",12,[System.Drawing.FontStyle]::Regular)
$TabSeiteFortschrittsanzeige.Controls.Add($FAListeErledigteAufgaben)
$FATextfeld3 = New-Object System.Windows.Forms.Label
$FATextfeld3.Location = New-Object System.Drawing.Size(10,100)
$FATextfeld3.Size = New-Object System.Drawing.Size(430,20)
$FATextfeld3.Text = "Fortschritt Excel-Dateien beschreiben"
$TabSeiteFortschrittsanzeige.Controls.Add($FATextfeld3)
$FAFortschrittsbar = New-Object System.Windows.Forms.ProgressBar
$FAFortschrittsbar.Location = New-Object System.Drawing.Size(10,120)
$FAFortschrittsbar.Size = New-Object System.Drawing.Size(260,30)
#$FAFortschrittsbar.Name = "Fortschrittsanzeige"
$FAFortschrittsbar.Value = 0
$TabSeiteFortschrittsanzeige.Controls.Add($FAFortschrittsbar)
$FATextfeldRealwertFortschrittsbar = New-Object System.Windows.Forms.Label # Stimmt nicht, wird verwendet, aber VSC erkennt das nicht
$FATextfeld4 = New-Object System.Windows.Forms.Label
$FATextfeld4.Location = New-Object System.Drawing.Size(10,170)
$FATextfeld4.Size = New-Object System.Drawing.Size(140,20)
$FATextfeld4.Text = "Bearbeitete Eintraege:"
$TabSeiteFortschrittsanzeige.Controls.Add($FATextfeld4)
$FATextfeld5 = New-Object System.Windows.Forms.Label
$FATextfeld5.Location = New-Object System.Drawing.Size(10,200)
$FATextfeld5.Size = New-Object System.Drawing.Size(100,20)
$FATextfeld5.Text = "Gesamteintraege:"
$TabSeiteFortschrittsanzeige.Controls.Add($FATextfeld5)
$FATextfeldBearbeiteteEintraege = New-Object System.Windows.Forms.Label
$FATextfeldBearbeiteteEintraege.Location = New-Object System.Drawing.Size(170,170)
$FATextfeldBearbeiteteEintraege.Size = New-Object System.Drawing.Size(430,20)
$FATextfeldBearbeiteteEintraege.Text = "0"
$TabSeiteFortschrittsanzeige.Controls.Add($FATextfeldBearbeiteteEintraege)
$FATextfeldGesamtEintraege = New-Object System.Windows.Forms.Label
$FATextfeldGesamtEintraege.Location = New-Object System.Drawing.Size(170,200)
$FATextfeldGesamtEintraege.Size = New-Object System.Drawing.Size(430,20)
<#if (PfadExistiert $TXTPfadFeld.Text)
{
$Ursprungdatei = Get-Content $TXTPfadFeld.Text
}#>
$FATextfeldGesamtEintraege.Text = $($Ursprungdatei.Length)
$TabSeiteFortschrittsanzeige.Controls.Add($FATextfeldGesamtEintraege)
# Todo: Von hier aus Funktionsaufruf zum erstellen der xlsx-Dateien, konvertieren, ...
# $GleicheEingaenge und $GleicheAusgaenge muss am Ende festgelegt sein
if ($FAFortschrittsbar.Value -eq 100)
{
ZuDPSpringen
}
$TabSeiteDuplikate = New-Object System.Windows.Forms.TabPage
$TabSeiteDuplikate.TabIndex = 3
$TabSeiteDuplikate.UseVisualStyleBackColor = $true
$TabSeiteDuplikate.Text = "Doppelte Ein- und Ausgaenge"
#Paddings
$TabSeiteDuplikate.DataBindings.DefaultDataSourceUpdateMode = 0
$TabBasis.Controls.Add($TabSeiteDuplikate)
$DPTextfeld1 = New-Object System.Windows.Forms.Label
$DPTextfeld1.Location = New-Object System.Drawing.Size(10,10)
$DPTextfeld1.Size = New-Object System.Drawing.Size(275,40)
$DPTextfeld1.Text = "Bei den Eingaengen gibt es folgende Duplikate: "
$TabSeiteDuplikate.Controls.Add($DPTextfeld1)
$DPListeEingaenge = New-Object System.Windows.Forms.DataGridView
$DPListeEingaenge.Location = New-Object System.Drawing.Size(10,60)
$DPListeEingaenge.Size = New-Object System.Drawing.Size(275,20)
$DPListeEingaenge.Height = 430
$DPListeEingaenge.ColumnCount = 2
$DPListeEingaenge.ColumnHeadersVisible = $true
$DPListeEingaenge.Columns[0].Name = "Zeile"
$DPListeEingaenge.Columns[1].Name = "Kennzeichnung"
$TabSeiteDuplikate.Controls.Add($DPListeEingaenge)
$DPTextfeld2 = New-Object System.Windows.Forms.Label
$DPTextfeld2.Location = New-Object System.Drawing.Size(295,10)
$DPTextfeld2.Size = New-Object System.Drawing.Size(275,40)
$DPTextfeld2.Text = "Bei den Ausgaengen gibt es folgende Duplikate: "
$TabSeiteDuplikate.Controls.Add($DPTextfeld2)
$DPListeAusgaenge = New-Object System.Windows.Forms.DataGridView
$DPListeAusgaenge.Location = New-Object System.Drawing.Size(295,60)
$DPListeAusgaenge.Size = New-Object System.Drawing.Size(275,20)
$DPListeAusgaenge.Height = 430
$DPListeAusgaenge.ColumnCount = 2
$DPListeAusgaenge.ColumnHeadersVisible = $true
$DPListeAusgaenge.Columns[0].Name = "Zeile"
$DPListeAusgaenge.Columns[1].Name = "Kennzeichnung"
$TabSeiteDuplikate.Controls.Add($DPListeAusgaenge)
$DPTextfeld3 = New-Object System.Windows.Forms.Label
$DPTextfeld3.Location = New-Object System.Drawing.Size(580,10)
$DPTextfeld3.Size = New-Object System.Drawing.Size(275,40)
$DPTextfeld3.Text = "Folgende Eintraege konnten keinem Betriebsmittel zugewiesen werden:"
$TabSeiteDuplikate.Controls.Add($DPTextfeld3)
$DPListeFehler = New-Object System.Windows.Forms.DataGridView
$DPListeFehler.Location = New-Object System.Drawing.Size(580,60)
$DPListeFehler.Size = New-Object System.Drawing.Size(275,20)
$DPListeFehler.Height = 430
$DPListeFehler.ColumnCount = 2
$DPListeFehler.ColumnHeadersVisible = $true
$DPListeFehler.Columns[0].Name = "Zeile"
$DPListeFehler.Columns[1].Name = "Kennzeichnung"
$TabSeiteDuplikate.Controls.Add($DPListeFehler)
$DPBestaetigenButton = New-Object System.Windows.Forms.Button
$DPBestaetigenButton.Location = New-Object System.Drawing.Size(10,500)
$DPBestaetigenButton.Size = New-Object System.Drawing.Size(860,30)
$DPBestaetigenButton.Text = "Programm beenden"
$DPBestaetigenButton.Add_Click({
$Fenster.Dispose()
return
})
$TabSeiteDuplikate.Controls.Add($DPBestaetigenButton)
$Fenster.Add_Shown({$Fenster.Activate()})
[void]$Fenster.ShowDialog()
return
}
#------------------- Funktionen nur für das txt-GUI --------------------------
# Bekommt Pfad, stellt fest ob Laufwerke oder Ordner angezeigt werden müssen und aktualisiert entsprechend alles
# Für Laufwerke muss $Pfad = "" sein
Function TXTAnzeigeAktualisieren ($Pfad)
{
# Write-Host "Übergebener Pfad: " $Pfad
# Sicherstellen, dass es das Verzeichnis gibt
if ($($Pfad -eq "") -or $(PfadExistiert $Pfad))
{
# Feststellen, ob Ordner oder Laufwerke angezeigt werden müssen
if ($Pfad.Length -ne "")
{
# Es handelt sich um Ordner
$Optionen = TXTOptionen $Pfad
#$Fenster.Text = $(Split-Path $Pfad -Leaf)
}
elseif ($Pfad.Length -eq "")
{
# Es handelt sich um Laufwerke
$Optionen = LaufwerkeFinden
$Pfad = ""
#$Fenster.Text = "Laufwerke"
}
else
{
Write-Host "Fehler bei Anzeige aktualisieren"
# Fehler(?)
}
$TXTPfadFeld.Text = $Pfad
$TXTListeOrdnernamen.Items.Clear()
foreach ($Option in $Optionen)
{
if ($Option.Length -gt 0)
{
$TXTListeOrdnernamen.Items.Add($Option)
}
}
}
else
{
TXTAnzeigeAktualisieren ""
}
return
}
Function TXTVerzeichnisAuswaehlen ($Pfad, $Auswahl)
{
if ($Pfad.length -gt 0)
{
$Pfad = Join-Path -Path $Pfad -ChildPath $Auswahl -Resolve
}
else
{
#Wenn der Pfad die Länge 0 hat, wurde ein Laufwerk gewählt
$Pfad = $Auswahl
}
#Falls nicht aktiv ein Eintrag ausgewählt wurde, den obersten wählen
<#if ($Auswahl.length -eq 0)
{
$Auswahl = $TXTListeOrdnernamen.Items[0]
}#>
# Erkennen, ob *.txt-Datei gewählt wurde -> ggf. Auswahl abgeschlossen
if ($($Auswahl -match ".txt"))
{
# Für den Gesamtfortschritt Anzahl Dateien auslesen
$Datei = Get-Content $Pfad
$FATextfeldGesamtEintraege.Text = 2 * $($Datei.Length)
# Write-Host ".txt-Datei ausgewählt, Pfad: " $Pfad
# Write-Host "Dateityp: " $Pfad.GetType()
ZuVERSpringen
# Ist zwar sachlich gesehen unsinn, aber sonst funktioniert Return in der GUI nicht
$TXTPfadFeld.Text = $Pfad
return
}
TXTAnzeigeAktualisieren $Pfad
return
}
Function TXTVerzeichnisZurueck ($Pfad)
{
if ($Pfad.Length -gt 3)
{
# Weiter mit Ordnern
# Write-Host "Ordner anzeigen"
$Pfad = Split-Path $Pfad
}
elseif ($Pfad.Length -le 3)
{
# Weiter mit Laufwerken
# Write-Host "Laufwerke anzeigen"
$Pfad = ""
}
else
{
Write-Host "Fehler bei Verzeichnis zurueck"
# Fehler/ Nichts tun?
# Ermitteln: wann tritt dieser Fall ein?
}
TXTAnzeigeAktualisieren $Pfad
return
}
Function TXTTastenReaktionPfadFeld($Taste)
{
# Write-Host "Übergebene Taste: " $Taste
switch ($Taste){
"Return" {
# Write-Host "Enter gedrückt"
$Pfad = $TXTPfadFeld.Text
# Write-Host "Pfad: " $Pfad
TXTReaktionReturn $Pfad
}
default {
# Write-Host "Gedrückte Taste: " $Taste
}
}
return
}
Function TXTTastenReaktionListeOrdnernamen($Taste)
{
# Write-Host "Übergebene Taste: " $Taste
switch ($Taste){
"Return" {
# Write-Host "Enter gedrückt"
$Auswahl = $TXTListeOrdnernamen.SelectedItem
<#if ($($Auswahl.Length -eq 0))
{
$Auswahl = $TXTListeOrdnernamen.Items[0]
}#>
$Pfad = $TXTPfadFeld.Text
# Write-Host "Auswahl: " $Auswahl
# Write-Host "Pfad: " $Pfad
TXTVerzeichnisAuswaehlen $Pfad $Auswahl
}
"Back" {
# Write-Host "Back gedrückt"
$Pfad = $TXTPfadFeld.Text
# Write-Host "Pfad: " $Pfad
# Pfad aktualisieren
TXTVerzeichnisZurueck $Pfad
}
default {
# Write-Host "Gedrückte Taste: " $Taste
}
}
return
}
Function TXTTastenReaktionButtons($Taste)
{
# Write-Host "Übergebene Taste: " $Taste
switch ($Taste){
"Back" {
# Write-Host "Back gedrückt"
$Pfad = $TXTPfadFeld.Text
# Write-Host "Pfad: " $Pfad
# Pfad aktualisieren
TXTVerzeichnisZurueck $Pfad
}
default {
# Write-Host "Gedrückte Taste: " $Taste
}
}
return
}
Function TXTOptionen($Pfad)
{
# Unterordner und .txt-Dateien finden
# Typzuweisung nötig, da aus unbekanntem Grund sonst Unterordner eines Ordners, der mit "_" beginnt, nicht gefunden werden können
[System.Object[]]$UnterOrdner = UnterOrdnerFinden $Pfad
$TxtDateien = TxtDateienFinden $Pfad
#Gibt aktuell auch Index und Typ (System.IO.DirectoryInfo bzw. System.String) zurück
$Optionen = $UnterOrdner + $TxtDateien
return $Optionen
}
Function TXTReaktionReturn ($Pfad)
{
if (PfadExistiert $Pfad)
{
# Gültiger Pfad oder .txt-Datei
$PfadEnde = $(Split-Path $Pfad -Leaf)
if ($($PfadEnde -match ".txt"))
{
#$Fenster.Dispose()
ZuVERSpringen
# Ist zwar sachlich gesehen unsinn, aber sonst funktioniert Return in der GUI nicht richtig
$TXTPfadFeld.Text = $Pfad
return
}
else
{
TXTAnzeigeAktualisieren $Pfad
}
}
else
{
# Laufwerke aktualisieren oder ungültiger Pfad
TXTAnzeigeAktualisieren ""
}
return
}
#------------------- Funktionen nur für das VerzeichnisWaehlen-GUI --------------------------
# Bekommt Pfad, stellt fest ob Laufwerke oder Ordner angezeigt werden müssen und aktualisiert entsprechend alles
# Für Laufwerke muss $Pfad = "" sein
Function VERAnzeigeAktualisieren ($Pfad)
{
# Write-Host "Übergebener Pfad: " $Pfad
# Sicherstellen, dass es das Verzeichnis gibt
if ($($Pfad -eq "") -or $(PfadExistiert $Pfad))
{
# Feststellen, ob Ordner oder Laufwerke angezeigt werden müssen
if ($Pfad.Length -ne "")
{
# Es handelt sich um Ordner
$Optionen = VEROptionen $Pfad
#$Fenster.Text = $(Split-Path $Pfad -Leaf)
}
elseif ($Pfad.Length -eq "")
{
# Es handelt sich um Laufwerke
$Optionen = LaufwerkeFinden
$Pfad = ""
#$Fenster.Text = "Laufwerke"
}
else
{
Write-Host "Fehler bei Anzeige aktualisieren"
# Fehler(?)
}
$VERPfadFeld.Text = $Pfad
$VERListeOrdnernamen.Items.Clear()
foreach ($Option in $Optionen)
{
if ($Option.Length -gt 0)
{
$VERListeOrdnernamen.Items.Add($Option)
}
}
}
else
{
VERAnzeigeAktualisieren ""
}
return
}
Function VERVerzeichnisAuswaehlen ($Pfad, $Auswahl)
{
#Falls nicht aktiv ein Eintrag ausgewählt wurde, den obersten wählen
<#if ($Auswahl.length -eq 0)
{
$Auswahl = $VERListeOrdnernamen.Items[0]
}#>
if ($Pfad.length -gt 0)
{
$Pfad = Join-Path -Path $Pfad -ChildPath $Auswahl -Resolve
}
else
{
$Pfad = $Auswahl
}
VERAnzeigeAktualisieren $Pfad
return
}
Function VERVerzeichnisZurueck ($Pfad)
{
if ($Pfad.Length -gt 3)
{
# Weiter mit Ordnern
# Write-Host "Ordner anzeigen"
$Pfad = Split-Path $Pfad
}
elseif ($Pfad.Length -le 3)
{
# Weiter mit Laufwerken
# Write-Host "Laufwerke anzeigen"
$Pfad = ""
}
else
{
Write-Host "Fehler bei Verzeichnis zurueck"
# Fehler/ Nichts tun?
# Ermitteln: wann tritt dieser Fall ein?
}
VERAnzeigeAktualisieren $Pfad
return
}
Function VERTastenReaktionPfadFeld($Taste)
{
# Write-Host "Übergebene Taste: " $Taste
switch ($Taste){
"Return" {
# Write-Host "Enter gedrückt"
$Pfad = $VERPfadFeld.Text
# Write-Host "Pfad: " $Pfad
# Es muss nicht überprüft werden, ob es das Verzeichnis gibt, da dies auch in VERAnzeigeAktualisieren gemacht wird
VERAnzeigeAktualisieren $Pfad
}
"ShiftKey" {
$Pfad = $VERPfadFeld.Text
$Auswahl = $VERListeOrdnernamen.SelectedItem
# Falls nicht aktiv ein Eintrag gewählt wurde, in den obersten navigieren
<#if ($($Auswahl.length -eq 0))
{
$Auswahl = $VERListeOrdnernamen.Items[0]
}#>
ReaktionShiftKey $Pfad $Auswahl
}
default {
# Write-Host "Gedrückte Taste: " $Taste
}
}
return
}
Function VERTastenReaktionListeOrdnernamen($Taste)
{
# Write-Host "Übergebene Taste: " $Taste
switch ($Taste){
"Return" {
# Write-Host "Enter gedrückt"
$Auswahl = $VERListeOrdnernamen.SelectedItem
<#if ($($Auswahl.Length -eq 0))
{
$Auswahl = $VERListeOrdnernamen.Items[0]
}#>
$Pfad = $VERPfadFeld.Text
# Write-Host "Auswahl: " $Auswahl
# Write-Host "Pfad: " $Pfad
VERVerzeichnisAuswaehlen $Pfad $Auswahl
}
"Back" {
# Write-Host "Back gedrückt"
$Pfad = $VERPfadFeld.Text
# Write-Host "Pfad: " $Pfad
# Pfad aktualisieren
VERVerzeichnisZurueck $Pfad
}
"ShiftKey" {
$Pfad = $VERPfadFeld.Text
$Auswahl = $VERListeOrdnernamen.SelectedItem
# Falls nicht aktiv ein Eintrag gewählt wurde, in den obersten navigieren
<#if ($($Auswahl.length -eq 0))
{
$Auswahl = $VERListeOrdnernamen.Items[0]
}#>
ReaktionShiftKey $Pfad $Auswahl
}
default {
# Write-Host "Gedrückte Taste: " $Taste
}
}
return
}
Function VERTastenReaktionButtons($Taste)
{
# Write-Host "Übergebene Taste: " $Taste
switch ($Taste){
"Back" {
# Write-Host "Back gedrückt"
$Pfad = $VERPfadFeld.Text
# Write-Host "Pfad: " $Pfad
# Pfad aktualisieren
VERVerzeichnisZurueck $Pfad
}
"ShiftKey" {
$Pfad = $VERPfadFeld.Text
$Auswahl = $VERListeOrdnernamen.SelectedItem
# Falls nicht aktiv ein Eintrag gewählt wurde, in den obersten navigieren
<#if ($($Auswahl.length -eq 0))
{
$Auswahl = $VERListeOrdnernamen.Items[0]
}#>
ReaktionShiftKey $Pfad $Auswahl
}
default {
# Write-Host "Gedrückte Taste: " $Taste
}
}
return
}
Function VEROptionen($Pfad)
{
# Unterordner und .txt-Dateien finden
# Typzuweisung nötig, da aus unbekanntem Grund sonst Unterordner eines Ordners, der mit "_" beginnt, nicht gefunden werden können
[System.Object[]]$UnterOrdner = UnterOrdnerFinden $Pfad
# $TxtDateien = TxtDateienFinden $Pfad
#Gibt aktuell auch Index und Typ (System.IO.DirectoryInfo bzw. System.String) zurück
$Optionen = $UnterOrdner
return $Optionen
}
Function VERAuswahlBestaetigt($Pfad, $Auswahl)
{
$Pfad = Join-Path -Path $Pfad -ChildPath $Auswahl -Resolve
if (PfadExistiert $Pfad)
{
#Write-Host "Pfad zur Rückgabe: " $Pfad
#$Fenster.Dispose()
ZuFASpringen
$VERPfadfeld.Text = $Pfad
return
}
}
#------------------- Funktionen für alle GUIs --------------------------
Function PfadExistiert ($Pfad)
{
if ($(Test-Path $Pfad -PathType Container) -or $(Test-Path $Pfad -Include "*.txt"))
{
# Write-Host "Bei dem Verzeichnis handelt es sich um eine *.txt-Datei oder ein gültiges Verzeichnis"
return $true
}
else
{
# Write-Host "Das Verzeichnis existiert nicht oder es wurde keine *.txt-Datei gewählt"
return $false
}
}
Function LaufwerkeFinden()
{
$Laufwerke = $(Get-PSDrive | Where-Object {$_.Free}).Name
$i = 0
foreach($Laufwerk in $Laufwerke)
{
$Laufwerke[$i] = $Laufwerk + ":\"
$i++
}
return $Laufwerke
}
Function UnterOrdnerFinden($Pfad)
{
# Write-Host "Ordner zum suchen von Unterordnern: " $Pfad
$UnterOrdner = $(Get-ChildItem $Pfad -Directory)
# Write-Host "Gefundene Unterordner: " $UnterOrdner
if ($($UnterOrdner.Length -gt 0))
{
$Ordner = $(Split-Path $UnterOrdner -Leaf)
}
else {
$Ordner = ""
}
# Write-Host "Gefundene Ordner: " $Ordner
return $Ordner
}
Function TxtDateienFinden($Pfad)
{
$TxtDateien = $(Get-Childitem $Pfad\*.txt)
if ($TxtDateien.Length -gt 0)
{
return $(Split-Path $TxtDateien -Leaf)
}
else
{
return
}
}
Function ReaktionShiftKey ($Pfad, $Auswahl)
{
if (PfadExistiert $Pfad)
{
VERAuswahlBestaetigt $Pfad $Auswahl
}
else
{
VERAnzeigeAktualisieren ""
}
return
}
Function ZuVERSpringen
{
VERAnzeigeAktualisieren $TXTPfadFeld.Text
AufgabenAktualisieren "Zielverzeichnis auswaehlen"
Write-Host "Gewaehlte txt-Datei: " $TXTPfadFeld.Text
$TabBasis.SelectedIndex = 1
}
Function ZuFASpringen
{
AufgabenAktualisieren "Zieldateinamen erstellen"
Write-Host "Gewaehltes Verzeichnis: " $VERPfadFeld.Text
$TabBasis.SelectedIndex = 2
#Hier Logische Berechnungen einfügen
$PfadUrsprungsdatei = $TXTPfadFeld.Text
$PfadZielDateien = $VERPfadFeld.Text
$PfadDateiEA = ExcelDateiNameErstellen "EA" $PfadUrsprungsdatei $PfadZielDateien
$PfadDateiDIDQ = ExcelDateiNameErstellen "DIDQ" $PfadUrsprungsdatei $PfadZielDateien
AufgabenAktualisieren "Neue Excel-Dateien erstellen"
ExcelDateiErstellen $PfadDateiEA
ExcelDateiErstellen $PfadDateiDIDQ
AufgabenAktualisieren "Excel-Dateien mit Inhalten befuellen und Duplikate finden"
$AlleGleichenEA = ExcelDateiBeschreibenStandard $PfadUrsprungsdatei "E" "A" $PfadDateiEA
$AlleGleichenDIDQ = ExcelDateiBeschreibenSpezial $PfadUrsprungsdatei "%I" "%Q" $PfadDateiDIDQ
#Write-Host "Gleiche EA nach Rückgabe: " $AlleGleichenEA
$GleicheEingaenge = $AlleGleichenEA[0]
$GleicheAusgaenge = $AlleGleichenEA[1]
$Fehler = $AlleGleichenEA[2]
Write-Host "Gleiche Eingaenge: " $GleicheEingaenge
Write-Host "Gleiche Ausgaenge: " $GleicheAusgaenge
Write-Host "Fehler: " $Fehler
AufgabenAktualisieren "Ausgabe Duplikate"
ZuDPSpringen $GleicheEingaenge $GleicheAusgaenge $Fehler
}
Function ZuDPSpringen ($GleicheEingaenge, $GleicheAusgaenge, $Fehler)
{
foreach ($GleichenEingang in $GleicheEingaenge) {
$DPListeEingaenge.Rows.Add($($GleichenEingang.Zeile),($GleichenEingang.Name))
}
foreach ($GleichenAusgang in $GleicheAusgaenge) {
$DPListeAusgaenge.Rows.Add($($GleichenAusgang.Zeile),($GleichenAusgang.Name))
}
foreach ($Fehlen in $Fehler) {
$DPListeFehler.Rows.Add($($Fehlen.Zeile),($Fehlen.Name))
}
$TabBasis.SelectedIndex = 3
}
Function AufgabenAktualisieren ($Aufgabe)
{
$FAListeErledigteAufgaben.Items.Add($FATextfeldAktuelleAufgabe.Text)
$FATextfeldAktuelleAufgabe.Text = $Aufgabe
}
Function DateiBeschreibenAktualisieren
{
$AnteilJeBeschriftung = 100 / $($FATextfeldGesamtEintraege.Text)
[System.double] $FATextfeldRealwertFortschrittsbar.Text += $AnteilJeBeschriftung
#Known issue: Die Fortschrittsbar springt immer wieder kurzteitig auf 100%
#Da $FAFortschrittsbar.Value anscheinend ein int ist, ist der letzte Wert i. d. R. höher als 100 -> Fehler, der hiermit umgangen wird
if ( $($FATextfeldRealwertFortschrittsbar.Text -lt 100) )
{
$FAFortschrittsbar.Value = 100
}
else
{
$FAFortschrittsbar.Value = $FATextfeldRealwertFortschrittsbar.Text
}
[System.Int64] $BearbeiteteEintraege = $FATextfeldBearbeiteteEintraege.Text
$BearbeiteteEintraege++
$FATextfeldBearbeiteteEintraege.Text = $BearbeiteteEintraege
}
#--------------------------------------- Ende Funktionen für GUI -------------------------------
Function ExcelDateiNameErstellen ($Prefix, $PfadUrsprungsdatei, $PfadZielDatei)
{
$BasisNameZielDatei = Split-Path $PfadUrsprungsdatei -Leaf
$BasisNameZielDateiLaenge = $BasisNameZielDatei.Length
$BasisNameZielDateiKurz = $BasisNameZielDatei.Substring(0, $($BasisNameZielDateiLaenge - 4))
$GesamtPfadZielDatei = $PfadZielDatei + "\" + $Prefix + "_" + $BasisNameZielDateiKurz + ".xlsx"
return $GesamtPfadZielDatei
}
Function ExcelDateiErstellen ($DateiPfad)
{
$Datei = New-Object -ComObject Excel.Application
$Mappe = $Datei.Workbooks.Add()
$Mappe.SaveAs($DateiPfad)
$Datei.Quit()
return
}
Function ExcelDateiBeschreibenStandard ($PfadUrsprungsdatei, $Umwandler1, $Umwandler2, $ZielDatei)
{
$Datei = New-Object -ComObject Excel.Application
$Mappe = $Datei.Workbooks.Open($ZielDatei)
$Blatt = $Mappe.WorkSheets.item(1)
$Datei.Visible = $false
$i = 1
$Wandler1 = @()
$ZuWandler1 = @("DI", "BA", "BB", "BC", "BD", "BE", "BF", "BG", "BH", "BJ", "BK", "BL", "BM", "BN", "BP", "BQ", "BR", "BS", "BT", "BU", "BV", "BW", "BX", "BY", "BZ", "FA", "FB", "FC", "FD", "FE", "FF", "FG", "FH", "FJ", "FK", "FL", "FM", "FN", "FP", "FQ", "FR", "FS", "FT", "FU", "FV", "FW", "FX", "FY", "FZ", "SA", "SB", "SC", "SD", "SE", "SF", "SG", "SH", "SJ", "SK", "SL", "SM", "SN", "SP", "SQ", "SR", "SS", "ST", "SU", "SV", "SW", "SX", "SY", "SZ")
$Wandler2 = @()
$ZuWandler2 = @("DQ", "CA", "CB", "CC", "CD", "CE", "CF", "CG", "CH", "CJ", "CK", "CL", "CM", "CN", "CP", "CQ", "CR", "CS", "CT", "CU", "CV", "CW", "CX", "CY", "CZ", "EA", "EB", "EC", "ED", "EE", "EF", "EG", "EH", "EJ", "EK", "EL", "EM", "EN", "EP", "EQ", "ER", "ES", "ET", "EU", "EV", "EW", "EX", "EY", "EZ", "GA", "GB", "GC", "GD", "GE", "GF", "GG", "GH", "GJ", "GK", "GL", "GM", "GN", "GP", "GQ", "GR", "GS", "GT", "GU", "GV", "GW", "GX", "GY", "GZ", "HA", "HB", "HC", "HD", "HE", "HF", "HG", "HH", "HJ", "HK", "HL", "HM", "HN", "HP", "HQ", "HR", "HS", "HT", "HU", "HV", "HW", "HX", "HY", "HZ", "KA", "KB", "KC", "KD", "KE", "KF", "KG", "KH", "KJ", "KK", "KL", "KM", "KN", "KP", "KQ", "KR", "KS", "KT", "KU", "KV", "KW", "KX", "KY", "KZ", "MA", "MB", "MC", "MD", "ME", "MF", "MG", "MH", "MJ", "MK", "ML", "MM", "MN", "MP", "MQ", "MR", "MQ", "MR", "MS", "MT", "MU", "MV", "MW", "MX", "MY", "MZ", "PA", "PB", "PC", "PD", "PE", "PF", "PG", "PH", "PJ", "PK", "PL", "PM", "PN", "PP", "PQ", "PR", "PS", "PT", "PU", "PV", "PW", "PX", "PY", "PZ", "QA", "QB", "QC", "QD", "QE", "QF", "QG", "QH", "QJ", "QK", "QL", "QM", "QN", "QP", "QQ", "QR", "QS", "QT", "QU", "QV", "QW", "QX", "QY", "QZ", "RA", "RB", "RC", "RD", "RE", "RF", "RG", "RH", "RJ", "RK", "RL", "RM", "RN", "RP", "RQ", "RR", "RS", "RT", "RU", "RV", "RW", "RX", "RY", "RZ", "TA", "TB", "TC", "TD", "TE", "TF", "TG", "TH", "TJ", "TK", "TL", "TM", "TN", "TP", "TQ", "TR", "TS", "TT", "TU", "TV", "TW", "TX", "TY", "TZ")
$Fehler = @()
$Ursprungdatei = Get-Content $PfadUrsprungsdatei
foreach ($Eintrag in $Ursprungdatei)
{
$Eintragszeile = $Eintrag.Split("'")
$BMKZahl = $Eintragszeile[1]
$BMKZahl = $BMKZahl.TrimStart("'")
$Kommentar = $Eintragszeile[3]
$Kommentar = $Kommentar.TrimEnd("'")
if ($($($BMKZahl.Substring(0,2)) -in $ZuWandler1))
{
$BMKZahl = $BMKZahl -replace("[a-zA-Z]","")
$BMKZahlLaenge = $($BMKZahl.Length - 1)
$BMKZahl = $BMKZahl.Substring(0,$BMKZahlLaenge) + "." + $BMKZahl.Substring($BMKZahlLaenge)
$BMKZahl = $Umwandler1 + $BMKZahl
$Wandler1 += @([PSCustomObject]@{
Name = $BMKZahl
Zeile = $i
})
}
elseif ($($($BMKZahl.Substring(0,2)) -in $ZuWandler2))
{
$BMKZahl = $BMKZahl -replace("[a-zA-Z]","")
$BMKZahlLaenge = $($BMKZahl.Length - 1)
$BMKZahl = $BMKZahl.Substring(0,$BMKZahlLaenge) + "." + $BMKZahl.Substring($BMKZahlLaenge)
$BMKZahl = $Umwandler2 + $BMKZahl
$Wandler2 += @([PSCustomObject]@{
Name = $BMKZahl
Zeile = $i
})
}
else
{
Write-Host "Achtung, Fehler bei " $BMKZahl $Kommentar
$Fehler += @([PSCustomObject]@{
Name = $BMKZahl
Zeile = $i
})
}
# Write-Host "In Excel schreiben: BMKZahl: " $BMKZahl " Kommentar: " $Kommentar
$Blatt.Cells.Item($i,1) = $BMKZahl
$Blatt.Cells.Item($i,2) = $Kommentar
$i++
DateiBeschreibenAktualisieren
}
$Mappe.Save()
$Datei.Quit()
$GleicheWandler1 = GleicheFinden $Wandler1
$GleicheWandler2 = GleicheFinden $Wandler2
Write-Host "Gleiche fuer " $Umwandler1 ": " $GleicheWandler1
Write-Host "Gleiche fuer " $Umwandler2 ": " $GleicheWandler2
Write-Host "Fehler bei: " $Fehler
if ( $($Fehler.Length -eq 0))
{
$Fehler += @([PSCustomObject]@{
Name = "Keine"
Zeile = "Alle"
})
}
return $GleicheWandler1, $GleicheWandler2, $Fehler
}
Function ExcelDateiBeschreibenSpezial ($PfadUrsprungsdatei, $Umwandler1, $Umwandler2, $ZielDatei)
{
$Datei = New-Object -ComObject Excel.Application
$Mappe = $Datei.Workbooks.Open($ZielDatei)
$Blatt = $Mappe.WorkSheets.item(1)
$Datei.Visible = $false
$i = 2
$Wandler1 = @()
$ZuWandler1 = @("DI", "BA", "BB", "BC", "BD", "BE", "BF", "BG", "BH", "BJ", "BK", "BL", "BM", "BN", "BP", "BQ", "BR", "BS", "BT", "BU", "BV", "BW", "BX", "BY", "BZ", "FA", "FB", "FC", "FD", "FE", "FF", "FG", "FH", "FJ", "FK", "FL", "FM", "FN", "FP", "FQ", "FR", "FS", "FT", "FU", "FV", "FW", "FX", "FY", "FZ", "SA", "SB", "SC", "SD", "SE", "SF", "SG", "SH", "SJ", "SK", "SL", "SM", "SN", "SP", "SQ", "SR", "SS", "ST", "SU", "SV", "SW", "SX", "SY", "SZ")
$Wandler2 = @()
$ZuWandler2 = @("DQ", "CA", "CB", "CC", "CD", "CE", "CF", "CG", "CH", "CJ", "CK", "CL", "CM", "CN", "CP", "CQ", "CR", "CS", "CT", "CU", "CV", "CW", "CX", "CY", "CZ", "EA", "EB", "EC", "ED", "EE", "EF", "EG", "EH", "EJ", "EK", "EL", "EM", "EN", "EP", "EQ", "ER", "ES", "ET", "EU", "EV", "EW", "EX", "EY", "EZ", "GA", "GB", "GC", "GD", "GE", "GF", "GG", "GH", "GJ", "GK", "GL", "GM", "GN", "GP", "GQ", "GR", "GS", "GT", "GU", "GV", "GW", "GX", "GY", "GZ", "HA", "HB", "HC", "HD", "HE", "HF", "HG", "HH", "HJ", "HK", "HL", "HM", "HN", "HP", "HQ", "HR", "HS", "HT", "HU", "HV", "HW", "HX", "HY", "HZ", "KA", "KB", "KC", "KD", "KE", "KF", "KG", "KH", "KJ", "KK", "KL", "KM", "KN", "KP", "KQ", "KR", "KS", "KT", "KU", "KV", "KW", "KX", "KY", "KZ", "MA", "MB", "MC", "MD", "ME", "MF", "MG", "MH", "MJ", "MK", "ML", "MM", "MN", "MP", "MQ", "MR", "MQ", "MR", "MS", "MT", "MU", "MV", "MW", "MX", "MY", "MZ", "PA", "PB", "PC", "PD", "PE", "PF", "PG", "PH", "PJ", "PK", "PL", "PM", "PN", "PP", "PQ", "PR", "PS", "PT", "PU", "PV", "PW", "PX", "PY", "PZ", "QA", "QB", "QC", "QD", "QE", "QF", "QG", "QH", "QJ", "QK", "QL", "QM", "QN", "QP", "QQ", "QR", "QS", "QT", "QU", "QV", "QW", "QX", "QY", "QZ", "RA", "RB", "RC", "RD", "RE", "RF", "RG", "RH", "RJ", "RK", "RL", "RM", "RN", "RP", "RQ", "RR", "RS", "RT", "RU", "RV", "RW", "RX", "RY", "RZ", "TA", "TB", "TC", "TD", "TE", "TF", "TG", "TH", "TJ", "TK", "TL", "TM", "TN", "TP", "TQ", "TR", "TS", "TT", "TU", "TV", "TW", "TX", "TY", "TZ")
$Fehler = @()
$Blatt.Cells.Item(1,1) = "Name"
$Blatt.Cells.Item(1,2) = "Path"
$Blatt.Cells.Item(1,3) = "Data Type"
$Blatt.Cells.Item(1,4) = "Logical Address"
$Blatt.Cells.Item(1,5) = "Comment"
$Blatt.Cells.Item(1,6) = "Hmi Visible"
$Blatt.Cells.Item(1,7) = "Hmi Accessible"
$Blatt.Cells.Item(1,8) = "Hmi Writeable"
$Blatt.Cells.Item(1,9) = "Typeobject ID"
$Blatt.Cells.Item(1,10) = "Version ID"
$Ursprungdatei = Get-Content $PfadUrsprungsdatei
foreach ($Eintrag in $Ursprungdatei)
{
$Eintragszeile = $Eintrag.Split("'")
$BMKZahl = $Eintragszeile[1]
$BMKZahl = $BMKZahl.TrimStart("'")
$Kommentar = $Eintragszeile[3]
$Kommentar = $Kommentar.TrimEnd("'")
if ($($($BMKZahl.Substring(0,2)) -in $ZuWandler1))
{
$BMKZahl = $BMKZahl -replace("[a-zA-Z]","")
$BMKZahlLaenge = $($BMKZahl.Length - 1)
$BMKZahl = $BMKZahl.Substring(0,$BMKZahlLaenge) + "." + $BMKZahl.Substring($BMKZahlLaenge)
$BMKZahl = $Umwandler1 + $BMKZahl
$Wandler1 += @([PSCustomObject]@{
Name = $BMKZahl
Zeile = $i
})
}
elseif ($($($BMKZahl.Substring(0,2)) -in $ZuWandler2))
{
$BMKZahl = $BMKZahl -replace("[a-zA-Z]","")
$BMKZahlLaenge = $($BMKZahl.Length - 1)
$BMKZahl = $BMKZahl.Substring(0,$BMKZahlLaenge) + "." + $BMKZahl.Substring($BMKZahlLaenge)
$BMKZahl = $Umwandler2 + $BMKZahl
$Wandler2 += @([PSCustomObject]@{
Name = $BMKZahl
Zeile = $i
})
}
else
{
Write-Host "Achtung, Fehler bei " $BMKZahl $Kommentar
$BMKZahlLaenge = $($BMKZahl.Length - 1)
$BMKZahl = $BMKZahl.Substring(0,$BMKZahlLaenge) + "." + $BMKZahl.Substring($BMKZahlLaenge)
$Fehler += @([PSCustomObject]@{
Name = $BMKZahl
Zeile = $i
})
}
#Write-Host "In Excel schreiben: BMKZahl: " $BMKZahl " Kommentar: " $Kommentar
$Blatt.Cells.Item($i,1) = $Kommentar #Name
$Blatt.Cells.Item($i,2) = "Standard-Variablentabelle" #Path
$Blatt.Cells.Item($i,3) = "Bool" #Data Type
$Blatt.Cells.Item($i,4) = $BMKZahl #Logical Address
#$Blatt.Cells.Item($i,5) = "" #Comment
$Blatt.Cells.Item($i,6) = "'True" #Hmi Visible
$Blatt.Cells.Item($i,7) = "'True" #Hmi Accessible
$Blatt.Cells.Item($i,8) = "'True" #Hmi Writeable
#$Blatt.Cells.Item($i,9) = "" #Typeobject ID
#$Blatt.Cells.Item($i,10) = "" #Version ID
$i++
DateiBeschreibenAktualisieren
}
$Mappe.Save()
$Datei.Quit()
$GleicheWandler1 = GleicheFinden $Wandler1
$GleicheWandler2 = GleicheFinden $Wandler2
Write-Host "Gleiche fuer " $Umwandler1 ": " $GleicheWandler1
Write-Host "Gleiche fuer " $Umwandler2 ": " $GleicheWandler2
Write-Host "Fehler bei: " $Fehler
if ( $($Fehler.Length -eq 0))
{
$Fehler += @([PSCustomObject]@{
Name = "Keine"
Zeile = "Alle"
})
}
return $GleicheWandler1, $GleicheWandler2, $Fehler
}
Function GleicheFinden ($ZuUeberpruefen)
{
$ZuUeberpruefen = $ZuUeberpruefen | Sort-Object "Name"
$Gleiche = @()
for ($i = 0; $i -lt $($ZuUeberpruefen.Count - 1); $i++)
{
$IstGleich = $($ZuUeberpruefen[$i].Name -eq $ZuUeberpruefen[$($i+1)].Name)
if ($IstGleich)
{
# Eintrag hinzufügen
if (-not $($Gleiche[-1].Zeile -eq $ZuUeberpruefen[$i].Zeile))
{
$Gleiche += $ZuUeberpruefen[$i]
}
$Gleiche += $ZuUeberpruefen[$($i+1)]
#Write-Host "Gleiche: " $Gleiche
}
}
if ( $($Gleiche.Length -eq 0))
{
$Gleiche += @([PSCustomObject]@{
Name = "Keine"
Zeile = "Alle"
})
}
return $Gleiche
}
Main