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

Printed on: May 30, 2023 at 12:05 o'clock

Member: MrCount
Solution MrCount Jun 29, 2022 updated at 14:12:17 (UTC)
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
Member: TK1987
Solution TK1987 Jun 29, 2022 updated at 14:40:27 (UTC)
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($_)}
Member: Ralf82
Ralf82 Jun 29, 2022 at 14:37:21 (UTC)
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
Member: MrCount
MrCount Jun 29, 2022 updated at 14:57:16 (UTC)
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
Member: Ralf82
Ralf82 Jun 29, 2022 at 14:54:58 (UTC)
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
Member: colinardo
colinardo Jun 29, 2022 updated at 14:59:37 (UTC)
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