Laden...

C# Anwendung zum Fernsteuern von Office (Word/Excel/...)

Erstellt von m.grauber vor 8 Jahren Letzter Beitrag vor 8 Jahren 4.377 Views
M
m.grauber Themenstarter:in
343 Beiträge seit 2010
vor 8 Jahren
C# Anwendung zum Fernsteuern von Office (Word/Excel/...)

Word, Excel und eventuell später Outlook sollen aus einer C# WPF Anwendung ferngesteuert werden (Öffnen, Text/Objekte einfügen, das Schließen des Dokuments durch den Benutzer abfangen etc.) und ich habe keine so richtig aktuellen und themenübergreifende Infos dazu gefunden (auch hier ist eine detaillierte Info von Rainbird noch aus dem Jahr 2006).

Es soll dazu kein Zusatztool/Zusatzcontrol verwendet werden.

  • Welcher Weg ist bei der Automation der neuste Stand der Technik?

  • Welchen Weg geht Microsoft in absehbarer Zukunft? Wird es eine andere Technik dafür geben oder wird die Automation evtl. sogar irgendwann eingestellt, weil man sich nur noch hauptsächlich um die Belange der Privatpersonen kümmert?

  • Verschiedene Word/Excel/Office Versionen sollten unterstützt werden:

• Gibt es Code, der bei allen Word/Excel/Office-Versionen 2010/2013 läuft (und evtl. auch in den Folgeversionen lauffähig bleiben wird – ja, sicher weiß das natürlich niemand.)?

• Was ist, wenn die eigene C# Anwendung auf einem Windows-Tablet (mit Tastatur) installiert wird und dort nur das „Outlook RT“ installiert wurde. Funktioniert die Automation dann trotzdem?

• Ich habe mich auch etwas über „Late Binding“ informiert (kein IntelliSense-Unterstützung beim Programmieren, keine Syntax-Prüfung beim Kompilieren, keine eingebauten Konstanten nutzbar). Sollte man diesen Weg gehen, damit man alle Word/Excel/Outlook-Versionen unterstützt?

  • Wenn die eigene C# Anwendung als 32bit kompiliert wird, sollte Office 32 Bit unterstützt werden, wenn sie 64bit kompiliert wird, sollte auch das Office 64 Bit unterstützt werden. Alles am besten in einem einzigen Code. Der Kunde setzt dann je nach dem entweder die 32 Bit oder die 64 Bit Version ein.

  • Wie testet ihr den Code dann 32/64bit auf unterschiedlichen Office-Versionen? – Theoretisch müsste man für jede Kombination auf einen Rechner installieren und dazu noch das VS, um den Code anzupassen? Das ist doch sehr aufwendig? – Es soll aber trotzdem ohne Fremd-Control gemacht werden.

  • Mit einer anderen Entwicklungsumgebung hatte ich bei der Automation Probleme (allerdings erst ab Office 2010; alle Office-Vorversionen funktionieren einwandfrei), wenn ich das Word-Dokument per Automation geöffnet habe, es vom Benutzer bearbeitet wurde und ich die Verbindung zum Word bis zum Schließen gehalten habe, um nach dem Schließen von Word wieder in mein Programm zurück zu gelangen und weiteren Code abzuarbeiten. Sporadisch riss dort manchmal die Verbindung ab obwohl das Dokument noch offen war – wahrscheinlich weil Word irgendwelche Ressourcen aufgeräumt hat. Habt Ihr solche Probleme ebenfalls – evtl. auch erst nach längerer Zeit oder einem Rechner Standby?

>>>>>>>> Mit welchem Weg der all das obere abdeckt kann man am besten arbeiten? Gibt es irgendwo Codesnippets/eine einfache und sehr ausführliche gesamtheitliche Info dazu?

Dankesehr!

Mfg
Michael

PS: Ich stelle nur Fragen, wenn ich in Büchern, im Web und in Foren nichts gefunden habe. Dumme Fragen bitte ich zu entschuldigen!

:] VISUAL STUDIO 2017 + .NET FRAMEWORK 4.5 + SQL-Server 2012 :]

16.806 Beiträge seit 2008
vor 8 Jahren

Schau Dir OpenXML an. Damit muss man die Anwendungen nicht mehr automatisieren.
Da biste sicherlich bei der schon vorangegangenen Recherche drüber gestolpert.

M
m.grauber Themenstarter:in
343 Beiträge seit 2010
vor 8 Jahren

Hallo Abt!

Danke. Habe ich gelesen - aber damit kann ich Dokumente auch ohne Benutzereingriffe manipulieren, wenn die C# Anwendung z. B. auf dem Server liegt.

