VB.NET zugriff auf Excel vom Server

Hallo liebe community,

ich bin schon seit längere auf der Suche nach einer Lösung für mein Problem.
Das Problem, welches ich habe ist, dass ich ein Programm geschrieben habe wo ich einzelnen Zellen aus einem xls-Dokument auslese. Dazu benötige ich Excel. Das Programm funktioniert auch auf Rechnern wo Excel lokal installiert, leider greifen wir in der Firma über einen Citrix-Server auf Excel zu und daher bekomme ich immer einen Fehler in der Zeile:
xclApp = CreateObject(„Excel.Application“)

Ich hoffe das mir jemande helfen kann. Ich bedanke mich schonmal im Vorraus.

Hallo!

Könntest Du das noch näher beschreiben, was bei Euch wo installiert ist und läuft?

Wenn Excel auf einem Citrix-Server installiert ist und Dein Programm auch auf diesem Server ausgeführt wird, dann kannst Du dort die Excel-Anwendung genauso instanziieren wie wenn beide Anwendungen auf einem lokalen Rechner installiert sind.
Daher vermute ich, dass Deine Anwendung lokal läuft, das Excel, was Du ansprechen möchtest, aber im ICA-Client in einer Serversitzung, oder?

Wenn ja, dann sind das zwei grundlegend unterschiedliche Sachen!

Was Du in der ICA-Sitzung siehst, findet auf einem anderen Rechner statt. Du kannst ja auch nicht sagen „Ich will hier bei mir Autocad starten“, nur, weil es auf jemandes anderem Rechner installiert ist.

Um etwas ähnliches zu realisieren müsstest Du eine Art Serverprozess schreiben, der auf dem Server läuft und dann (z.B. per .NET Remoting) vom Client gesagt bekommt, was er zu tun hat.
Dieser Serverprozess startet Excel, macht irgendwas damit und muss dann die Ergebnisse zurück zum Client schicken.

Funktioniert prinzipiell schon, ist aber etwas aufwändiger.

Gruß,
Martin

Hallo

hast du schon mal versucht, die Excel Datei via OLE einzulesen?
Dies benötigt dann kein lokales Excel auf dem Rechner…

Gruß
Matthias

Erstmal danke das sich so schnell welche gemeldet haben, echt super.

@Martin Müller: das war mir eigentlich schon klar, dass Excel auf „einem anderen Rechner“ läuft. Suche nur nach einer Möglichkeit drauf zuzugreifen:
Also das Programm, womit ich auf Excel zugreifen will ist lokal auf meinem Rechner installiert und Excel „extern“ auf dem Server.

@MattiBaer: OLE sagt mir leider nichts. Ist das sozusagen: den xls-Inhalt streamen oder so???

Hallo nochmal!

Den Weg, wie man es realisieren könnte, habe ich Dir ja schon in der anderen Antwort skizziert. Eine eingebaute Lösung dazu gibt es nicht.

Was der andere Hinweis mit OLE soll, kann ich leider auch nicht nachvollziehen. Wenn OLE Automation gemeint ist, brauchst Du auch dafür einen lokal installierten und registrierten COM-Server (also Excel), da bringt es Dir gar nix, wenn Excel auf dem Server installiert ist.
Für solche Remote-Geschichten müsstest Du DCOM verwenden, aber ganz ehrlich: Nimm .NET Remoting und spar’ Dir etliche graue Haare…

Gruß,
Martin

Hallo,

mit OLE/ADO behandelst du die Excel Datei wie eine SQL Tabelle:
Also : select feld1, feld2… from Tabelle1$

Dafür brauchst du keine Excel Installation oder sonstiges…

Connection wäre zum Beispiel:
PROVIDER=Microsoft.Jet.OLEDB.4.0;DATA SOURCE=MeineExcelDatei.xls;USER ID=:stuck_out_tongue_winking_eye:ASSWORD=;Extended Properties=Excel 8.0;

Hallo,

Hi!

mit OLE/ADO behandelst du die Excel Datei wie eine SQL
Tabelle:
Also : select feld1, feld2… from Tabelle1$

Dafür brauchst du keine Excel Installation oder sonstiges…

Connection wäre zum Beispiel:
PROVIDER=Microsoft.Jet.OLEDB.4.0;DATA
SOURCE=MeineExcelDatei.xls;USER ID=:stuck_out_tongue_winking_eye:ASSWORD=;Extended
Properties=Excel 8.0;

Achso, das meinst Du…
Das heisst nur nicht OLE, sondern OLEDB. ADO wiederum setzt auf OLEDB auf. Und weil wir hier im C#/.NET Forum sind, sei auch gleich ADO.NET genannt… :smile:

Wenn es wirklich nur darum geht, aus einer am Client vorliegenden xls-Datei ein paar Zellen auszulesen, dann ist das sicherlich auch so möglich, da hast Du absolut Recht!
An diese Möglichkeit hatte ich gar nicht gedacht (vermutlich auch, weil es erfahrungsgemäß nie so einfach bleibt und das, was man über so einen DataProvider machen kann, nur einen kleinen Bruchteil dessen ausmacht, was Excel alles kann, wenn man es z.B. per COM ansprechen kann).

Gruß,
Martin