Excel mit Parametern aus Powershell heraus öffnen
Hallo zusammen,
wir haben auf Grund von Migrationsprojekten derzeit verschiedene Excel-Versionen im Einsatz. Alls Version sind derzeit Office 2013, Office 2016 und Office 365 im Einsatz. Wir haben 74 Excel-Dateien auf dem Fileserver. Diese Excel-Dateien müssen von alle 3 Office Versionen sowohl schreiben, aber auch in gewissen Fällen auch nur Schreibgeschützt geöffnet werden. Dabei kann es sei, dass die selbe Person am Montag die Datei beschreiben muss, am Dienstag aber nur schreibgeschützt öffnet. Eine Eingruppierung mit Dateiberechtigungen fällt daher aus. Wir haben dazu für die Excel-Dateien einfach eine Verknüpfung erstellt und den Parameter /r mitgegeben. Die sieht zum Beispiel nun so aus:
oder aber auch so:
um nur zwei Beispiele zu nennen. Ich möchte nun nicht zu jeder der Excel-Datei noch eine zusätzliche Verknüpfung erstellen.
Mein Gedanke war, ein PS-Skript anstatt der Verknüpfung abzulegen, welches prüft, welche Excel-Version installiert ist und dann den entsprechenden Pfad aufzurufen. Die Prüfung nach dem Pfad ist kein Problem. Das Funktioniert. Es scheitert am Start von Excel.
Folgendes habe ich bereits versucht:
Dies führt dazu, dass Powershell meckert, dass der Parameter /r nicht als Argument von Start-Prozess erkannt wurde (ist ja auch richtig)
Dies führt dazu, dass C:\Program nicht als ausführer Prozess identifiziert wurde, da es den Pfad nicht gibt.
Führt dazu, dass absolut nichts passiert
Startet Excel.
Die Frage ist also, wie muss ich den Start-Process-Befehl schreiben, damit ich eine Datei mitgeben kann, die dann nur schreibgeschützt geöffnet wird. Oder geht das an dieser Stelle nicht?
Ich möchte es sauber lösen (falls möglich). Ich habe natürlich auch schon darüber nachgedacht die Excel-Datei einfach nach C:\Temp zu kopieren und dann mit zu starten, aber die Lösung finde ich Powershell gegenüber ungerecht
Gruß
Doskias
wir haben auf Grund von Migrationsprojekten derzeit verschiedene Excel-Versionen im Einsatz. Alls Version sind derzeit Office 2013, Office 2016 und Office 365 im Einsatz. Wir haben 74 Excel-Dateien auf dem Fileserver. Diese Excel-Dateien müssen von alle 3 Office Versionen sowohl schreiben, aber auch in gewissen Fällen auch nur Schreibgeschützt geöffnet werden. Dabei kann es sei, dass die selbe Person am Montag die Datei beschreiben muss, am Dienstag aber nur schreibgeschützt öffnet. Eine Eingruppierung mit Dateiberechtigungen fällt daher aus. Wir haben dazu für die Excel-Dateien einfach eine Verknüpfung erstellt und den Parameter /r mitgegeben. Die sieht zum Beispiel nun so aus:
"C:\Program Files\Microsoft Office\root\Office16\EXCEL.EXE" /r "[Server]\[Datei].xlsx"
"C:\Program Files\Microsoft Office 15\root\office15\excel.exe" /r "[Server]\[Datei].xlsx"
Mein Gedanke war, ein PS-Skript anstatt der Verknüpfung abzulegen, welches prüft, welche Excel-Version installiert ist und dann den entsprechenden Pfad aufzurufen. Die Prüfung nach dem Pfad ist kein Problem. Das Funktioniert. Es scheitert am Start von Excel.
Folgendes habe ich bereits versucht:
1. Start-Process "C:\Program Files\Microsoft Office 15\root\office15\excel.exe" /r "[Server]\[Datei].xlsx"
2. Start-Process C:\Program Files\Microsoft Office 15\root\office15\excel.exe /r [Server]\[Datei].xlsx
3. Start-Process "C:\Program Files\Microsoft Office 15\root\office15\excel.exe /r [Server]\[Datei].xlsx"
4. Start-Process "C:\Program Files\Microsoft Office 15\root\office15\excel.exe"
Die Frage ist also, wie muss ich den Start-Process-Befehl schreiben, damit ich eine Datei mitgeben kann, die dann nur schreibgeschützt geöffnet wird. Oder geht das an dieser Stelle nicht?
Ich möchte es sauber lösen (falls möglich). Ich habe natürlich auch schon darüber nachgedacht die Excel-Datei einfach nach C:\Temp zu kopieren und dann mit
Start-Process C:\Temp\[Datei].xlsx
Gruß
Doskias
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 603621
Url: https://administrator.de/forum/excel-mit-parametern-aus-powershell-heraus-oeffnen-603621.html
Ausgedruckt am: 22.12.2024 um 08:12 Uhr
14 Kommentare
Neuester Kommentar
Moin,
Powershell kann Excel. Du brauchst auch gar nicht überprüfen, welche Version von Excel installiert ist.
Allerdings stellt sich die Frage, ob es nicht sinnvoller wäre, Kontextmenüeinträge für Excel-Dateien zu erstellen - sodass der Nutzer nur mit Rechtsklick auf eine Arbeitsmappe klicken braucht und dann die Auswahl hat, ob er normal oder schreibgeschützt öffnen will.
Gruß Thomas
Powershell kann Excel. Du brauchst auch gar nicht überprüfen, welche Version von Excel installiert ist.
# Excel öffnen
$Excel = New-Object -ComObject Excel.Application
# Arbeitsmappe öffnen
$Mappe = $Excel.Workbooks.Open('C:\Pfad\zur\Arbeitsmappe.xlsx')
# Oder alternativ Arbeitsmappe Schreibgeschützt öffnen
$Mappe = $Excel.Workbooks.Open('C:\Pfad\zur\Arbeitsmappe.xlsx',0,$true)
# Excel sichtbar machen
$Excel.Visible = $true
# Excel freigeben (wichtig, sonst bleibt der Prozess erhalten, auch wenn Excel vom Benutzer geschlossen wird)
[System.Runtime.InteropServices.Marshal]::ReleaseComObject($Excel)
Allerdings stellt sich die Frage, ob es nicht sinnvoller wäre, Kontextmenüeinträge für Excel-Dateien zu erstellen - sodass der Nutzer nur mit Rechtsklick auf eine Arbeitsmappe klicken braucht und dann die Auswahl hat, ob er normal oder schreibgeschützt öffnen will.
Gruß Thomas
Zitat von @Doskias:
Dank dem Hinweis von TK1987, dass Powershell Excel kann, sieht es jetzt einfach so aus:
Das Ganze geht gänzlich ohne Start-Process:Dank dem Hinweis von TK1987, dass Powershell Excel kann, sieht es jetzt einfach so aus:
Start-Process EXCEL.EXE -ArgumentList "/r `"C:\temp\Test 2.xlsx`""
$Excel = New-Object -ComObject Excel.Application
[void]$Excel.Workbooks.Open("C:\temp\Test 2.xlsx",0,$true)
$Excel.Visible = $true
[void][System.Runtime.InteropServices.Marshal]::ReleaseComObject($Excel)
Gruß Thomas
Dann verstehe ich wiederum nicht, was du da eigentlich zu tun versuchst. Wenn die Anwender das Ganze per Doppelklick öfnnen sollen, bringt dich ein Start-Process auch nicht weiter. Dann bleiben dir nur 2 Möglichkeiten:
- Für jede Excel-Datei eine Verknüpfung anlegen, um diese schreibgeschützt öffnen zu können (die Verknüpfungen könnte man ja per Powershell anlegen lassen)
- Eine kleine grafische Oberfläche vorschalten, die beim Doppelklick auf eine Exceldatei abfragt, ob Normal oder Schreibgeschützt geöffnet werden soll.
Zitat von @Doskias:
Jetzt haben wir allerdings verschiede Excel-Versionen durch ein Migrationsprojekt. Daher will ich die Excel-Verknüpfung durch ein PS-Skript ersetzen, damit es nicht zwei Verknüpfungen gibt.
Ok, dann noch ein anderer Vorschlag: Füge doch auf den Clients den Office-Ordner zur Path-Variable hinzu. Dann brauchst du in der Verknüpfung auch nur nochJetzt haben wir allerdings verschiede Excel-Versionen durch ein Migrationsprojekt. Daher will ich die Excel-Verknüpfung durch ein PS-Skript ersetzen, damit es nicht zwei Verknüpfungen gibt.
Excel /r "C:\temp\Test 2.xlsx"
Moin,
... habe es gerade mal hier getestet. Leider scheint Windows beim Anlegen einer Verknüpfung alle Variablen aufzulösen - selbst wenn diese mit Powershell erstellt und der Pfad mit den Variablen in Single Quotes geschrieben wird.
Scheint auch keine Möglichkeit zu geben, dieses Verhalten zu umgehen. Damit sind Umgebungsvariablen in Verknüpfungen defacto leider nutzlos.
Bleibt dann wohl doch nur der Umweg über ein Skript, sorry.
Gruß Thomas
Zitat von @Doskias:
Meinem Verständnis nach hätte auf dem Windows 8 Rechner durch %office%\Excel.exe die Excel-Datei aus dem Office15 geöffnet werden müssen, auch wenn es bei mir Office16 ist.
Eben genau das hätte ich auch so erwartet...Meinem Verständnis nach hätte auf dem Windows 8 Rechner durch %office%\Excel.exe die Excel-Datei aus dem Office15 geöffnet werden müssen, auch wenn es bei mir Office16 ist.
... habe es gerade mal hier getestet. Leider scheint Windows beim Anlegen einer Verknüpfung alle Variablen aufzulösen - selbst wenn diese mit Powershell erstellt und der Pfad mit den Variablen in Single Quotes geschrieben wird.
Scheint auch keine Möglichkeit zu geben, dieses Verhalten zu umgehen. Damit sind Umgebungsvariablen in Verknüpfungen defacto leider nutzlos.
Bleibt dann wohl doch nur der Umweg über ein Skript, sorry.
Gruß Thomas