ralf82
Goto Top

Powershell und Excel: Tabellenblatt auswählen

Hallo alle zusammen,

ich habe mir ein Powershell-Skript erstellt, welches mir einen Bereich aus einer Exceltabelle in eine CSV-Datei schreiben soll.

Mein Problem ist, dass die Daten aus dem falschen Tabellenblatt gezogen werden. Wird nicht mit $WB.Sheets("Woche") das Tabellenblatt Woche ausgewählt?

$excel = New-Object -ComObject Excel.Application
$WB = $excel.Workbooks.Open('C:\Test\Datei.xlsx')	        	#Quelldatei  
$WS = $WB.Sheets("Woche")								#Tabellenblatt  
$data = $WS.Range("A1", "E10")							#zu kopierender Bereich  
$XLcsv = 6       										
$data.worksheet.SaveAs('C:\Test\Export.csv', $XLcsv)	#Zieldatei  
$excel.Quit()

Gibt es auch eine Möglichkeit die Betriebsmeldungen wegzukommen? Zu:
  • Datei existiert schon und soll ersetzt werden
  • Änderung an CSV-Datei speichern
  • Einige Features in der ... Möchten Sie das Format trotzdem verwenden?

Vielen Dank für eure Hilfe.

Gruß Ralf

Content-Key: 3209217798

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

Ausgedruckt am: 20.04.2024 um 02:04 Uhr

Mitglied: MrCount
Lösung MrCount 29.06.2022 aktualisiert um 16:12:17 Uhr
Goto Top
Servus,

versuche es mal mit

$ws = $wb.Worksheets.item("Woche")  

siehe z.B.: https://docs.microsoft.com/en-us/office/vba/api/excel.worksheet
Mitglied: TK1987
Lösung TK1987 29.06.2022 aktualisiert um 16:40:27 Uhr
Goto Top
Moin Ralf,

Zitat von @Ralf82:
Wird nicht mit $WB.Sheets("Woche") das Tabellenblatt Woche ausgewählt?
Doch genau.

Mach Excel doch mal sichtbar und überprüfe die Schritte in der Konsole.
$excel.visible = $true
Gibt es auch eine Möglichkeit die Betriebsmeldungen wegzukommen?
sicher:
$excel.DisplayAlerts = $false

Gruß Thomas

PS: Das ComObjekte sollte nach Abschluss immer aufgehoben werden, sonst läuft Excel im Hintergrund weiter
$excel,$wb,$ws,$data | %{[System.Runtime.InteropServices.Marshal]::ReleaseComObject($_)}
Mitglied: Ralf82
Ralf82 29.06.2022 um 16:37:21 Uhr
Goto Top
Hallo,

vielen Dank für eure Hilfe. Es funktioniert soweit. Juhu 😃.

Als Trennzeichen werden in der Datei jetzt allerdings Komma anstatt von Semikolons verwendet. Ich habe es versucht am Anfang des Skriptes durch die Ländereinstellung zu korrigieren. Hat leider nicht geklappt.

powershell.exe -Command "Set-Culture de-DE"  

Gruß Ralf
Mitglied: MrCount
MrCount 29.06.2022 aktualisiert um 16:57:16 Uhr
Goto Top
Zitat von @Ralf82:

Als Trennzeichen werden in der Datei jetzt allerdings Komma anstatt von Semikolons verwendet.

CSV = Comma Separated Values face-wink

Du könntest es mit
Import-CSV C:\Test\Export.csv | Export-CSV C:\Test\Export_semicolon.csv -NoTypeInformation -Delimiter ";"   
versuchen.

Edit: andere Option entfernt
Mitglied: Ralf82
Ralf82 29.06.2022 um 16:54:58 Uhr
Goto Top
Hallo MrCout

CSV = Comma Separated Values

Da hast du natürlich Recht. Man ist es halt gewohnt csv-Dateien mit Semikolons zu bekommen.

Vielen Dank für deine Hilfe.

Gruß Ralf
Mitglied: colinardo
colinardo 29.06.2022 aktualisiert um 16:59:37 Uhr
Goto Top
Als Trennzeichen werden in der Datei jetzt allerdings Komma anstatt von Semikolons verwendet.
Oder die local Option in der SaveAs Methode auf $true setzen, dann wird der Trenner der aktuellen Locale verwendet.
$n = [System.Reflection.Missing]::Value
# create excel object
$excel = New-Object -ComObject Excel.Application -P @{
    Visible = $true # visible for test
    DisplayAlerts = $false # disable alerts
}
# open wb
$WB = $excel.Workbooks.Open('C:\Test\Datei.xlsx')   
# create temporary wb for custom range export
$wbtemp = $excel.Workbooks.Add()
# copy range to temp wb
[void]$WB.Sheets["Woche"].Range('A1:E10').Copy($wbtemp.Sheets(1).Range("A1"))  
# save sheet
$wbtemp.Sheets.Item(1).SaveAs('C:\Test\Export.xlsx',6,$n,$n,$n,$n,$n,$n,$n,$true)  
# close wb's 
$wbtemp.Close($false)
$WB.Close($false)
# reenable alerts, because setting ist permanent
$excel.DisplayAlerts = $true
# quit and release resources
$excel.Quit()
$wb,$wbtemp,$excel | %{[void][System.Runtime.InteropServices.Marshal]::ReleaseComObject($_)}
Grüße Uwe