Announcement

Collapse
No announcement yet.

Interop auf dem Server

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Interop auf dem Server

    Hallo,

    habe jetzt auf die schnelle keinen passenden Beitrag gefunden!

    Mein Problem ist, das ich ein Programm geschrieben habe das eine Excel-Datei einliest und in der Datenbank speichert. Läuft alles hervorragend. Aber leider nur Lokal da auf dem Server kein Office installiert wurde!

    Meine Frage hierzu wäre ob es möglich ist die interop - Methoden zu nutzen ohne Excel auf dem Server installieren zu müssen?

    Hat jemand damit schon Erfahrungen gemacht??

    Welche Alternativen Wege gäbe es ansonsten??

    Danke!!

    Thomas Hertel

  • #2
    Meine Frage hierzu wäre ob es möglich ist die interop - Methoden zu nutzen ohne Excel auf dem Server installieren zu müssen?
    Nein geht nicht. Die Interop-Methoden sind ein Wrapper für die COM-Schnittstelle von Excel und somit auch nur eine Schnittstellendefinition. Somit muss zum Ausführen des Codes auch eine Implementierung der Schnittstelle vorhanden sein und in diesem Fall wäre dies Excel.

    Welche Alternativen Wege gäbe es ansonsten??
    Wenn möglich
    • Excel als CSV speichern
    • Excel als XML (oder OfficeML) speichern
    • ...
    • hängt vom Aufbau der Excel-Dateien ab


    mfG Gü
    "Any fool can write code that a computer can understand. Good programmers write code that humans can understand". - Martin Fowler

    Comment


    • #3
      Danke für die Antwort!

      Nun haben wir Excel auf dem Server installiert und es geht leider noch immer nicht richtig! Welche Features muss man da installieren und reicht es, wenn man nur Excel installiert?

      Muss ich in meinem Quellcode den Verweis irgendwie neu setzen???

      Danke für alle Antworten!

      Gruß
      Thomas Hertel

      Comment


      • #4
        Okay.... nach etwas eigener Recherche fand ich den unteren Link :

        http://blog.crowe.co.nz/archive/2006/03/02/589.aspx

        Unser Admin hat das dann mal gemacht und es führte zum Erfolg!
        Damit ist dieser Freitag zumindest in einer Hinsicht schon mal gerettet!

        Comment


        • #5
          Mit den Problemen hatte ich auch schon zu kämpfen - du solltest auch UNBEDINGT auf deinem Server einen Blick in den Taskmanager werfen, ob noch Excel.exe oder ähnlich rumschwirren, denn :

          Von der Verwendung von Office-Interop-Geschichten auf einem Server wird u.a. von Microsoft abgeraten, da z.B. Excel für einen User gemacht ist, der direkt vor dem Rechner sitzt. Poppt zum Beispiel irgend eine Abfrage auf, hängt sich der Prozess, weil niemand darauf reagieren kann. Ich habe bei meiner Applikation zum Beispiel das Problem, dass sich auch bei Aufruf von .Close() (oder wie die Funktion hieß) mein Excel-Prozess nicht schließt - wahrscheinlich weil nach irgend einem Speichern o.ä. gefragt wird...

          Wenn du Excel 2008-Formate analysieren willst, solltest du dich mal mit dem Open Document-Standard auseinandersetzen, dafür gibt es auch Klassenbibliotheken (bei den Visual Studio Tools for Office glaube ich, einige Sachen sind allerdings noch in der Entwicklung) von Microsoft. Zum Spaß kann man auch eine Excel 2008-Datei mal in .zip umbenennen, dann sieht man wie sowas aufgebaut ist, lässt sich auch sehr gut auswerten, wenn man weiß wie. Habe mir zu dem Thema mal einen Vortrag von Lars Keller angehört - der ist MVP für VSTO und kann dir da sicher auch ein paar Tips geben bzw. solltest du einfach mal in seinem Blog stöbern

          Beste Grüße,

          Compu

          /edit : Der Vortrag war das, die Folien/Code dazu könnten dir eventuell helfen :
          http://blog.lars-keller.net/2009/04/...G+Dresden.aspx

          Comment


          • #6
            Habe gerade noch ein sehr schönes Snippet dazu gefunden (zwar VB, aber lässt sich rel. einfach in Csharp übersetzen - ich werde das gleich mal implementieren)

            http://dotnet-snippets.de/dns/excel-...3.aspx#comment

            /edit : Hier das Ganze in Csharp :
            [highlight=c#]
            //http://dotnet-snippets.de/dns/excel-prozess-schliessen-SID1153.aspx
            [System.Runtime.InteropServices.DllImport("user32.D LL")]
            public static extern IntPtr GetWindowThreadProcessId(int hWnd, ref IntPtr lpdwProcessID);

            /// <summary>
            /// kills an Excel application
            /// </summary>
            /// <param name="myExcelApp">The application to kill</param>
            public static void killExcelInstanceById(ref Microsoft.Office.Interop.Excel.Application myExcelApp)
            {
            IntPtr processID = new IntPtr() ;

            //API Funktion, out val: processId
            GetWindowThreadProcessId(myExcelApp.Hwnd, ref processID);
            System.Diagnostics.Process myExcelProcess = System.Diagnostics.Process.GetProcessById(processI D.ToInt32());

            // kill it!
            myExcelProcess.Kill();
            }
            [/highlight]
            Zuletzt editiert von Compufreak; 03.07.2009, 10:54.

            Comment

            Working...
            X