Ich möchte aber während der Benutzer an einem Dokument arbeitet, auf die Word/Excel/Outlook - Instanz einen Zugriff haben und interagieren. Ich hatte dies etwas im Punkt "Word geöffnet lassen und das Schließen abfangen" beschzieben.

Es geht mir also primär nicht nur um das Verändern von Dokumentenihnalten, sondern die Fernsteuerung von Word/Excel/Outlook aus C# heraus. Das das über OpenXML möglich ist, habe ich noch nirgend wo gelesen - Gibt's dazu einen guten Artikel, wenn es so ist?

Wäre dann OpenXML die zukunftsfähige Technik um die beschriebenen Punkte umzusetzen?

Dankesehr!

Mfg
Michael

PS: Ich stelle nur Fragen, wenn ich in Büchern, im Web und in Foren nichts gefunden habe. Dumme Fragen bitte ich zu entschuldigen!

:] VISUAL STUDIO 2017 + .NET FRAMEWORK 4.5 + SQL-Server 2012 :]

M
53 Beiträge seit 2008
vor 8 Jahren

Moin m.grauber,

OpenXml ist für denen Anwendungsfall nicht geeignet, da du damit nur Dokumente bearbeiten kannst. Die Anwendung kannst du damit nicht steuern. Sonst ist Office - Automation schon das richtige Stichwort, unter dem du alles finden solltest.

Gruß
muhtanten

5.657 Beiträge seit 2006
vor 8 Jahren

Siehe dazu auch die Doku zum Microsoft.Office.Interop.Excel-Namespace

Christian

Weeks of programming can save you hours of planning

1.029 Beiträge seit 2010
vor 8 Jahren

Hi,

nun - wenn du mehrere Versionen unterstützen willst - wäre LateBinding durchaus sinnig.

Um das ganze etwas einfacher zu machen kannst du z.B. NetOffice - Ein versionsunabhängiger Wrapper für MS-Office benutzen.

Ist sehr komfortabel... Was in Zukunft mit der Office-API passiert - das weiß nur Microsoft - auf der anderen Seite: Das ganze wird bereits seit Ewigkeiten so zur Verfügung gestellt und es gibt diverse größere Projekte die darauf bauen...

LG

M
m.grauber Themenstarter:in
343 Beiträge seit 2010
vor 8 Jahren

Dankeschön für die so zahlreichen Antworten!

Ich habe mich nun für das Late Binding entschieden, da ich nicht schon wieder ein Fremdtool nutzen möchte.

Hier aber noch einige Fragen, die evtl. jemand beantworten kann:

• Was ist, wenn die eigene C# Anwendung auf einem Windows-Tablet (mit Tastatur) installiert wird und dort nur das „Outlook RT“ installiert wurde.
-> Funktioniert die Automation per Late Binding dann trotzdem? - Ich habe leider kein Tablet zum Testen.

  • Wenn die eigene C# Anwendung als 32bit kompiliert wird, sollte Office 32 Bit unterstützt werden, wenn sie 64bit kompiliert wird, sollte auch das Office 64 Bit unterstützt werden. Alles am besten in einem einzigen Code. Der Kunde setzt dann je nach dem entweder die 32 Bit oder die 64 Bit Version ein.
    -> Ich habe gerade auf dem Entwicklungsrechner nur ein Office32-Bit installiert. Ich müsste demnach die Methoden noch für 64 Bit anpassen?

  • Mit einer anderen Entwicklungsumgebung hatte ich bei der Automation Probleme (allerdings erst ab Office 2010; alle Office-Vorversionen funktionieren einwandfrei), wenn ich das Word-Dokument per Automation geöffnet habe, es vom Benutzer bearbeitet wurde und ich die Verbindung zum Word bis zum Schließen gehalten habe, um nach dem Schließen von Word wieder in mein Programm zurück zu gelangen und weiteren Code abzuarbeiten. Sporadisch riss dort manchmal die Verbindung ab obwohl das Dokument noch offen war – wahrscheinlich weil Word irgendwelche Ressourcen aufgeräumt hat. Habt Ihr solche Probleme ebenfalls – evtl. auch erst nach längerer Zeit oder einem Rechner Standby?
    -> Ist Euch so etwas schon mal mit Late Binding passiert oder muss ich mir da keine Gedanken machen?

Dankesehr!

Mfg
Michael

PS: Ich stelle nur Fragen, wenn ich in Büchern, im Web und in Foren nichts gefunden habe. Dumme Fragen bitte ich zu entschuldigen!

