Willkommen auf myCSharp.de! Anmelden | kostenlos registrieren
 | Suche | FAQ

Hauptmenü
myCSharp.de
» Startseite
» Forum
» Suche
» Regeln
» Wie poste ich richtig?

Mitglieder
» Liste / Suche
» Wer ist online?

Ressourcen
» FAQ
» Artikel
» C#-Snippets
» Jobbörse
» Microsoft Docs

Team
» Kontakt
» Cookies
» Spenden
» Datenschutz
» Impressum

  • »
  • Community
  • |
  • Diskussionsforum
Falsche Version für Office Interop
Christoph1972
myCSharp.de - Member

Avatar #avatar-2726.jpg


Dabei seit:
Beiträge: 212
Herkunft: NRW

Themenstarter:

Falsche Version für Office Interop

beantworten | zitieren | melden

Hallo Leute,


ich habe ein Problem mit einer Anwendung von mir, die Word- und Excel-Dokumente mittels Interop erstellt.

Auf meinem Rechner wurde im Sommer Office 2013 installiert. Wenn ich in dem betroffenen Projekt auf die Eigenschaften für den Verweis Microsoft.Office.Core gehe, bekomme ich die Version 15 angezeigt. Nun ist es so, dass es bei Rechnern mit Office 2010 zu einer FileNotFoundException kommt, da Version 15 nicht vorhanden ist.

Meine Idee war, dass ich den aktuellen Verweis lösche und einfach eine ältere Version auswähle. Mir wird noch Version 14 angeboten, nur damit ist es so, dass dann etliche Methoden ungültige Argumente haben, das Ganze scheint nicht ohne weiteres abwärtskompatibel.



Was gibt es für Möglichkeiten, das mein Programm wieder auf Rechnern mit Office 2010 läuft?

Office 2013 nachinstallieren, geht vom Lizenzmanagement momentan nicht, und schon gar nicht auf die Schnelle. Schade, das wäre eine einfache Lösung.

Das Programm wurde auf FW 4.0 umgestellt, damit besteht die Möglichkeit Embeded Interop Types zu verwenden. Aber das ist sicher mit einer erheblichen Nacharbeit verbunden. Lieber nicht…..

Auf Version 14 umstellen und sämtliche Methoden überarbeiten, ohne zu wissen ob Version 14 auf den Zielrechnern vorhanden ist. Lieber nicht…..


Habt ihr sonst noch Ideen, wie ich mein Programm wieder zum Laufen bekomme?
Gruß
Christoph
private Nachricht | Beiträge des Benutzers
david.m
myCSharp.de - Member



Dabei seit:
Beiträge: 116

beantworten | zitieren | melden

Vielleicht ist NetOffice was für Dich.

NetOffice - Ein versionsunabhängiger Wrapper für MS-Office
private Nachricht | Beiträge des Benutzers
Christoph1972
myCSharp.de - Member

Avatar #avatar-2726.jpg


Dabei seit:
Beiträge: 212
Herkunft: NRW

Themenstarter:

beantworten | zitieren | melden

Hallo,

vielen Dank für die Info! NetOffice werde ich mir bei dem nächsten Projekt definitiv vornehmen. Jetzt möchte ich das Programm nur wieder zum laufen bekommen. Es sollte eigentlich nur etwas ganz kleines an dem Programm angepasst werden und jetzt so etwas. Irgendwie muss es doch die Möglichkeit geben auf eine ältere Version zu verweisen, oder?
Gruß
Christoph
private Nachricht | Beiträge des Benutzers
Abt
myCSharp.de - Team

Avatar #avatar-4119.png


Dabei seit:
Beiträge: 15.500

beantworten | zitieren | melden

Office ist doch mittlerweile(erst 2016, oder doch schon früher?) ein InPlace-Update; es können also keine zwei verschiedene Versionen installiert sein.
private Nachricht | Beiträge des Benutzers
Christoph1972
myCSharp.de - Member

Avatar #avatar-2726.jpg


