michi1983
Goto Top

Powershell: Export-Excel Funktion - Datum

Hallo admins,

ich habe mich zum ersten mal mit Powershell beschäftigt und scheitere gerade an einem Problem.

Um das ganze abzukürzen, zeige ich nur den wichtigsten Teil für die Problembeschreibung her:
# define import folder as root where the script is located
$importFolder = $PSScriptRoot

# define a valid from date (today)
$valFrom = Get-Date -Format "dd.MM.yyyy"  

#define a valid to date (user input)
$valTo = Read-Host "Please enter a validity to date"  

# create object with both values
$myObject = [PSCustomObject]@{
    "Valid from" = $valFrom  
    "Valid to"   = $valTo  
}

$myObject | format-table

Das Ergebnis sieht man dann hier:
2023-03-06 13_50_42-virtual obic 2-0 contractors - desktop viewer

Für mich sieht das Datum in Ordnung aus.

Wenn ich als Gegenprobe mir den Type ausgeben lasse mit:
$valFrom.GetType()
$valTo.GetType()

sind beides Strings vom Base-Type System.Object:
2023-03-06 13_53_01-virtual obic 2-0 contractors - desktop viewer

Soweit so gut (für mich zumindest).

Wenn ich jetzt allerdings genau dieses Objekt oben in ein Excel exportieren möchte mit folgendem Befehl:
# define import folder as root where the script is located
$importFolder = $PSScriptRoot

# define a valid from date (today)
$valFrom = Get-Date -Format "dd.MM.yyyy"  

#define a valid to date (user input)
$valTo = Read-Host "Please enter a validity to date"  

# create object with both values
$myObject = [PSCustomObject]@{
    "Valid from" = $valFrom  
    "Valid to"   = $valTo  
}

$myObject | Export-Excel -Path "$importFolder\test2.xlsx" -WorksheetName "Parameter"  

Dann erhalte ich folgenden Inhalt in der Excel Datei:
2023-03-06 13_55_39-virtual obic 2-0 contractors - desktop viewer

Hat jemand eine Idee woran das liegt?

Ich hatte mich etwas über Get-Culture eingelesen, da ist aber alles auf Deutsch eingestellt so wie es sein soll.
Das Excel ist auch auf Deutsch eingestellt.

Ich habe dann noch diesen Reddit Beitrage gefunden:
https://www.reddit.com/r/PowerShell/comments/o2lb4s/exportexcel_from_imp ...
Aber dort scheint es auch keine Lösung für das Problem zu geben.

Vielleicht hat ja jemand von euch noch einen Tipp für mich.

Gruß
Michi

Content-Key: 6243287424

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

Printed on: April 19, 2024 at 13:04 o'clock

Member: colinardo
Solution colinardo Mar 06, 2023 updated at 15:47:34 (UTC)
Goto Top
Servus Michi,
das Modul erkennt das String-Datum automatisch as Zahl weil es nur Digits und Punkte enthält, um das zu verhindern schließe die gewünschten Spalten davon aus mit dem Parameter -NoNumberConversion
$myObject | Export-Excel -Path "$importFolder\test2.xlsx" -WorksheetName "Parameter" -NoNumberConversion 'Valid from','Valid to'
Dir sollte aber klar sein das das Datum dann tatsächlich als "String" auch in Excel landet und nicht als echtes Datum formatiert. Will man es als echtes Datum dort haben, brauchst du es nicht in Text umwandeln sondern direkt so ohne Umwandlung übergeben.
# from date
$valFrom = get-date
# to date placeholder
$valTo = [datetime]::MaxValue
do {
    # repeat get date input until valid date entered which ich greater or equal to from date
    $dateinput = Read-host "Please enter a validity to date"  
}until([datetime]::TryParse($dateinput,[cultureinfo]'de','None',[ref]$valTo) -and $valTo -ge $valFrom)  

# create custom object
$myObject = [PSCustomObject][ordered]@{
    "Valid from" = $valFrom  
    "Valid to"   = $valTo  
}
# export data to excel sheet
$myObject | Export-Excel -Path "$PSScriptRoot\test2.xlsx" -WorksheetName "Parameter"  

Grüße Uwe
Member: michi1983
michi1983 Mar 06, 2023 at 13:42:12 (UTC)
Goto Top
Hallo Uwe,

du bist einfach ein Fuchs!

Vielen Dank, das wars.

Gruß
Member: colinardo
colinardo Mar 06, 2023 at 13:47:42 (UTC)
Goto Top
👍 Immer gerne.
Member: erikro
erikro Mar 06, 2023 at 13:49:56 (UTC)
Goto Top
Moin,

Zitat von @colinardo:
Dir sollte aber klar sein das das Datum dann tatsächlich als "String" auch in Excel landet und nicht als echtes Datum formatiert. Will man es als echtes Datum dort haben, brauchst du es nicht in Text umwandeln sondern direkt so ohne Umwandlung übergeben.

Als Ergänzung: Dann muss man bei get-date den Parameter format weglassen.

Liebe Grüße

Erik