:] VISUAL STUDIO 2017 + .NET FRAMEWORK 4.5 + SQL-Server 2012 :]

16.806 Beiträge seit 2008
vor 8 Jahren

Der Office Bereich in diesem Forum ist sehr klein und diese Fragen sind sehr spezifisch.
Ich sag das nicht gerne, aber dass Du hier eine wirklich verlässliche Aussage dazu bekommst ist sehr gering. Es gibt kaum .NET Entwickler, die sich mit allen Office Versionen und vor allem mit der Automation auskennen.
Nicht umsonst ist NetOffice so erfolgreich und hat schon von dem ein oder anderen Microsoft-Mitarbeiter Anerkennung erhalten.

Wegen der Bit-Problematik musst Du wohl verschiedene Applikationen erstellen; also 32- und 64 Bit.
Du musst aber die Methoden vermutlich nicht extra neu schreiben; eben nur neu kompilieren.

Ob sich Office RT via LateBinding überhaupt ansprechen lässt und COM hier unterstützt wird; was hast Du denn dazu in Google gefunden?
Office RT hat eine JavaScript API - vielleicht ist das eben der Ersatz für COM auf RT?

A
764 Beiträge seit 2007
vor 8 Jahren

Hallo m.grauber,

wir benutzen in meinem Betrieb Interop, zur Fernsteuerung von Office, wollen es aber nach und nach abschaffen, da es fehleranfällig und langsam ist.

Ich habe mich nun für das Late Binding entschieden, da ich nicht schon wieder ein Fremdtool nutzen möchte.

Ich habe mir NetOffice angeschaut und war recht angetan. Imho spricht nichts dagegen das zu verwenden. Würden wir nicht von Interop wegkommen wollen, hätte ich NetOffice als Grundlage für die Fernsteuerung eingeführt. Ich bin kein Freund davon, das Rad ständig neu zu erfinden.

  • Wenn die eigene C# Anwendung als 32bit kompiliert wird, sollte Office 32 Bit unterstützt werden, wenn sie 64bit kompiliert wird, sollte auch das Office 64 Bit unterstützt werden. Alles am besten in einem einzigen Code. Der Kunde setzt dann je nach dem entweder die 32 Bit oder die 64 Bit Version ein.
    -> Ich habe gerade auf dem Entwicklungsrechner nur ein Office32-Bit installiert. Ich müsste demnach die Methoden noch für 64 Bit anpassen?

Schau dir mal an, was NetOffice in der FAQ dazu sagt. Imho ist das Problem dort auch schon gelöst.

  • Mit einer anderen Entwicklungsumgebung hatte ich bei der Automation Probleme (allerdings erst ab Office 2010;

Office bzw Interop.Office versucht ja immer abwärtskompatibel zu sein und muss dafür intern immer mehr Krücken verwenden. Irgendwann geht das halt nicht mehr. Office2013 verhält sich anders als Office2010. Deswegen haben wir bei uns alle Office-Versionen älter als Office2013 abgeschafft.

alle Office-Vorversionen funktionieren einwandfrei), wenn ich das Word-Dokument per Automation geöffnet habe, es vom Benutzer bearbeitet wurde und ich die Verbindung zum Word bis zum Schließen gehalten habe, um nach dem Schließen von Word wieder in mein Programm zurück zu gelangen und weiteren Code abzuarbeiten. Sporadisch riss dort manchmal die Verbindung ab obwohl das Dokument noch offen war – wahrscheinlich weil Word irgendwelche Ressourcen aufgeräumt hat. Habt Ihr solche Probleme ebenfalls – evtl. auch erst nach längerer Zeit oder einem Rechner Standby?

Das tritt auch aber Version 2013 auf. Hier ein Link dazu:
http://blogs.artinsoft.net/Mrojas/archive/2012/09/28/Office-Interop-and-Call-was-rejected-by-callee.aspx

Gruß, Alf

M
m.grauber Themenstarter:in
343 Beiträge seit 2010
vor 8 Jahren

Hallo Abt und Alf!

Danke nochmals für die guten Informationen und auch den Link zum Artikel! Habe inzwischen viel mit dem Latebinding gemacht und werde auch aus diesem Grund erst einmal dabei bleiben.

Ich lasse den Fall erst einmal offen, weil sich evtl. ein kleines Problem abzeichnet.

Schöne Grüße!

Mfg
Michael

PS: Ich stelle nur Fragen, wenn ich in Büchern, im Web und in Foren nichts gefunden habe. Dumme Fragen bitte ich zu entschuldigen!

:] VISUAL STUDIO 2017 + .NET FRAMEWORK 4.5 + SQL-Server 2012 :]