Dabei seit:
Beiträge: 212
Herkunft: NRW

Themenstarter:

beantworten | zitieren | melden

Zitat von Abt
Office ist doch mittlerweile(erst 2016, oder doch schon früher?) ein InPlace-Update; es können also keine zwei verschiedene Versionen installiert sein.

Ja, es sieht momentan danach aus. Aber wie kann man so alte Projekte betreuen? Ich bin aktuell nicht in der Lage eine lauffähige Version aus zuliefern und das ist mal übel....

Eine Überarbeitung kommt eigentlich nicht in Frage. Das Projekt ist von 2008 und soll eigentlich so bleiben wie es ist. Dennoch hätte ich das Projekt gerne wieder in einem wartbarem Zustand.
Gruß
Christoph
private Nachricht | Beiträge des Benutzers
FZelle
myCSharp.de - Experte



Dabei seit:
Beiträge: 9.955

beantworten | zitieren | melden

Zitat
Eine Überarbeitung kommt eigentlich nicht in Frage.
Zitat
Dennoch hätte ich das Projekt gerne wieder in einem wartbarem Zustand.
Das wiederspricht sich.

Das ist aber typisch in der SW Entwicklung, je weniger Zeit man vorher auf die Architektur verwendet, je mehr Zeit muss man nachher für die Pflege investieren.

Wenn das jetzt schon ein grosser aufwand ist es zu refactorieren, wird das nie besser.
Du musst entscheiden welchen Tod du sterben möchtest, jetzt arbeit reinstecken das es geht, oder es eben tot lassen.
private Nachricht | Beiträge des Benutzers
Christoph1972
myCSharp.de - Member

Avatar #avatar-2726.jpg


Dabei seit:
Beiträge: 212
Herkunft: NRW

Themenstarter:

beantworten | zitieren | melden

Zitat von FZelle
Zitat
Eine Überarbeitung kommt eigentlich nicht in Frage.
Zitat
Dennoch hätte ich das Projekt gerne wieder in einem wartbarem Zustand.
Das wiederspricht sich.

Wenn es eine Möglichkeit geben würde Version 15 auf die Ziel Rechner zu bekommen, oder ein Verweis auf eine ältere Version in VS zu setzen dann nicht.

Zitat von FZelle
Das ist aber typisch in der SW Entwicklung, je weniger Zeit man vorher auf die Architektur verwendet, je mehr Zeit muss man nachher für die Pflege investieren.

Gab es 2007/2008 andere Möglichkeiten? Die Tools mussten und müssen in der Lage sein Images in Word und Excel zu kopieren, an/in bestimmte Bereiche, da habe ich damals keine andere Lösung gefunden.

Zitat von FZelle
Wenn das jetzt schon ein grosser aufwand ist es zu refactorieren, wird das nie besser.

Das bringt schon alleine die Komplexität der Anforderung mit sich.

Zitat von FZelle
Du musst entscheiden welchen Tod du sterben möchtest, jetzt arbeit reinstecken das es geht, oder es eben tot lassen.

Es soll/muss noch einige Jahre wartbar sein. Ich möchte nicht mehr soviel Arbeit in ein altes Projekt stecken. Wenn, dann möchte eine komplette Überarbeitung, zu einem geeigneten Zeitpunkt. Den Tot jetzt zu sterben ist mangels Kapazitäten nicht möglich. Zur not muss der Auftraggeber Office 2013 besorgen, was natürlich nicht schön wäre.

Ja ja, immer diese Abhängigkeiten, die holen ein früher oder später immer ein....

Weitere produktive Vorschläge nehme ich gerne entgegen!
Dieser Beitrag wurde 1 mal editiert, zum letzten Mal von Christoph1972 am .
Gruß
Christoph
private Nachricht | Beiträge des Benutzers
san-software
myCSharp.de - Member



Dabei seit:
Beiträge: 96

beantworten | zitieren | melden

