none
Excelmappe öffnen RRS feed

  • Frage

  • Hallo,

    ich muss eine Excelmappe aus einem geplanten Task heraus öffnen (Windows 2008 R2). Die Schwierigkeit liegt nun in der Tatsache dass ich eine exe starte

    und aus dieser die Mappe öffnen muss. Unter Windows 2003 kein Problem, aber jetzt mit 2008 gehts nicht mehr. Starte ich die exe nicht aus einer geplanten Aufgabe, sondern einfach per Doppelklick funktioniert alles.

    Gibt es eine Möglichkeit zum Öffnen einen Benutzer mitzugeben?

    ich öffne die Mappe mit "Microsoft.Office.Interop.Excel.Application" => Workbooks.open

    Gruß Armin

    Freitag, 1. Februar 2013 07:39

Antworten

  • Hallo Marcel,

    gerade habe ich den Fehler gefunden. Es lag nicht an der Programmierung sondern am neueren Sicherheitskonzept von 2008 R2.

      Diesen Ordner angelegt und es funktioniert: "C:\Windows\SysWOW64\config\systemprofile\Desktop"

    Gruß

    Armin
    • Als Antwort markiert AucheinName Donnerstag, 7. Februar 2013 15:29
    Donnerstag, 7. Februar 2013 15:23

Alle Antworten

  • Hallo Armin,

    ich glaube Du stellst deine Frage besser hier bzw. hier . Dort sind die passenden Anwender "unterwegs", die Dir helfen können.

    Gruß

    Viktor

    Freitag, 1. Februar 2013 08:12
  • Hallo Armin,

    auch ich bin der Meinung, dass die Frage weniger mit VSTO zu tun hat.

    Wenn Du die Frage in einem der von Viktor genannten Foren erneut stellst, präzisiere bitte auch, ob es sich dabei um eine interaktive Logon-Sitzung handelt (s.a. KB-Artikel Was bei der serverseitigen Automatisierung von Office zu beachten ist. Excel kann ohne ein geladenes Desktop-Benutzer-Profil nicht ausgeführt werden).

    Auch wäre es hilfreich, die Fehlermeldung samt Stacktrace zu posten. Es gibt bekannte Probleme mit der Automation unter Windows 2008 R2, vielleicht ist das auch bei dir der Fall.

    Gruß
    Marcel

    Freitag, 1. Februar 2013 08:36
  • Hallo, Armin,

    hat zwar nicht viel mit VSTO zu tun, aber den User musst Du direkt im Task einstellen.

    Gruß

    Susanne

    Freitag, 1. Februar 2013 09:34
  • Hallo,

    sorry wenn ich mich falsch ausgedrückt habe, der Task wird mit unter einem Benutzer ausgeführt, der genügend Rechte besitzt.

     Ich habe eingentlich auch keine Frage zu Office, sonder nur ob ich bei "Microsoft.Office.Interop.Excel.Application"  einen Benutzer mitgeben kann.

     Gruß Armin

    Montag, 4. Februar 2013 09:11
  • Hallo Armin,

    Aus deinem Posting geht nicht hervor, wie Du die Mappe öffnen möchtest (für den Benutzer sichtbar/unsichtbar) und welche Fehlermeldung angezeigt wird.

    Das Application-Objekt kann man nicht mit einem Benutzer assoziieren. Excel startet im selben Sicherheitskontext wie der Prozess, der den Aufruf von Microsoft.Office.Interop.Excel.Application enthält. Wenn also Excel für den aktuellen Benutzer nicht installiert wurde oder die Sitzung nicht interaktiv ist, wird der Aufruf von Workbooks.Open() fehlschlagen.

    Nun könnte man auf die Idee kommen den Prozess, der Workbooks.Open() enthält als einen anderen Benutzer zu starten (über System.Diagnostics.Process und ProcessStartInfo). Unter neueren Betriebsystemen wird dieses Vorgehen leider nicht funktionieren, da beim Starten eines Prozesses als ein anderer Benutzer die Option ProcessStartInfo.UseShellExecute auf false stehen muss, die Benutzerkontensteuerung jedoch nur über die Shell funktioniert. Dies wirkt sich nachteilig  auf das Nachladen des Benutzerprofils und mit dem Profil verknüpfter Ressourcen aus.

    Manche Probleme lassen sich durch Registry-Änderungen lösen (s. Link oben), aber man muss ganz eindeutig sagen, dass das klassische Office ganz einfach nicht für Server-Szenarien entwickelt wurde.

    Gruß

    Marcel

    Montag, 4. Februar 2013 16:04
  • Hallo Marcel,

    ich setze hier Office 2010 ein und möchte das Programm über den Aufgabenplaner starten. Selbst wenn der Benutzer angemeldet ist, wird Excel gestartet (im Taskmanager zu sehen) und die Mappe kann nicht geöffnet werden. NTFS-Rechte sind natürlich gegeben.

    Ich hab hier mal den Code hinzugefügt:

    fs = CreateObject("Scripting.FileSystemObject")
    fs.copyfile("c:\test_vorlage.xlsm", "test.xlsm", True)
    mobjExcel = New Microsoft.Office.Interop.Excel.Application
    mobjExcel.Visible = False
    mobjExcel.Workbooks.Open(Filename:="c:\test.xlsm")

    Gruß Armin


    • Bearbeitet AucheinName Dienstag, 5. Februar 2013 08:54
    Dienstag, 5. Februar 2013 08:04
  • Hallo Armin,

    die Zeile in der Du test.xlsm kopierst, kopiert die Datei in das jeweils aktuelle Verzeichnis und nicht auf C:\. Wenn Du anschließend die Datei C:\test.xlsm zu öffnen versuchst, wird entweder eine FileNotFoundException geworfen (wenn die Datei nicht gefunden wird) oder eine SecurityException. Darum wird Excel zwar angezeigt (bei mobjExcel.Visible=True) aber keine Datei geöffnet. Excel ist dafür bekannt, geöffnete Dateien für fremden Zugriff zu sperren. Wenn aus irgendeinem Grund beim Beenden deiner Anwendung noch eine Excel-Instanz im Task-Manager sichtbar bleibt, könnte sie C:\test.xlsm gesperrt halten und alle Ausführung der geplanten Aufgabe würde fehl schlagen.

    Überprüfe bitte über eventvwr.exe die Ereignisanzeige deines Systems und poste hier die Fehlermeldungen, die von deiner Anwendung stammen.

    Gruß
    Marcel

    • Bearbeitet Marcel Roma Dienstag, 5. Februar 2013 21:57
    Dienstag, 5. Februar 2013 21:02
  • Hallo Marcel,

    gerade habe ich den Fehler gefunden. Es lag nicht an der Programmierung sondern am neueren Sicherheitskonzept von 2008 R2.

      Diesen Ordner angelegt und es funktioniert: "C:\Windows\SysWOW64\config\systemprofile\Desktop"

    Gruß

    Armin
    • Als Antwort markiert AucheinName Donnerstag, 7. Februar 2013 15:29
    Donnerstag, 7. Februar 2013 15:23
  • Hallo Armin,

    genau darauf hatte ich dich ja in meinem ersten Posting hingewiesen, als ich schrieb dass es bekannte Probleme mit der Automation unter Windows 2008 R2 gibt.

    Freut mich trotzdem, dass es nun funktioniert hat.

    Gruß
    Marcel

    Donnerstag, 7. Februar 2013 16:15