Laden...

Kann man mit C# auf Excel Tabellen über VBA zugreifen, manipulieren und das Rechnen anstoßen?

Erstellt von optimum vor 7 Jahren Letzter Beitrag vor 7 Jahren 4.185 Views
O
optimum Themenstarter:in
5 Beiträge seit 2016
vor 7 Jahren
Kann man mit C# auf Excel Tabellen über VBA zugreifen, manipulieren und das Rechnen anstoßen?

Hallo alle zusammen,

was C# und VBA angeht betrette ich neuland.

Kann man mit C# auf Excel Tabellen über VBA zugreifen, manipulieren und das rechnen anstoßen!?

Mir würde paar Excel Tabellen in die Hand gedrückt, die Tabellen sind so weit fertig, sie können Rechnen wenn man was einträgt und ein Ergebnis wird auch ausgeben.

Nun wollte ich über einen Client die Excel Tabelle (die Excel Tabellen sollen auf einem Server liegen) manipulieren und mir das Ergebnis schicken lassen.

Meine Fragen ist, hat C# ein Interface für VBA?
Und ist das Szenario überhaupt machbar?

Danke im voraus!

87 Beiträge seit 2016
vor 7 Jahren

Hallo,

man kann aus C# heraus auf Excel zugreifen und Zellenwerte ändern, auslesen... .

Das anstoßen von VBA-Code sollte hier erläutert sein: https://msdn.microsoft.com/de-de/library/bb608613.aspx

glandorf

O
optimum Themenstarter:in
5 Beiträge seit 2016
vor 7 Jahren

Danke für die Hilfe glandorf.

In den [FAQ] Office (Word, Excel, Outlook, ...) steht das man:
"Office-Applikationen wie Excel, Word & Co. sind Anwendungen, die dafür entwickelt wurden, auf einem Client zu laufen und von einem Menschen über die GUI bedient zu werden. Deshalb sollte COM Automatisierung niemals auf einem Server (z.B. serverseitig in einer Webanwendung) verwendet werden! Dafür gibts ab Office 2003 die XML-Formate (Siehe weiter unten). Ein Beispiel für Excel-XML-Export ohne Excel gibts hier: "

Die FAQ sind aber von 2006. Kann man den die Office sachen auch auf dem Server via Client steuern??

Hinweis von Abt vor 7 Jahren

[Hinweis] Wie poste ich richtig? Bitte keine Fullquotes.

1.029 Beiträge seit 2010
vor 7 Jahren

Hi,

ja prinzipiell ist es möglich clientseitig auf irgendeinem Server eine Rechenoperation in einem Excel-File anzustoßen. (eine Office-Installation auf dem Server allerdings vorausgesetzt)

Aber grundsätzlich hat sich am eigentlichen Problem nichts geändert:

Office ist für den Client konzipiert.

Auf dem Server wirst du mit Problemen zu kämpfen haben, da der Zugriff immer nur von einer Instanz möglich ist, die Datei schon in Verwendung ist etc. pp.

Wie man auf die Idee kommt ein Programm für Rechenoperationen zu schreiben, welches letztendlich dann doch wieder auf Excel basiert ist mir allerdings schleierhaft...

Fazit:
Möglich ist das - machen solltest du es trotzdem nicht. Es gibt keine Funktionalität, die du in C# nicht deutlich besser machen kannst, sofern das Ganze serverseitig verwaltet sein soll.

Ich an deiner Stelle würde die Anforderungen an die Rechenoperationen prüfen - schauen, welches der x verwendbaren Formelframeworks auf die Anforderungen passt und dann ggf. mit ASP.NET WebApi eine anderweitige Implementierung vorschlagen.

Formelframeworks, die sich u.U. lohnen:

  • CSharpEvel
  • Flee bzw. Flee#
  • NCalc
  • Jace.net
    (haben alle Ihre Vor- und Nachteile)

LG

O
optimum Themenstarter:in
5 Beiträge seit 2016
vor 7 Jahren

Hallo Taipi88,

ja prinzipiell ist es möglich clientseitig auf irgendeinem Server eine Rechenoperation in einem Excel-File anzustoßen. (eine Office-Installation auf dem Server allerdings vorausgesetzt)

Was ist den mit VBA wäre es besser oder geeigneter? Statt eine Excel Tabelle anzusprechen einen VBA anzusprechen!?

Office ist für den Client konzipiert.

Office hat doch so eine Funktion wo mehrere User Gleichzeit an einem Dokument arbeiten können, übers Internet. Das geht doch auch über einen Server oder Peer-to-Peer.

Wie man auf die Idee kommt ein Programm für Rechenoperationen zu schreiben, welches letztendlich dann doch wieder auf Excel basiert ist mir allerdings schleierhaft...

Fazit:
Möglich ist das - machen solltest du es trotzdem nicht. Es gibt keine Funktionalität, die du in C# nicht deutlich besser machen kannst, sofern das Ganze serverseitig verwaltet sein soll.

Ich weiß es auch nicht warum sie das in Excel gemacht haben. Aber das sind zuviele Datei die Teilweise sehr komplexe rechen Algoriethmen haben und das alles zu übersetzen wäre zuviel aufwand.

Sonst hätte man das mit Python und Pandas schnell und rechen freundlich machen können.

D
985 Beiträge seit 2014
vor 7 Jahren

Wenn es dann Excel-Dateien bleiben sollen/müssen, dann mal einen Blick auf ClosedXML werfen.

Damit kann man auch die berechneten Formelwerte bekommen.

Der VBA Weg steht einem nur dann offen, wenn Excel auch installiert ist. Da ein Server aber zumeist ein Dienst ist, wird das (meistens) auch nichts, denn das findet Excel mitunter gar nicht so witzig und verweigert gerne die Zusammenarbeit.

O
optimum Themenstarter:in
5 Beiträge seit 2016
vor 7 Jahren

Hallo Sir Rufo,
danke für die links das sieht interessant aus!

Der VBA Weg steht einem nur dann offen, wenn Excel auch installiert ist. Da ein Server aber zumeist ein Dienst ist, wird das (meistens) auch nichts, denn das findet Excel mitunter gar nicht so witzig und verweigert gerne die Zusammenarbeit.

Was ist wenn ich einen Windows Server nehmen? dann kann ich auch Office instalieren!

D
985 Beiträge seit 2014
vor 7 Jahren

Was ist wenn ich einen Windows Server nehmen? dann kann ich auch Office instalieren!

Natürlich kannst du es installieren und auch tolle Dokumente Vis-a-Vis damit erstellen.

Die Probleme tauchen dann auf, wenn du diese Anwendungen aus einem Dienst heraus verwenden möchtest.

Probier es einfach mal aus (wenn du Zeit hast) dann bekommst du ein Gefühl dafür 😉

PS: Für so einen Dienst braucht man nicht zwangsläufig ein Server Betriebssystem, das geht in den meisten Fällen auch mit einem normalen Desktop-Windows.

O
optimum Themenstarter:in
5 Beiträge seit 2016
vor 7 Jahren

Die Probleme tauchen dann auf, wenn du diese Anwendungen aus einem Dienst heraus verwenden möchtest.

Ich würde dann aus einem C# Programm auf ein VBA zugreifen wollen, also das VBA soll nicht auf Port 80 lauschen 😃

Ja ich komme wohl nicht drum herum muss es wohl probieren.

Gibt es da Eveuntuell Libs oder Frameworks die mir helfen könnten?