tk1987
Goto Top

Powershell: Excel-Mappe öffnen hebt Druckbereiche auf

Moin zusammen.

Wenn ich eine Excel-Abeitsmappe (xlsx) in Powershell wie folgt öffne, werden auf sämtlichen Tabellenblättern die festgelegten Druckbereiche entfernt:
$Excel = New-Object -ComObject Excel.Application
$Workbook = $Excel.Workbooks.Open(<Dateipfad>)
Getestet mit Excel Versionen 365 & 2019, bzw. Powershell Versionen 5.1 & 7.3.2.

Hat jemand eine Idee, woran das liegt?

Im Netz finde ich dazu nichts. Das Problem besteht natürlich nicht, wenn ich zuerst die Mappe in Excel öffne und dann in Powershell das Aktive Objekt übernehme.

Gruß Thomas

Content-Key: 6237127489

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

Printed on: May 9, 2024 at 11:05 o'clock

Member: colinardo
Solution colinardo Mar 06, 2023 updated at 09:52:38 (UTC)
Goto Top
Servus Thomas,
das liegt an einem sehr alten Bug in Excel der schon seit Excel 2007 besteht. Beim Öffnen der Arbeitsmappe über ein OLE/COM-Objekt benennt Excel den Namensbezug des Druckbereichs in die englische Bezeichnung um. Das kannst du sehen indem du mal STRG+F3 in Excel drückst. Du solltest dort dann einen Bezug mit dem Namen Print_Area vorfinden. Wenn du diesen nun in Druckbereich umbenennst (für ein deutsches Excel) wird der Druckbereich wiederhergestellt.
Die Bezüge könntest bspw. in deinem Skript umbenennen um den Druckbereich dort wiederherzustellen
$excel = New-Object -Com Excel.Application -P @{Visible=$true}
$wb = $excel.Workbooks.Open('C:\Pfad\test.xlsx')  
$wb.Sheets | ?{try{$_.Names['Print_Area']}catch{}} | %{  
    $_.Names['Print_Area'].Name = "Druckbereich"  
}
$excel.ActiveWindow.View = 2
Ob es inzwischen eine andere Variante dafür gibt, kann ich gerade nicht evaluieren, aber das sollte dir als Ansatz sicher weiterhelfen.

Grüße Uwe
Member: colinardo
Solution colinardo Mar 06, 2023 updated at 09:56:37 (UTC)
Goto Top
Habe gerade nochmal kurz geschaut...

Gibt einen Workaround indem du es per OpenXML Methode öffnest
$excel = New-Object -Com Excel.Application -P @{Visible=$true}
$wb = $excel.Workbooks.OpenXML('C:\Pfad\test.xlsx')  
Dann bleiben die Bezüge erhalten.
Member: TK1987
TK1987 Mar 06, 2023 at 09:58:31 (UTC)
Goto Top
Moin Uwe,

vielen Dank, so funktioniert es.

Gruß Thomas
Member: TK1987
TK1987 Mar 06, 2023 at 10:18:23 (UTC)
Goto Top
Zitat von @colinardo:
Gibt einen Workaround indem du es per OpenXML Methode öffnest. Dann bleiben die Bezüge erhalten.
Das ist natürlich noch besser. So dürfte auch gewährleistet sein, dass sich nicht noch andere Bezüge geändert haben.

Gruß Thomas