Excel Verweis überprüfen

  • VB.NET

Es gibt 3 Antworten in diesem Thema. Der letzte Beitrag () ist von charlie883.

    Excel Verweis überprüfen

    Guten morgen an alle,

    Ich habe ein Programm geschrieben mit dem ich eine Excel Tabelle erstellen kann, soweit so gut.
    Dafür habe ich einen Verweis auf die Microsoft Excel 12.0 Object Library vorgenommen (Office 2007).
    Jetzt hat aber natürlich nicht jeder Office 2007 bzw. überhaupt kein Office installiert.
    Dadurch stürtzt mein Programm auf solchen Rechnern ab.
    Gibt es eine möglichkeit einen Verweis vorher auf "existenz" zu prüfen ?
    Gibt es eine möglichkeit einen älteren Verweis einzubauen zb. 10.0 und wenn ja brauche ich dafür ein älteres Office ?
    It's not a bug, it's a feature

    mys3lf schrieb:


    Gibt es eine möglichkeit einen Verweis vorher auf "existenz" zu prüfen ?
    Gibt es eine möglichkeit einen älteren Verweis einzubauen zb. 10.0 und wenn ja brauche ich dafür ein älteres Office ?


    Such doch nach dem Excel Programm. Beispielsweise in der Registry.
    in diesem Falle empfehle ich ausnahmeweise Option Strict Off, aber nur für ein Modul, und nur für die Release-Version.

    Also entwickeln für die Excel-Version, die auf dem Entwicklungsrechner installiert ist, dabei höhere Features natürlich meiden.
    Und alle Excel-Zugriffe in dem einen dirty Modul zusammenfassen.

    Wenndedann alles fertig hast, dort Strict Off einstellen und mit anneren Versionen testen.

    Hier habichmal was glaub sauberes gebastelt:

    VB.NET-Quellcode

    1. 'Option Strict Off
    2. '#Const StrictOff = True
    3. #If StrictOff Then
    4. Imports Application = System.Object
    5. Imports Workbook = System.Object
    6. Imports Worksheet = System.Object
    7. Imports Range = System.Object
    8. #Else
    9. Imports Microsoft.Office.Interop
    10. Imports Application = Microsoft.Office.Interop.Excel.Application
    11. Imports Workbook = Microsoft.Office.Interop.Excel.Workbook
    12. Imports Worksheet = Microsoft.Office.Interop.Excel.Worksheet
    13. Imports Range = Microsoft.Office.Interop.Excel.Range
    14. #End If
    15. Public Module modExcel
    16. Public Function ExcelExists() As Boolean
    17. Dim Xl As Application
    18. Try
    19. 'läufts bereits?
    20. Xl = DirectCast(GetObject(, "Excel.Application"), Application)
    21. Catch ex As Exception
    22. Try
    23. Xl = DirectCast(CreateObject("Excel.Application"), Application)
    24. Xl.Quit()
    25. Catch ex2 As Exception
    26. Return False
    27. End Try
    28. End Try
    29. 'aufräumen wichtig
    30. System.Runtime.InteropServices.Marshal.FinalReleaseComObject(Xl)
    31. Return True
    32. End Function
    33. End Module

    um von Entwicklung auf Release umzuschalten, einfach die ersten beiden Zeilen ein/aus-kommentieren. Durch die #ProzessorDirektiven bedeuten dann die Typen was verschiedenes, sodaß du am Code nix ändern mußt. Dann aber auch nur mit diesen speziellen Typen arbeiten (vmtl. müssen noch weitere Excel-Typen aufgenommen werden)