Microsoft.Office.Interop.Excel-Verweis unwirksam

  • VB.NET
  • .NET 7–8

Es gibt 59 Antworten in diesem Thema. Der letzte Beitrag () ist von Haudruferzappeltnoch.

    Microsoft.Office.Interop.Excel-Verweis unwirksam

    Liebe Helfergemeinde,

    ich versuche, mit einem simplen Dataset.readXml-Befehl eine gespeicherte Tabelle in eine Excel-Tabelle zu "transferieren".
    Die Hürde bisher ist, dass ich - trotz der Hinzufügung des Microsoft.Office.Interop.Excel-Verweis' (zuletzt Version 8.0) - den Fehler:
    BC30002 Der Typ "Microsoft.Office.Interop.Excel.Application" ist nicht definiert
    erhalte.
    Zudem:
    Warnung MSB3284 Der Dateipfad für die Typbibliothek "00020813-0000-0000-c000-000000000046" Version 1.0 kann nicht abgerufen werden.
    Bibliothek nicht registriert. (Ausnahme von HRESULT: 0x8002801D (TYPE_E_LIBNOTREGISTERED))

    Offenbar bewirkt der Verweis nicht, dass jene Excel-Bibliothek korrekt geladen wird.

    Was kann hier helfen?
    Vielen Dank für jedwede Hilfe !
    Ist Dein Projekt auf ZielCPU x64 oder Any eingestellt? Bei mir klappt Office nur bei x86 Projekten.
    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „VaporiZed“, mal wieder aus Grammatikgründen.

    Aufgrund spontaner Selbsteintrübung sind all meine Glaskugeln beim Hersteller. Lasst mich daher bitte nicht den Spekulatiusbackmodus wechseln.
    Ich nehme an, dass ich dies unter "Optionen" nachsehen kann, finde es aber dort nirgends.
    Wäre dankbar für einen Tip, wo ich diese Einstellung finde.

    Sorry - wie blöd bin ich - ist ja direkt ablesbar:
    Es steht auf "Any CPU"

    Und wie kann ich das Projekt auf "x86" umstellen (wenn dies überhaupt geht)?

    Habe es jetzt gefunden und auf x86 umgestellt. Werde berichten, was sich bzw. ob sich das Verhalten ändert. Danke bisher!

    Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von „woofy49“ ()

    woofy49 schrieb:

    Es steht auf "Any CPU"
    Mach in den Projekt-Eigenschaften bei Kompilieren einen Haken rein bei 32 Bit bevorzugen.
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    Das ist aber jetzt ein anderes Problem. Wenn er worksheets kennt, ist Excel eingebunden. Von welchem Typ ist Worksheet in Deinem Code? Object?
    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „VaporiZed“, mal wieder aus Grammatikgründen.

    Aufgrund spontaner Selbsteintrübung sind all meine Glaskugeln beim Hersteller. Lasst mich daher bitte nicht den Spekulatiusbackmodus wechseln.
    Ich verstehe die Aussage/das aktuelle Problem einfach nicht.
    Das hier (Option Strict On!) klappt bei mir problemlos. Auch wenn ich das COM-Referenzaufräumen hier nicht drin habe.

    VB.NET-Quellcode

    1. Dim Excel = New Microsoft.Office.Interop.Excel.Application()
    2. Dim Workbook = Excel.Workbooks.Add(1)
    3. Dim Worksheet = DirectCast(Workbook.Sheets.Add, Microsoft.Office.Interop.Excel.Worksheet)
    4. Dim Range = DirectCast(Worksheet.Cells(1, 1), Microsoft.Office.Interop.Excel.Range)
    5. Range.Value = "Test"
    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „VaporiZed“, mal wieder aus Grammatikgründen.

    Aufgrund spontaner Selbsteintrübung sind all meine Glaskugeln beim Hersteller. Lasst mich daher bitte nicht den Spekulatiusbackmodus wechseln.
    Kann ich mit Deinem Testprojekt aus Post#7 nicht nachvollziehen, siehe Screenshot.
    Bilder
    • Screenshot.png

      44,68 kB, 685×604, 148 mal angesehen
    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „VaporiZed“, mal wieder aus Grammatikgründen.

    Aufgrund spontaner Selbsteintrübung sind all meine Glaskugeln beim Hersteller. Lasst mich daher bitte nicht den Spekulatiusbackmodus wechseln.
    Danke für die rasche Überprüfung.
    Ich habe von Hardware-Bedingungen keine Ahnung. Könnte es vielleicht tatsächlich mit der CPU-Nutzung im
    weitesten Sinne zu tun haben? Ich hatte ja gemäß Deines Posts 2 alles so eingestellt, aber hierbei vielleicht doch etwas
    übersehen?
    Sicherheitshalber hänge ich einen Screenshot - bewusst mit der Statuszeile oben an, vielleicht siehst Du Fehler in meiner Einstellung?
    Bilder
    • ScreenTransferExcel.jpg

      443,82 kB, 1.920×1.080, 131 mal angesehen
    Nun definierst Du ExcelApp, Workbook und Worksheet zweimal. Poste mal bitte das aktuelle, wohl nicht funktionierende Projekt, denn bei mir klappt das.

    VB.NET-Quellcode

    1. Private Sub BtnAnzeige_Click(sender As Object, e As EventArgs) Handles BtnAnzeige.Click
    2. Dim Excel = New Microsoft.Office.Interop.Excel.Application
    3. Dim Workbook = Excel.Workbooks.Add(1)
    4. Dim Worksheet = DirectCast(Workbook.Sheets.Add(1), Microsoft.Office.Interop.Excel.Worksheet)
    5. Dim Range = DirectCast(Worksheet.Cells(1, 1), Microsoft.Office.Interop.Excel.Range)
    6. Range.Value = "Test"
    7. For Each Table As DataTable In Dataset1.Tables
    8. For i As Integer = 0 To Table.Rows.Count - 1
    9. For j As Integer = 0 To Table.Columns.Count - 1
    10. Dim cellValue As String = Table.Rows(i)(j).ToString()
    11. Dim v1 As Integer
    12. Dim v2 As Integer
    13. v1 = i + 1
    14. v2 = j + 1
    15. Worksheet.Cells(v1, v2).Value = cellValue
    16. Next
    17. Next
    18. Next
    19. End Sub
    Bilder
    • Screenshot.png

      66,82 kB, 786×808, 124 mal angesehen
    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „VaporiZed“, mal wieder aus Grammatikgründen.

    Aufgrund spontaner Selbsteintrübung sind all meine Glaskugeln beim Hersteller. Lasst mich daher bitte nicht den Spekulatiusbackmodus wechseln.
    Versuch es doch mal mit iner expliziten Variablendeklaration und der Verwendung von Variablennamen, die den Standardobjekten nicht entsprechen.
    Statt

    VaporiZed schrieb:

    Dim Excel = New Microsoft.Office.Interop.Excel.Application
    Dim Workbook = Excel.Workbooks.Add(1)
    Dim Worksheet = DirectCast(Workbook.Sheets.Add(1), Microsoft.Office.Interop.Excel.Worksheet)
    Dim Range = DirectCast(Worksheet.Cells(1, 1), Microsoft.Office.Interop.Excel.Range)

    versuche mal dies:

    VB.NET-Quellcode

    1. Dim exApp as Microsoft.Office.Interop.Excel.Application = New Microsoft.Office.Interop.Excel.Application
    2. Dim wkb as Microsoft.Office.Interop.Excel.Workbook = exApp.Workbooks.Add(1)
    3. Dim wks as Microsoft.Office.Interop.Excel.Worksheet = wkb.Worksheets.Add(1)
    4. Dim rng as Microsoft.Office.Interop.Excel.Worksheet = wks.Cells(1, 1)
    NB. Es ist doch schön, wenn man lesbare Namen vergibt. Siehe auch [VB.NET] Beispiele für guten und schlechten Code (Stil).
    zu Vaporized - Post 14

    hier Deine Version auf meinem System: :(



    Und darunter die Fehlermeldung der Version von INOPIAE

    Der dritte Screenshot zeigt Warnungen bei den Abhängigkeiten ("COM"). Vielleicht hat es etwas mit falschem Hinzufügen
    des Verweises auf die Excel-Bibliotheken zu tun? ???
    Bilder
    • ScreenshotTransferNachExcelB.jpg

      312,14 kB, 1.920×1.080, 108 mal angesehen
    • ScreenshotTransferNachExcelC.jpg

      323,99 kB, 1.920×1.080, 123 mal angesehen
    • ScreenshotTransferNachExcelD.jpg

      220,49 kB, 1.920×1.080, 115 mal angesehen

    Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von „woofy49“ ()

    Update:

    VB.NET-Quellcode

    1. ​Dim exApp as Microsoft.Office.Interop.Excel.Application = New Microsoft.Office.Interop.Excel.Application
    2. Dim wkb as Microsoft.Office.Interop.Excel.Workbook = exApp.Workbooks.Add(1)
    3. Dim wks as Microsoft.Office.Interop.Excel.Worksheet = wkb.Sheets.Add(1)
    4. Dim rng as Microsoft.Office.Interop.Excel.Range = wks.Cells(1, 1)
    NB. Es ist doch schön, wenn man lesbare Namen vergibt. Siehe auch [VB.NET] Beispiele für guten und schlechten Code (Stil).
    Ausrufezeichen bei Verweisen sind immer ein Problem. Bei mir sieht das so aus, wenn ich Dein Projekt aus Post#7 verwende:
    Bilder
    • COM-Verweis.png

      82,93 kB, 953×611, 121 mal angesehen
    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „VaporiZed“, mal wieder aus Grammatikgründen.

    Aufgrund spontaner Selbsteintrübung sind all meine Glaskugeln beim Hersteller. Lasst mich daher bitte nicht den Spekulatiusbackmodus wechseln.
    Danke für rasche Antwort !
    Die Warnung bei "Verweise" habe ich jetzt durch exakte Anpassung an die Excel-Version wegbekommen (hatte ich vorher nicht
    genau genug geprüft).
    Jetzt bleibt noch die Fehlermeldung (Screenshot):
    Bilder
    • ScreenshotTransferNachExcelE.jpg

      329,75 kB, 1.920×1.080, 126 mal angesehen
    Cells(1, 1) ist ja auch kein Worksheet, sondern eine Range. Hast den falschen Datentyp vor dem = drin :rolleyes:
    Und nimm mal bitte die allererste Zeile (Option Strict Off) raus.
    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „VaporiZed“, mal wieder aus Grammatikgründen.

    Aufgrund spontaner Selbsteintrübung sind all meine Glaskugeln beim Hersteller. Lasst mich daher bitte nicht den Spekulatiusbackmodus wechseln.