Das Zauberwort, das Du hier suchst ist Latebinding.
Stelle Dein Anbinden von Office darauf um und dann sollte eigentlich jede Office Version damit arbeiten.

NetOffice arbeitet übrigens auch mit Latebinding.
private Nachricht | Beiträge des Benutzers
FZelle
myCSharp.de - Experte



Dabei seit:
Beiträge: 9.955

beantworten | zitieren | melden

Ja, es gab schon damals das Late Binding.
private Nachricht | Beiträge des Benutzers
Alf Ator
myCSharp.de - Member



Dabei seit:
Beiträge: 629

beantworten | zitieren | melden

Zitat von Christoph1972
Zur not muss der Auftraggeber Office 2013 besorgen, was natürlich nicht schön wäre.

Hallo Christoph1972,

du wirst das ohne erheblichen Aufwand nicht in den Griff bekommen.
Deswegen:
1. Dein Auftraggeber muss sich aktuelle Office-Versionen besorgen
2. NetOffice implementieren

Zitat von Christoph1972
Die Tools mussten und müssen in der Lage sein Images in Word und Excel zu kopieren, an/in bestimmte Bereiche, da habe ich damals keine andere Lösung gefunden.

Alternativ könntest du dir eine Drittanbieter-Software besorgen, die dass kann. Z.b. Aspose

Gruß, Alf
private Nachricht | Beiträge des Benutzers
Christoph1972
myCSharp.de - Member

Avatar #avatar-2726.jpg


Dabei seit:
Beiträge: 212
Herkunft: NRW

Themenstarter:

beantworten | zitieren | melden

Vielen Dank erstmal an alle für die Unterstützung. Es kommt jetzt eine neue Office Version, damit ist das Problem für die nächste Zeit behoben.

@Alf
Eigentlich wollte ich die neue Version mit NetOffice machen. Verstehe ich dich richtig, Images einfügen geht damit nicht? Das wäre ungünstig und Aspose ist leider sehr teuer. Nun gut, wenn eine Neuauflage ansteht, muss noch mal eine neue Betrachtung erfolgen, vielleicht gibt es bis dahin weitere Möglichkeiten.
Gruß
Christoph
private Nachricht | Beiträge des Benutzers
Alf Ator
myCSharp.de - Member



Dabei seit:
Beiträge: 629

beantworten | zitieren | melden

Zitat von Christoph1972
@Alf
Verstehe ich dich richtig, Images einfügen geht damit nicht?

Du verstehst mich falsch. Zur Klarstellung: NetOffice ist ein Wrapper für Interop.Office. Damit kannst du alles machen wie bisher, nur einfacher und besser.

Ich komme beim besten Willen nicht drauf, wie du mich da falsch verstehen konntest.
private Nachricht | Beiträge des Benutzers
weismat
myCSharp.de - Member



Dabei seit:
Beiträge: 872
Herkunft: Frankfurt am Main

beantworten | zitieren | melden

Bei einer Anpassung würde ich auf jeden Fall auf Office Open XML umstellen - Interop ist nicht 100% stabil und auf Windows Server oder Azure nicht unterstützt - außerdem kannst Du dann bei den SW-Lizenzen sparen.
Dieser Beitrag wurde 1 mal editiert, zum letzten Mal von weismat am .
private Nachricht | Beiträge des Benutzers
Christoph1972
myCSharp.de - Member

Avatar #avatar-2726.jpg


Dabei seit:
Beiträge: 212
Herkunft: NRW

Themenstarter:

beantworten | zitieren | melden

Zitat von Alf Ator
Zitat von Christoph1972
Ich komme beim besten Willen nicht drauf, wie du mich da falsch verstehen konntest.

Alternativ könntest du dir eine Drittanbieter-Software besorgen, die dass kann. Z.b. Aspose

Das hat sich für mich so angehört als wenn das nicht geht. Gut das ich noch mal gefragt habe!
Zitat von weismat
Bei einer Anpassung würde ich auf jeden Fall auf Office Open XML umstellen - Interop ist nicht 100% stabil und auf Windows Server oder Azure nicht unterstützt - außerdem kannst Du dann bei den SW-Lizenzen sparen.

