Mit Powershell Excel Dokumente zusammenführen und ein Word daraus erstellen
Hallo Leute
Ich habe ein kleines Problem:
Ich habe von meiner Firma den Auftrag ein Powershell Skript zu erstellen welches z.B. in ein Beliebiges Verzeichnis (welches Excel Dokumente beinhaltet) gelegt wird und von da aus ausgeführt wird.
Das Skript soll automatisch den Aktuellen Pfad erkennen (was auch klappt) und danach wie eine Analyse der einzelnen Excel Dokumenten machen.
Die Excel Dokumente sehen alle gleich aus (Formatierung) in der 1. Spalte z.B. ist das Datum, in der 2. das Prüfkriterium usw..
in der 6. und letzten Spalte befindet sich die Spalte "Erforderliche Maßnahmen".
Foto:
http://img4.fotos-hochladen.net/uploads/unbenanntmgcpk0xv6o.png
Das Komplizierte ist nun das die Dokumente nur zusammengeführt werden sollen wenn ein Wert bei "Erforderliche Maßnahmen" steht.
Also der Techniker speichert das Excel ausgefüllt und führt dann das Skript aus welches in ein Word Dokument nur die Zeile wo ein Wert bei Erforderliche Massnahmen steht.
Beispiel:
http://img4.fotos-hochladen.net/uploads/unbenannt29znj6igt5k.png
In dem Fall sollte in dem Word Dokument nur stehen:
Fehler beim Prüfkriterium "TEST", Sollstatus wurde nicht erreicht. Erforderliche Massnahmen sind "Reboot"
Hoffentlich ist es nicht zu kompliziert.
MFG
Ich habe ein kleines Problem:
Ich habe von meiner Firma den Auftrag ein Powershell Skript zu erstellen welches z.B. in ein Beliebiges Verzeichnis (welches Excel Dokumente beinhaltet) gelegt wird und von da aus ausgeführt wird.
Das Skript soll automatisch den Aktuellen Pfad erkennen (was auch klappt) und danach wie eine Analyse der einzelnen Excel Dokumenten machen.
Die Excel Dokumente sehen alle gleich aus (Formatierung) in der 1. Spalte z.B. ist das Datum, in der 2. das Prüfkriterium usw..
in der 6. und letzten Spalte befindet sich die Spalte "Erforderliche Maßnahmen".
Foto:
http://img4.fotos-hochladen.net/uploads/unbenanntmgcpk0xv6o.png
Das Komplizierte ist nun das die Dokumente nur zusammengeführt werden sollen wenn ein Wert bei "Erforderliche Maßnahmen" steht.
Also der Techniker speichert das Excel ausgefüllt und führt dann das Skript aus welches in ein Word Dokument nur die Zeile wo ein Wert bei Erforderliche Massnahmen steht.
Beispiel:
http://img4.fotos-hochladen.net/uploads/unbenannt29znj6igt5k.png
In dem Fall sollte in dem Word Dokument nur stehen:
Fehler beim Prüfkriterium "TEST", Sollstatus wurde nicht erreicht. Erforderliche Massnahmen sind "Reboot"
Hoffentlich ist es nicht zu kompliziert.
MFG
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 266514
Url: https://administrator.de/contentid/266514
Ausgedruckt am: 25.11.2024 um 21:11 Uhr
5 Kommentare
Neuester Kommentar
Hallo zusammen,
ist eigentlich Jacke wie Hose ob VB/VBA oder Powershell, geht ja sowieso alles über COM-Objekte.
Der einzige Nachteil mit Powershell ist das es etwas langsamer im Zusammenhang mit COM-Automation in Office ist, und man bei der Entwicklung ein paar Fallstricke kennen muss.
Mit Powershell( PS v. 3.0) sähe dein Vorhaben in etwa so aus:
Grüße Uwe
ist eigentlich Jacke wie Hose ob VB/VBA oder Powershell, geht ja sowieso alles über COM-Objekte.
Der einzige Nachteil mit Powershell ist das es etwas langsamer im Zusammenhang mit COM-Automation in Office ist, und man bei der Entwicklung ein paar Fallstricke kennen muss.
Mit Powershell( PS v. 3.0) sähe dein Vorhaben in etwa so aus:
# Scriptverzeichnis
$curDir = Split-Path $PSCommandPath -Parent
$objExcel = New-Object -Com "Excel.Application"
# Array hält die Texte für Word
$arrWordText = @()
# Für jedes Excel-Dokument im Script-Verzeichnis
gci $curDir -Filter "*.xlsx" | %{
$wb = $objExcel.Workbooks.Open($_.Fullname)
$ws = $wb.Worksheets.Item(1)
$rngUsed = $ws.Range("A3:F" + $ws.UsedRange.SpecialCells(11).Row)
$rngUsed.AutoFilter(6,"<>") | out-null
$rngUsed.Offset(1,0).SpecialCells(12).Rows | %{
if($_.Cells.Item(1).text -ne ""){
$arrWordText += "Fehler beim Prüfkriterium '$($_.Cells.Item(2).text)', Sollstatus wurde nicht erreicht. Erforderliche Massnahmen sind '$($_.Cells.Item(6).text)'"
}
}
$wb.Close($false) | out-null
}
$objExcel.Quit() | out-null
[System.Runtime.InteropServices.Marshal]::ReleaseComObject($objExcel)
$objWord = New-Object -Com "Word.Application"
$doc = $objWord.Documents.Add()
$doc.Content.Text = ($arrWordText | out-string)
$objWord.Visible = $true
Zitat von @playmen:
Frage: Das Powershell Skript befindet sich jeweils in einem Ordner welcher den Server angibt z.B. SRV001 kann man den Test welcher
im Word ausgegeben wird noch anpassen das, dass Skript noch überprüft in welchem Ordner es sich Befindet?
Sicher, Powershell-Grundlagen zur String-Extrahierung:Frage: Das Powershell Skript befindet sich jeweils in einem Ordner welcher den Server angibt z.B. SRV001 kann man den Test welcher
im Word ausgegeben wird noch anpassen das, dass Skript noch überprüft in welchem Ordner es sich Befindet?
$dirname = Split-Path $PSCommandPath -Leaf
Ist es auchnoch möglich wenn ich in einem einzigen Feld z.b. immer "A1" in Excel den Funktionsnamen z.B. Exchange,
Backup uws.. eintrage das dieses Feld dann auch in die Ausgabe kommt?
Sicher. Schreibst du dir so in eine Variable, und kannst du in der Ausgabe entsprechend einbauen ...Backup uws.. eintrage das dieses Feld dann auch in die Ausgabe kommt?
$wert = $ws.Range("A1").value2
die Meldung sollte dann so aussehen:
Fehler am Server: "Ordnername z.B. SRV001", Funktion "Backup" beim Prüfkriterium "Wert
Prüfkriterium", Sollstatus nicht erreicht. Erforderliche Massnahmen "Massnahmen".
Schreibe ich das Script oder du ?Fehler am Server: "Ordnername z.B. SRV001", Funktion "Backup" beim Prüfkriterium "Wert
Prüfkriterium", Sollstatus nicht erreicht. Erforderliche Massnahmen "Massnahmen".
Ich habe dir ja nun schon mal eine schöne Vorlage geliefert. Eine Anpassung ist da ja nur noch eine Kleinigkeit. Es bringt ja nichts wenn ich dir hier etwas abnehme und du dabei nichts lernst.
Also Hausaufgabe bis Morgen auch mal etwas in die VBA-Hilfe von Excel schauen Die ist dafür die Grundlage für eine Entwicklung mit Powershell.
Grüße Uwe