playmen
Goto Top

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

Content-ID: 266514

Url: https://administrator.de/contentid/266514

Ausgedruckt am: 25.11.2024 um 21:11 Uhr

StefanKittel
StefanKittel 17.03.2015 um 08:51:53 Uhr
Goto Top
Hallo,

ich würde das mit VB, vieleicht sogar mit VBA, machen.
Damit kann man viel einfacher auf die Inhalte zugreifen.

Stefan
colinardo
colinardo 17.03.2015 aktualisiert um 09:58:55 Uhr
Goto Top
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:
# 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
Grüße Uwe
playmen
playmen 17.03.2015 um 11:32:35 Uhr
Goto Top
Hallo Uwe

Danke für deine schnelle Antwort!

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?

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?

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".

Danke
colinardo
colinardo 17.03.2015 aktualisiert um 11:44:05 Uhr
Goto Top
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:
$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 ...
$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 ?
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 face-wink Die ist dafür die Grundlage für eine Entwicklung mit Powershell.

Grüße Uwe
playmen
playmen 17.03.2015 um 11:44:59 Uhr
Goto Top
Danke dir viel mals

Du hast recht. Du hast mir sehr viel geholfen.

Werde es Heute Nachmittag mal anschauen.

Guten Appetit face-smile