none
Microsoft.Excel.Interop.Excel - Office Version unabhängig programmieren? RRS feed

  • 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

    Mittwoch, 24. November 2010 13:25

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 = True

     

    Hier 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
    Mittwoch, 24. November 2010 14:05

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 = True

     

    Hier 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
    Mittwoch, 24. November 2010 14:05
  • 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 = True

     

    Hier 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!

    Mittwoch, 24. November 2010 15:52