none
2-Objekte-Array in Excel Tabelle einfügen

    Frage

  • Hallo zusammen,

    ich sitze hier an einem Skript, welches zum Reporting alle Benutzer und deren dazugehörige Email-Adresse auslesen soll und diese dann wiederum in eine Excel Tabelle schreiben soll.

    Nun funktioniert das auslesen wunderbar, jedoch hänge ich an dem reinschreiben in die Excel Tabelle.

    Hierzu mein code:

    #---------------------------- Benutzer Aufzählung ----------------------------
    
    Add-PSSnapIn ShareFile
    #Add-Type -Path ''
    #New-SfClient -Name "C:\Test\MySubdomain.sfps"
    #$sfClient = Get-SfClient –Name "C:\Test\MySubdomain.sfps"
    
    $Date = Get-Date -Format dd.MM.yyyy
    
    
    $sfUsers = Send-SfRequest -Client $sfClient -Entity Accounts\Employees -Expand Security
    $sfEmployees = Send-SFRequest -Client $sfClient -Entity Accounts/Employees -Expand "User,User/DefaultZone"
    
    
    
    $fileOutput =@()
    
    foreach($sfEmployee in $sfEmployees) {
        $fileOutput += New-Object PSObject -Property @{'FullName'=$sfEmployee.User.FullName; 'Email'=$sfEmployee.User.Email}
        }
        
    
    #---------------------------- Anzahl hat alle Benutzer/Mails ----------------------------
    $Zahl = 0
    $Benutzer = @()
    for($i = 0; $i -lt $fileOutput.Email.Length; $i++){
        if ($fileOutput.Email[$i] -like "*.de") {
            $Benutzer += $fileOutput[$i]    
            $Zahl++
        }
    }
    
    
    #---------------------------- Excel Eintragung ----------------------------
    
    
    $ExcelMappe = 'U:\Mappe1.xlsx'
    $Excel = new-object -ComObject Excel.application
    $Excel.visible = $true
    
    $WorkBook = $Excel.WorkBooks.open($ExcelMappe)
    $Sheet
    
    
    foreach($WorkSheet in $WorkBook.WorkSheets){
        $Sheet = $WorkSheet
        break
    }
    
    $SpalteDatum = 2
    $ZeileDatum = 3
    
    $SpalteAnzahl = 2
    $ZeileAnzahl = 7
    
    $SpalteName = 2
    $ZeileName = 10
    
    $SpalteMail = 7
    $ZeileMail = 10
    
    $Sheet.Cells.Item($ZeileAnzahl, $SpalteAnzahl).value2 = $Zahl
    $Sheet.Cells.Item($ZeileDatum, $SpalteDatum).value2 = $Date
    
    
    <#
    for($j = 0; $j -lt $Benutzer.Length; $j++){
       $Sheet.Cells.Item($ZeileMail, $SpalteMail).value2 = $Benutzer.Email[$j]     
       $Sheet.Cells.Item($ZeileName, $SpalteName).value2 = $Benutzer.FullName[$j]
       $ZeileName++
       $ZeileMail++
    }#>
    
    $WorkBook.Save()
    $Excel.quit()
    
    #---------------------- Alte Version ----------------------
    #for($i = 0; $i -lt $Benutzer.Email.Length; $i++){ $Benutzer.Email[$i] }
    #$Benutzer | Export-Csv ("C:\temp\" + $UserType + "AktiveSFNutzer_$Date.csv") -Force -NoTypeInformation


    Im Prinzip sollen das Datum, die Anzahl der Benutzer und der Name und die Email des Benutzers in die Tabelle eingefügt werden.

    Nun funktioniert zwar die Anzahl, jedoch nicht das Datum oder die anderen beiden Sachen und es kommt zu folgender Fehlermeldung: 

    Die angegebene Umwandlung ist ungültig.
    In C:\Users\jgreiner\Desktop\ShareFile Userliste.ps1:63 Zeichen:1
    + $Sheet.Cells.Item($ZeileDatum, $SpalteDatum).value2 = $Date
    + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
        + CategoryInfo          : OperationStopped: (:) [], InvalidCastException
        + FullyQualifiedErrorId : System.InvalidCastException

    Die Selbe Fehlermeldung kommt auch bei den Benutzersachen.

    Da ich selbst nicht sehr PowerShell-affin bin, habe ich mir den Teil mit Excel aus einem anderen Fragebeitrag abgeschaut:
    "Variablen mit Powershell in Excel übergeben"


    Falls noch irgendwelche Fragen bestehen gerne fragen.
    Bilder/Links konnte ich leider noch keine einfügen, wegen der Kontoüberprüfung, falls von Nöten folgen diese aber dann nachdem das passiert ist.

    Vielen Dank schon mal für Eure Hilfe! 

    Gruß Julien


    • Bearbeitet JulienGr Dienstag, 8. Mai 2018 11:25
    Dienstag, 8. Mai 2018 11:24

Antworten

  • Die Eigenschaften sind zu unterscheiden zwischen .Value und .Value2.

    https://msdn.microsoft.com/de-de/vba/excel-vba/articles/range-value2-property-excel

    Um ein Datum zuzuweisen ist .Value zu verwenden.
    Im allgemeinen wird eigentlich jeder Wert der Value-Eigenschaft zugewiesen.

    Ein Problem sind Zeichenketten, die als Zahl/Datum interpretierbar sind, dann wandelt Excel diese auch in eine Zahl/Datum um.
    Um das zu verhindern muss man bei der Zuweisung dann ein einzelnes Hochkomma voranstellen.

    Fazit:
    Nimm im ersten Anlauf grundsätzlich.Value für die Zuweisung.

    • Als Antwort markiert JulienGr Dienstag, 8. Mai 2018 12:03
    Dienstag, 8. Mai 2018 11:49

Alle Antworten

  • Die Eigenschaften sind zu unterscheiden zwischen .Value und .Value2.

    https://msdn.microsoft.com/de-de/vba/excel-vba/articles/range-value2-property-excel

    Um ein Datum zuzuweisen ist .Value zu verwenden.
    Im allgemeinen wird eigentlich jeder Wert der Value-Eigenschaft zugewiesen.

    Ein Problem sind Zeichenketten, die als Zahl/Datum interpretierbar sind, dann wandelt Excel diese auch in eine Zahl/Datum um.
    Um das zu verhindern muss man bei der Zuweisung dann ein einzelnes Hochkomma voranstellen.

    Fazit:
    Nimm im ersten Anlauf grundsätzlich.Value für die Zuweisung.

    • Als Antwort markiert JulienGr Dienstag, 8. Mai 2018 12:03
    Dienstag, 8. Mai 2018 11:49
  • Hat geklappt, vielen lieben Dank! =)
    Dienstag, 8. Mai 2018 12:03