Kompatibilitätsprobleme von Projekt (Interop)

  • VB.NET
  • .NET (FX) 4.5–4.8

Es gibt 9 Antworten in diesem Thema. Der letzte Beitrag () ist von Yogibär.

    Kompatibilitätsprobleme von Projekt (Interop)

    Guten Morgen zusammen,

    ich stehe vor einem Problem bei dem ich leider nicht weiter weiß.
    Ich vermute, dass es an der Art und Weise liegt, wie ich auf Word- bzw. Excel-Dokumente zugreife.

    Ich habe ein Angebots-Programm erstellt, welches ich jetzt zum ersten Mal unter meinen Kollegen verteilen möchte.
    Ein Teil arbeitet schon mit Office 365 und der Rest noch mit Office 2010 (ich eingeschlossen).

    Im Programm selbst greife ich auf Excel und Word-Dokumente folgendermaßen zu:

    Quellcode

    1. Dim xlApp As New Microsoft.Office.Interop.Excel.Application
    2. Dim wordApp As New Microsoft.Office.Interop.Word.Application


    (Screenshot von "Verweise" im Anhang)

    Wenn ich nun bei einem Office 2010 User das Programm auf den Rechner kopiere (.exe und benötigte Datenbanken), dann funktioniert es super.
    Kopiere ich es jedoch auf einen Rechner mit Office 365, dann steigt das Programm beim Zugriff auf Excel oder Word aus.


    Kann mir hier jemand helfen? Ist noch zusätzliche Information von meiner Seite nötig? (Ist für mich leider noch komplettes Neuland :saint: )

    Freundliche Grüße und vielen Dank! ^^

    Info zu meinem Visual Studio:

    Microsoft Visual Studio Professional 2013
    Version 12.0.40629.00 Update 5
    Microsoft .NET Framework
    Version 4.6.01590
    Bilder
    • Verweise.png

      37,41 kB, 1.365×457, 239 mal angesehen
    @Yogibär Nö, da steht alles drin.
    Welches Office hast Du installiert?
    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!
    ************** Exception Text **************
    System.Runtime.InteropServices.COMException (0x8002000B): Invalid index. (Exception from HRESULT: 0x8002000B (DISP_E_BADINDEX))
    at Microsoft.Office.Interop.Excel.Sheets.get__Default(Object Index)
    at QuotationToolETO.frmMain.ExcelDatenbankErstellen(String PfadUndName)
    at QuotationToolETO.frmMain.mnuNeu_Click(Object sender, EventArgs e)
    at QuotationToolETO.frmStartUp.btnNew_Click(Object sender, EventArgs e)
    at System.EventHandler.Invoke(Object sender, EventArgs e)
    at System.Windows.Forms.Control.OnClick(EventArgs e)
    at System.Windows.Forms.Button.OnClick(EventArgs e)
    at System.Windows.Forms.Button.OnMouseUp(MouseEventArgs mevent)
    at System.Windows.Forms.Control.WmMouseUp(Message& m, MouseButtons button, Int32 clicks)
    at System.Windows.Forms.Control.WndProc(Message& m)
    at System.Windows.Forms.ButtonBase.WndProc(Message& m)
    at System.Windows.Forms.Button.WndProc(Message& m)
    at System.Windows.Forms.Control.ControlNativeWindow.OnMessage(Message& m)
    at System.Windows.Forms.Control.ControlNativeWindow.WndProc(Message& m)
    at System.Windows.Forms.NativeWindow.Callback(IntPtr hWnd, Int32 msg, IntPtr wparam, IntPtr lparam)


    Ich stelle mal meinen Code von "QuotationToolETO.frmMain.ExcelDatenbankErstellen(String PfadUndName)" rein.

    VB.NET-Quellcode

    1. Private Sub ExcelDatenbankErstellen(PfadUndName As String)
    2. Dim xlApp As New Microsoft.Office.Interop.Excel.Application
    3. Dim xlMappe As Microsoft.Office.Interop.Excel.Workbook = xlApp.Workbooks.Add()
    4. Dim WorksheetPosition As Microsoft.Office.Interop.Excel.Worksheet = xlApp.Worksheets.Add()
    5. WorksheetPosition.Name = AngebotsPositionName
    6. For i = 0 To 2
    7. xlMappe.Sheets(2).Delete() '3 mal Tabelle an Platz 2 löschen
    8. Next i
    9. For i = 1 To DatensatzWerte + 1
    10. WorksheetPosition.Columns(i).NumberFormat = "@" 'Spalte 1 bis Anzahl(DatensatzWerte) auf Textformat stellen
    11. Next
    12. Dim WorksheetBasisdaten As Microsoft.Office.Interop.Excel.Worksheet = xlApp.Worksheets.Add()
    13. WorksheetBasisdaten.Name = "BasicData"
    14. 'Angebotsdatenbank speichern
    15. xlMappe.SaveAs(PfadUndName)
    16. Call EndExcel(xlApp, xlMappe)
    17. End Sub


    Der Code ist bestimmt unnötig kompliziert aufgebaut. Auf meinem Rechner macht er jedoch genau das, was er soll.
    Komischerweise steigt bei Windows 10 Usern das Programm an dieser Stelle aus.

    Ergebnis vom Code:

    Im Excel-Sheet heißt Tabelle1 nun "BasicData" und Tabelle2 heißt so, wie der User die erste Angebotsposition genannt hat. Weiterhin sind alle Felder als Textfelder formatiert.

    Yogibär schrieb:

    Dim xlApp As New Microsoft.Office.Interop.Excel.Application
    Dim xlMappe As Microsoft.Office.Interop.Excel.Workbook = xlApp.Workbooks.Add()
    Dim WorksheetPosition As Microsoft.Office.Interop.Excel.Worksheet = xlApp.Worksheets.Add()
    Du gehst blind davon aus, dass die Mappe mit drei Worksheets initialisiert wird.
    Das ist aber noch lange nicht selbstverständlich.
    Das ist benutzerdefiniert.

    VB.NET-Quellcode

    1. Dim xlApp As New Microsoft.Office.Interop.Excel.Application
    2. xlApp.SheetsInNewWorkbook = 1
    3. Dim xlMappe As Microsoft.Office.Interop.Excel.Workbook = xlApp.Workbooks.Add()
    4. Dim WorksheetPosition As Microsoft.Office.Interop.Excel.Worksheet = xlApp.Worksheets.First 'oder Worksheets(0)
    Dann kannst du dir die Löschorgie sparen
    --
    If Not Program.isWorking Then Code.Debug Else Code.DoNotTouch
    --