Image aus Form nach Excel kopieren

  • VB.NET

Es gibt 46 Antworten in diesem Thema. Der letzte Beitrag () ist von diablo699.

    Image aus Form nach Excel kopieren

    Hallo VB Profis,

    ich möchte ein Bild (.bmp) das in Form2.PictureBox1.Image abgelegt ist nach Excel 2007 in ein Tabellenblatt kopieren.

    Dazu habe ich ein Button1 auf die Form2 gesetzt und unten stehenden Code eingefügt.

    Da ich Anfänger bin, habe ich die Codezeilen aus diesem Forum zusammengesucht.

    Doch leider bricht das Programm an der vorletzt Codezeile mit folgender Fehlermeldung ab

    Typkonflikt. (Ausnahme von HRESULT: 0x80020005 (DISP_E_TYPEMISMATCH)).

    Könnt ihr mir bitte helfen diesen Fehler zu lösen.





    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click

    Dim Excel_load As Microsoft.Office.Interop.Excel.Application 'Excel
    Dim Excel_done As Microsoft.Office.Interop.Excel.Workbook 'Arbeitsmappe
    Dim Tabellenblatt1 As Microsoft.Office.Interop.Excel.Worksheet 'Arbeitsblatt

    Excel_load = CreateObject("Excel.Application")
    Excel_load.Visible = True
    Excel_done = Excel_load.Workbooks.Add

    Tabellenblatt1 = Excel_done.Worksheets(1)

    Dim objOLEObject As Microsoft.Office.Interop.Excel.OLEObject

    objOLEObject = Tabellenblatt1.OLEObjects.Add(ClassType:="Forms.Image.1", Link:=False, _
    DisplayAsIcon:=False, Left:=828, Top:=80, Width:=34, Height:=18)

    objOLEObject.Object.Picture = Form2.PictureBox1.Image 'Typkonflikt

    End Sub


    '

    Willkommen im Forum. :thumbup:
    Zu diesem Fehler kannst Du Frau Google befragen, sie ist eine gute Freundin von uns. :thumbsup:
    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!
    Hallo Vb Profis,

    auch das Kopieren über die Zwischenablage bricht mit der gleichen Fehlermeldung ab.

    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click

    Dim Excel_load As Microsoft.Office.Interop.Excel.Application 'Excel
    Dim Excel_done As Microsoft.Office.Interop.Excel.Workbook 'Arbeitsmappe
    Dim Tabellenblatt1 As Microsoft.Office.Interop.Excel.Worksheet 'Arbeitsblatt
    Dim Logo As System.Drawing.Image = PictureBox1.Image 'Bild Ort Deklarieren logo

    Excel_load = CreateObject("Excel.Application")
    Excel_load.Visible = True
    Excel_done = Excel_load.Workbooks.Add

    Tabellenblatt1 = Excel_done.Worksheets(1)

    'Von PictureBox in Clipboard
    My.Computer.Clipboard.SetImage(Logo)

    'Bild aus der Zwischenablage holen
    If My.Computer.Clipboard.ContainsImage() Then
    Logo = My.Computer.Clipboard.GetImage()
    Tabellenblatt1.Cells(10, 10).Select = Logo 'Typkonflikt
    End If


    End Sub
    Kannst Du den Inhalt der Zwischenablage im Excel direkt einfügen?
    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!
    Um deinen Code besser darstellen zu können kannst du die VB-Tags verwenden:

    [.vb] [/.vb]
    !! Ohne Punkte !! :D

    dadurch erhälst du in etwa die gleiche Formatierung wie in Visual Studio.

    So nun zu deinem Problem:

    Ist die Excel bereits vorhanden oder soll diese erstellt werden?
    Ist das Bild in der Picturebox ausgewählt/vorhanden/geladen/dargestellt?

    Grüßle Marco

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „MarcoIT“ ()

    Hallo,

    die Excel Arbeitsmappe wird zur Laufzeit erstellt.

    Das bild ist in der Picturebox vorhanden.

    Wenn ich die Clipboard Variante verwende erscheint die Arbeitsmappe ohne Beld(Logo).

    Aber mit rechts click in die Arbeitsmappe und einfügen erscheint das Bild.
    Hierbei geht es darum, dass das Logo/Bild nicht korrekt ins Clipboard gelangt.
    Kannst du nicht den Inhalt aus der Picturebox entnehmen? Wozu denn in die Zwischenablage schieben,
    wenn du den "Wert" direkt auslesen kannst bzw. entnehmen kannst?
    Woher bekommst du das Bild? Statischer Pfad? Internet? Auswahl?

    Grüßle Marco
    Hallo Marco,

    bei der direkten entnahme erhalte ich die gleiche Fehlermeldung.

    VB.NET-Quellcode

    1. Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
    2. Dim Excel_load As Microsoft.Office.Interop.Excel.Application 'Excel
    3. Dim Excel_done As Microsoft.Office.Interop.Excel.Workbook 'Arbeitsmappe
    4. Dim Tabellenblatt1 As Microsoft.Office.Interop.Excel.Worksheet 'Arbeitsblatt
    5. Excel_load = CreateObject("Excel.Application")
    6. Excel_load.Visible = True
    7. Excel_done = Excel_load.Workbooks.Add
    8. Tabellenblatt1 = Excel_done.Worksheets(1)
    9. Dim objOLEObject As Microsoft.Office.Interop.Excel.OLEObject
    10. objOLEObject = Tabellenblatt1.OLEObjects.Add(ClassType:="Forms.Image.1", Link:=False, _
    11. DisplayAsIcon:=False, Left:=828, Top:=80, Width:=34, Height:=18)
    12. objOLEObject.Object.Picture = Form2.PictureBox1.Image 'Typkonflikt
    13. End Sub
    Probiere mal, dies zu machen:

    VB.NET-Quellcode

    1. Dim Logo As System.Drawing.Image = PictureBox1.Image
    2. '==>
    3. Dim Logo As System.Drawing.Bitmap = New Bitmap(PictureBox1.Image)

    Bitte mit Option Strict On

    VB.NET-Quellcode

    1. objOLEObject.Object.Picture = Form2.PictureBox1.Image
    geht schon deshalb vor die Hose, weil Du auf die Form, nicht aber auf eine Instanz der Form zugreifst, in VB geht dies leider.
    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!
    Ja mach das mal was Rod geschrieben hat. Das macht mehr Sinn.
    Was mir auch gerade auffällt ist:
    Du lädst das Image. Später initialisiert du es aber als Icon.
    Meines Wissens nach kann das gar nicht gehen.

    Grüßle Marco
    Hallo,

    danke für die schnellen Antworten.

    Ich hoffe das ich das so richtig gemacht habe :?:

    Es erscheint aber die gleiche Fehlermeldung.

    An Marco das initialisieren als Icon verstehe ich nicht. Bei der Variante objOLEObject ist DisplayAsIcon:=False

    oder muß ich noch andere dinge beachten.


    VB.NET-Quellcode

    1. Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
    2. Dim Excel_load As Microsoft.Office.Interop.Excel.Application 'Excel
    3. Dim Excel_done As Microsoft.Office.Interop.Excel.Workbook 'Arbeitsmappe
    4. Dim Tabellenblatt1 As Microsoft.Office.Interop.Excel.Worksheet 'Arbeitsblatt
    5. Dim Logo As System.Drawing.Bitmap = New Bitmap(PictureBox1.Image)
    6. Excel_load = CType(CreateObject("Excel.Application"), Microsoft.Office.Interop.Excel.Application)
    7. Excel_load.Visible = True
    8. Excel_done = Excel_load.Workbooks.Add
    9. Tabellenblatt1 = CType(Excel_done.Worksheets(1), Microsoft.Office.Interop.Excel.Worksheet)
    10. 'Von PictureBox in Clipboard
    11. My.Computer.Clipboard.SetImage(Logo)
    12. 'Bild aus der Zwischenablage holen
    13. If My.Computer.Clipboard.ContainsImage() Then
    14. Logo = CType(My.Computer.Clipboard.GetImage(), Bitmap)
    15. Tabellenblatt1.Cells(10, 10).Select = Logo 'Typkonflikt
    16. End If
    17. End Sub
    Also,

    in Microsoft hat ein Icon eine Maxgröße die du nicht überschreiten darfst.
    Ich war vorhin in der Annahme das du ein Icon statt einem Image einfügen wolltest. Aber dem Anschein nach war dem doch nicht so.

    Wenn du ein Bild kopierst und in Excel einfügst dann geht das? Also Manuell
    Als ich das gerade versucht habe, dann ging das nicht.
    Ich glaube das es eventuell so ist, dass du die Funktion von Excel aufrufen musst, in der ein Bild eingefügt werden kann.
    das wäre dann:

    Unter dem Reiter: Einfügen Grafik

    Hast du die Möglichkeit auf die Funktion zuzugreifen?

    Grüßle Marco

    diablo699 schrieb:

    VB.NET-Quellcode

    1. Tabellenblatt1.Cells(10, 10).Select = Logo 'Typkonflikt
    Ist diese Syntax korrekt?
    Das Select empfinde ich als unpassend.
    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!
    Hallo Marco,

    Der Link ist sehr interressant und funktioniert mit der Pfadangabe, aber leider muß ich eine Form.Pikturebox ansprechen. ;(

    Hallo Rod,

    Select habe ich selber ausgesucht, was würdest du empfehlen?


    VB.NET-Quellcode

    1. Private Sub cmdClipb_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cmdClipb.Click
    2. Dim Excel_load As Microsoft.Office.Interop.Excel.Application 'Excel
    3. Dim Excel_done As Microsoft.Office.Interop.Excel.Workbook 'Arbeitsmappe
    4. Dim Tabellenblatt1 As Microsoft.Office.Interop.Excel.Worksheet 'Arbeitsblatt
    5. 'Dim Logo As System.Drawing.Bitmap = New Bitmap(PictureBox1.Image)
    6. Dim Logo As String = "D:\Programmierung\VB\Logo.bmp"
    7. Excel_load = CType(CreateObject("Excel.Application"), Microsoft.Office.Interop.Excel.Application)
    8. Excel_load.Visible = True
    9. Excel_done = Excel_load.Workbooks.Add
    10. Tabellenblatt1 = CType(Excel_done.Worksheets(1), Microsoft.Office.Interop.Excel.Worksheet)
    11. Tabellenblatt1.Shapes.AddPicture(Logo, True, True, Left:=828, Top:=80, Width:=334, Height:=188)
    12. End Sub

    diablo699 schrieb:

    Select habe ich selber ausgesucht, was würdest du empfehlen?
    Ich hab keine Ahnung, sonst hätte ich eine Empfehlung abgegeben.
    Was sagt die MSDN dazu?
    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!

    VB.NET-Quellcode

    1. Private Sub cmdClipb_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cmdClipb.Click
    2. Dim Excel_load As Microsoft.Office.Interop.Excel.Application 'Excel
    3. Dim Excel_done As Microsoft.Office.Interop.Excel.Workbook 'Arbeitsmappe
    4. Dim Tabellenblatt1 As Microsoft.Office.Interop.Excel.Worksheet 'Arbeitsblatt
    5. 'Dim Logo As System.Drawing.Bitmap = New Bitmap(PictureBox1.Image)
    6. Dim Logo As Image = Image.FromFile("Pfad...")
    7. Clipboard.SetDataObject(Logo)
    8. Excel_load = New Microsoft.Office.Interop.Excel.Application
    9. Excel_load.Visible = True
    10. Excel_done = Excel_load.Workbooks.Add
    11. Tabellenblatt1 = Excel_done.Worksheets(1)
    12. Tabellenblatt1.Cells(1,1).Select
    13. Tabellenblatt1.Paste
    14. Clipboard.clear
    15. Excel_done.save
    16. Excel_done.close
    17. Excel_load.quit
    18. End Sub


    So in etwa sollte es funktionieren.

    Gruss Mono
    Das ist meine Signatur und sie wird wunderbar sein!