Benutzer mit den meisten Antworten
Verweise "lokal" ablegen

Frage
-
Hallo Meister(innen),
in meinem aktuellen Projekt benutze ich Verweise auf Microsoft Excel. Dies ist ausdrücklich von Nöten, weil die Nutzer, meine Kollegen, unbedingt Daten nach Excel "exportieren" wollen. Manch Rechner ist mit der Office 2003, andere mit der Office 2007 ausgestattet. Meine Frage ist, wie man beide Verweise (Microsoft Excel 12.0 Object Library und Microsoft Excel 11.0 Object Library) lokal im Projekt ablegt, so dass sie immer zur Verfügung stehen? Kann man auch abfragen, welche Office-Version installiert ist? Tausend Dank im Voraus für Eure Hilfe!
Gruß
mjanz
Antworten
-
Hallo Marcus,
hier mal ein schnell geschriebenes Beispiel:
Imports Excel = Microsoft.Office.Interop.Excel Imports System.Runtime.InteropServices Public Class OfficeInfo Public Enum OfficeVersion NotInstalled Office11 = 11 Office12 = 12 End Enum Public Shared Function GetExcelVersion() As OfficeVersion Try Dim lXl As New Excel.Application() Dim lVersion As String lVersion = lXl.Version lXl.Quit() Marshal.ReleaseComObject(lXl) GC.Collect() GC.WaitForPendingFinalizers() Select Case lVersion Case "11.0" Return OfficeVersion.Office11 Case "12.0" Return OfficeVersion.Office12 End Select Catch ex As Exception Return OfficeVersion.NotInstalled End Try End Function End Class Public Class Form1 Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click MsgBox(OfficeInfo.GetExcelVersion().ToString()) End Sub End Class
Setzt voraus, dass der Verweis auf das Excel Interop Assembly gesetzt ist. Dabei wird jeweils eine neue Excel Instanz gestartet, was einen gewissen Overhead darstellt, was bei dieser Lösung zu beachten wäre. Alternative wäre das Abfragen der Registry in HKLM\Software\Microsoft\Office finden sich für jede Version separate Verzeichnisse. Mir ist aber spontan keine Lösung bekannt hieraus die aktuell installierte bzw. aktive Office Installation zu ermitteln.
Thorsten Dörfler
Microsoft MVP Visual Basic- Als Antwort markiert mjanz Mittwoch, 27. Januar 2010 19:49
Alle Antworten
-
Hallo,
wenn Du keine neuen Funktionen von Office 2007 benötigst, kannst Du mit den Office 2003 PIAs auch Office/Excel 2007 automatisieren. Selbst der umgekehrte Weg wäre möglich, ist aber nicht supported.
Feststellen, welche Version installiert ist, kannst Du am einfachsten, indem Du eine Excel.Application Instanz erstellst und die Version Eigenschaft abfragst. Kann keine Instanz erstellt werden, ist Excel vermutlich nicht (richtig) installiert.
Thorsten Dörfler
Microsoft MVP Visual Basic -
Hallo Marcus,
hier mal ein schnell geschriebenes Beispiel:
Imports Excel = Microsoft.Office.Interop.Excel Imports System.Runtime.InteropServices Public Class OfficeInfo Public Enum OfficeVersion NotInstalled Office11 = 11 Office12 = 12 End Enum Public Shared Function GetExcelVersion() As OfficeVersion Try Dim lXl As New Excel.Application() Dim lVersion As String lVersion = lXl.Version lXl.Quit() Marshal.ReleaseComObject(lXl) GC.Collect() GC.WaitForPendingFinalizers() Select Case lVersion Case "11.0" Return OfficeVersion.Office11 Case "12.0" Return OfficeVersion.Office12 End Select Catch ex As Exception Return OfficeVersion.NotInstalled End Try End Function End Class Public Class Form1 Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click MsgBox(OfficeInfo.GetExcelVersion().ToString()) End Sub End Class
Setzt voraus, dass der Verweis auf das Excel Interop Assembly gesetzt ist. Dabei wird jeweils eine neue Excel Instanz gestartet, was einen gewissen Overhead darstellt, was bei dieser Lösung zu beachten wäre. Alternative wäre das Abfragen der Registry in HKLM\Software\Microsoft\Office finden sich für jede Version separate Verzeichnisse. Mir ist aber spontan keine Lösung bekannt hieraus die aktuell installierte bzw. aktive Office Installation zu ermitteln.
Thorsten Dörfler
Microsoft MVP Visual Basic- Als Antwort markiert mjanz Mittwoch, 27. Januar 2010 19:49