Kann man damit Images einfügen?
Gruß
Christoph
private Nachricht | Beiträge des Benutzers
Taipi88
myCSharp.de - Member

Avatar #avatar-3220.jpg


Dabei seit:
Beiträge: 1.029
Herkunft: Mainz

beantworten | zitieren | melden

Hi,

OpenXML ist das aktuelle Dateiformat und ist selbstverständlich in der Lage auch Images zu speichern und in bestehende Dokumente einzufügen. OpenXML ist von der Implementierung definitiv aufwändiger - hat aber auch einige Vorteile:
- schneller
- multithreading möglich (und damit auch Serverbetrieb)
- es wird auf dem jeweiligen Rechner kein Office benötigt

Du kannst dir ja bei Gelegenheit mal ein paar einfache Beispiele mit dem OpenXML-SDK anschauen um ein Gefühl für den Aufwand zu bekommen.

NetOffice dahingegen ist von außen her betrachtet eine Kopie der Interop-Assemblies, die du derzeit verwendest. Eine Umstellung auf NetOffice halte ich für wenig umständlich oder aufwändig - wenngleich hier sicher einige Tests gefahren werden müssen. Prinzipiell: Verweise austauschen, Usings austauschen - und das Meiste sollte gut funktionieren. Vorteil: Du bist nicht mehr an bestimmte Office-Versionen gebunden. (Achtung: Auch hier gibt es Einschränkungen - die API hat sich halt über die Jahre durchaus leicht gewandelt)

NetOffice kann somit alles, was Interop kann - OpenXML prinzipiell auch - aber eben nur auf Dateibasis - Änderungen in geöffneten Files oder schlicht Anwendungsautomatisierung von Office-Produkten wirst du mit OpenXML nicht können.

LG
private Nachricht | Beiträge des Benutzers
weismat
myCSharp.de - Member



Dabei seit:
Beiträge: 872
Herkunft: Frankfurt am Main

beantworten | zitieren | melden

OpenXML ist nicht unbedingt schwerer als Interop, es ist nur eine komplett andere Sichtweise.
Bei Interop automatisierst Du Aktionen in der GUI, bei OpenXML musst Du mehr auf Basis des Dokuments denken.
Andre Krämer hat einen ganz ordentlichen Vortrag mit Beispiel-Code dazu - das ist für Word.
private Nachricht | Beiträge des Benutzers
Christoph1972
myCSharp.de - Member

Avatar #avatar-2726.jpg


Dabei seit:
Beiträge: 212
Herkunft: NRW

Themenstarter:

beantworten | zitieren | melden

Herzlichen Dank für die ganzen Infos! Wenn das Projekt wieder auf den Plan kommt, werde ich mir diesen Thread wieder vorknüpfen!
Gruß
Christoph
private Nachricht | Beiträge des Benutzers
System.ComponentModel
myCSharp.de - Member



Dabei seit:
Beiträge: 6

beantworten | zitieren | melden

Wenn es eine Möglichkeit gibt an Office Automatisierung vorbei zu gehen würde ich dir in jedem Fall dazu raten.

Sofern du einfach nur ein Dokument generieren willst, braucht man dafür keine Fremdsteuerung der Office Anwendungen mehr(ab> Office 2007). Mit Ausnahme von PowerPoint gibt es dafür auch genug Open Source Projekte die den Umstieg hier einfach machen.

NetOffice ist ein Spezialfall und eigentlich mehr auf Addins ausgerichtet. Syntaktisch und sementisch ist es aber identisch zu den Interop Assemblies und setzt auf Automatisierung. Im Idealfall muss man hier nur ein Verweise und usings erstetzen um bestehenden Interop Code zum laufen zu bringen. Haben wir bei uns so gemacht und nie Probleme erfahren.
simulation data can take you only so far...
"the only test for a combat vessel is combat."
private Nachricht | Beiträge des Benutzers