Benutzer mit den meisten Antworten
Microsoft.Excel.Interop.Excel - Office Version unabhängig programmieren?

Frage
-
Hallo,
ich hab folgendes Problem: Bei uns in der Firma wurde teilweise von Office 2003 auf Office 2007 umgestellt, aber bis jetzt nur teilweise.
Ich habe ein kleines Modul geschrieben, was Daten aus einem DataGridView direkt in Excel öffnen soll. Das funktioniert soweit.
Als IMPORT gebe ich an:
Imports Excel = Microsoft.Office.Interop.Excel
Als Verweise gebe ich an: Microsoft Excel 12.0 Object Library
Ich habe also Office 2007 auf meinem Entwicklerrechner. Jetzt ist das Problem, dass das Programm nicht gestartet werden kann auf Rechnern, auf denen noch Office 2003 installiert ist, weil die mit dem Verweis nichts anfangen können und deshalb Fehler schmeißen. Ich kann aber auch nicht noch zusätzlich den Verweis auf Office 2003 setzen, also auf Microsoft Excel 11.0 Object Library, weil ich die Dateien nicht auf meinem Rechner habe und ich so gar nicht kompilieren kann.
Gibt es da irgendeine Lösung? Einen universellen Verweis? Die Möglichkeit im direkt im Programm nach Überprüfung die richtige (vorhandene) Version zu wählen? Irgendwas?
Hab ich grundsätzlich einen Denkfehler? :-)
Vielen Dank und schöne Grüße
- Bearbeitet Robert BreitenhoferModerator Mittwoch, 24. November 2010 15:18 Titel Korrektur
Antworten
-
Hallo,
ich gehe mal davon aus, dass die Datein im Unternehmen alle noch im xls-Format vorliegen, sonst könnten die Nutzer ja nicht alle damit arbeiten.
Daher wird deine Programmierung ja auch an dieses Format angepasst worden sein.
Wenn du nur den 11.0-Verweis setzt, sollte es eigentlich ohne Probleme bei beiden funktionieren. Habe grad selbst nochmal getestet. Ich habe Version 14.0 auf dem Rechner, kann aber mit dem 12.0-Verweis genauso arbeiten.
Oder gänzlich ohne Verweise via Latebinding:
Dim ex As Object = New Object
ex = CreateObject("Excel.Application") ' "Excel.Application.11" für Version 11, ist aber nicht erforderlich
ex.Workbooks.Open("X:\Studium\Test.xlsx")
ex.visible = TrueHier wäre aber der Nachteil, dass kein Intellisense verfügbar wäre. Natürlich könntest du das ganze auch so machen wie bisher und am Ende einfach die ersten zeilen ändern.
Cheers Jörn Bosse, Microsoft Junior Studentpartner- Als Antwort markiert Peter77Lustig Mittwoch, 24. November 2010 15:44
Alle Antworten
-
Hallo,
ich gehe mal davon aus, dass die Datein im Unternehmen alle noch im xls-Format vorliegen, sonst könnten die Nutzer ja nicht alle damit arbeiten.
Daher wird deine Programmierung ja auch an dieses Format angepasst worden sein.
Wenn du nur den 11.0-Verweis setzt, sollte es eigentlich ohne Probleme bei beiden funktionieren. Habe grad selbst nochmal getestet. Ich habe Version 14.0 auf dem Rechner, kann aber mit dem 12.0-Verweis genauso arbeiten.
Oder gänzlich ohne Verweise via Latebinding:
Dim ex As Object = New Object
ex = CreateObject("Excel.Application") ' "Excel.Application.11" für Version 11, ist aber nicht erforderlich
ex.Workbooks.Open("X:\Studium\Test.xlsx")
ex.visible = TrueHier wäre aber der Nachteil, dass kein Intellisense verfügbar wäre. Natürlich könntest du das ganze auch so machen wie bisher und am Ende einfach die ersten zeilen ändern.
Cheers Jörn Bosse, Microsoft Junior Studentpartner- Als Antwort markiert Peter77Lustig Mittwoch, 24. November 2010 15:44
-
Hallo,
ich gehe mal davon aus, dass die Datein im Unternehmen alle noch im xls-Format vorliegen, sonst könnten die Nutzer ja nicht alle damit arbeiten.
Daher wird deine Programmierung ja auch an dieses Format angepasst worden sein.
Wenn du nur den 11.0-Verweis setzt, sollte es eigentlich ohne Probleme bei beiden funktionieren. Habe grad selbst nochmal getestet. Ich habe Version 14.0 auf dem Rechner, kann aber mit dem 12.0-Verweis genauso arbeiten.
Oder gänzlich ohne Verweise via Latebinding:
Dim ex As Object = New Object
ex = CreateObject("Excel.Application") ' "Excel.Application.11" für Version 11, ist aber nicht erforderlich
ex.Workbooks.Open("X:\Studium\Test.xlsx")
ex.visible = TrueHier wäre aber der Nachteil, dass kein Intellisense verfügbar wäre. Natürlich könntest du das ganze auch so machen wie bisher und am Ende einfach die ersten zeilen ändern.
Cheers Jörn Bosse, Microsoft Junior Studentpartner
Also deine erste Idee hab ich anscheinend nicht ganz verstanden, da ich beim Projekt irgendwie nicht mehr den Verweis auf 11 setzen kann, da die Version gar nicht mehr auf meinem Rechner ist.Aber deine zweite Idee alles ohne Verweise zu erstellen, hat funktioniert. Ich habe also deine ersten beiden Zeilen
Dim ex As Object = New Object
ex = CreateObject("Excel.Application")verwendet und die Excel Application, Workbook und Worksheet als Object erstellt und dann konnte ich den Rest von meinem Code fast ohne Änderung weiterbenutzen.
Vielen Dank!