Image aus Form nach Excel kopieren

  • VB.NET

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

    MarcoIT schrieb:

    Dort befindet sich aber eine statische Angabe des Bilder und dem ist nicht so.


    Nunja. Das soll ein Beispiel sein, was mit ein klein wenig "mitdenken" genauso mit jedem Objekt vom Typ Image funktioniert...
    Das ist meine Signatur und sie wird wunderbar sein!
    Hallo Rod,

    du hast recht dieser Code ist verkehrt.

    Die Select-Eigenschaft des Range-Objektes kann nicht festgelegt werden.

    VB.NET-Quellcode

    1. Tabellenblatt1.Cells(10, 10).Select = Logo


    Hallo Mono,

    das Bild liegt in einer Form2.PictureBox1.Image.

    Statisch Funktioniert es ich brauche das Bild aber aus der Picturebox.
    Man betrachte diese Zeile:

    VB.NET-Quellcode

    1. Dim Logo As Image = Image.FromFile("Pfad...")


    Die Zuweisung MUSS nicht mit Image.FromFile erfolgen.
    Vielleicht hat Picturebox ja eine Eigenschaft die ein Bild zurückgibt ?

    Kein Plan..
    Das ist meine Signatur und sie wird wunderbar sein!
    Hallo Marco,

    Das Bild ist in der Form2.PictureBox1.Image schon Vorhanden, es muß nur noch in Excel eingefügt werden.

    Das scheint aber nicht so einfach zu sein da hir Google und co. auch nicht viel weiter Helfen.

    Aber schon jetzt vielen Dank für die rege Anteilnahme, dieses Thema scheint doch einige zu interessieren.
    Probleme sind zum Lösen da und du hast offensichtlich eins. Also lösen wir das.
    Ich werde jetzt mal Visual Studio starten und das ganze ausprobieren.
    Melde ich gleich wieder als beachte auch ob sich Edits in meinen Beiträgen befinden werden.

    diablo699 schrieb:

    Form2.PictureBox1.Image

    Hier greifst Du ins leere, weil Form2 der Name der Klasse, nicht aber eine mit New erstellte Instanz ist, geht leider in VB, sogar unter Option Strict On
    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,

    Mit diesem Code erscheint das Bild aus der Form2.Picturebox1.image auf dem Tabellenblatt.

    Habt ihr eine Idee wie ich es nun ansprechen und verschieben kann?


    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. 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.Paste()
    16. End If
    17. 'Zwischenablage leeren
    18. My.Computer.Clipboard.Clear()
    19. End Sub
    hat es also geklappt?
    Wäre ja ne erfreuliche Nachricht!

    Ich weiß nicht wie Bilder in Excel hinterlegt sind. Koordinaten?
    Ich habe da leider echt keine Ahnung.
    Allerdings fällt mir halt ein, dass du ja die Spalten Namen hast (A1 usw...)
    Wenn du jetzt das Bild in B2 haben willst, kannst du ja diese übergeben.
    Und jetzt ist mir gerade eingefallen, eventuell kannst du ja auch die Größe und Breite der
    Spalten-/ Zeilennamen ansprechen! Unter den Eigenschaften (rechtsklick auf den Spalten-/ Zeilenname) kannst du diese Werte doch eintragen oder?
    Versuch mit deinem Code die Größe und Breite von deiner gewünschten Spalte und Zeile zu übergeben.

    Grüßle Marco
    Hallo Marco,

    ich hatte an soetwas gedacht. Excel bennent das Bild "Picture1".

    VB.NET-Quellcode

    1. Tabellenblatt1.Shapes("Picture1").Select()
    2. Selection.ShapeRange.IncrementLeft(828) ' nach links
    3. Selection.ShapeRange.IncrementTop(80) ' nach oben



    Aber leider meckert VB 2010 bei Tabellenblatt1.Shapes und Selection.

    -Die Schnittstelle Microsoft.Office.Interop.Excel.Shapes kann nicht indiziert werden,

    da keine Standardeigenschaft vorhanden ist.

    -Selektion wurde nicht deklariert.

    Gibt es Selektion unter VB 2010 noch?
    Hallo Marco,

    funktioniert leider nicht, gleiche Felermeldungen.

    Auch folgender Code läuft nicht.

    VB.NET-Quellcode

    1. 'Bild aus der Zwischenablage holen
    2. If My.Computer.Clipboard.ContainsImage() Then
    3. Logo = CType(My.Computer.Clipboard.GetImage(), Bitmap)
    4. Tabellenblatt1.Paste()
    5. Tabellenblatt1.Select()
    6. Tabellenblatt1.Shapes.Count()
    7. Tabellenblatt1.ShapeRange.IncrementLeft(828)
    8. Tabellenblatt1.ShapeRange.IncrementTop(80)
    9. End If


    Bei Zeile 6 gibt es folgenden Fehler "Mitglied nicht gefunden".
    Eigentlich wollte ich hier nicht mehr posten, weil du meine Posts offenbar ignorierst.
    Dennoch:

    VB.NET-Quellcode

    1. Private Sub cmdClipb_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cmdClipb.Click
    2. InsertImageAt("PfadZuWorkbook", 2,4, Picturebox1.Image)
    3. End Sub
    4. Public Sub InsertImageAt(ByVal WbPath As String, ByVal Column As Integer, ByVal Row As Integer, ByVal Logo As Image)
    5. Dim exApp As Microsoft.Office.Interop.Excel.Application 'Excel
    6. Dim wb As Microsoft.Office.Interop.Excel.Workbook 'Arbeitsmappe
    7. Dim ws As Microsoft.Office.Interop.Excel.Worksheet 'Arbeitsblatt
    8. Clipboard.SetDataObject(Logo)
    9. exApp = New Microsoft.Office.Interop.Excel.Application
    10. exApp.Visible = True
    11. wb = exApp.Workbooks.Open(WbPath)
    12. ws = wb.Worksheets(1)
    13. ws.Cells(Row, Column).Select()
    14. ws.Paste()
    15. Clipboard.Clear()
    16. wb.Save()
    17. wb.Close()
    18. exApp.Quit()
    19. End Sub
    Das ist meine Signatur und sie wird wunderbar sein!
    Hallo Mono,

    ich ignoriere keine Antworten!!!!!

    Ich bin froh über jede Hilfe die ich bekommen Kann.

    Zum Problem : Das Bild befindet sich im Workbook - Worksheet1 (soweit haben wir es schon geschafft)

    Es geht nur noch darum die Position zu verschieben.
    Hallo Marco,

    ich wußte nicht das es hier so sensible Leute gibt.

    Aber vielen Dank für alle die mir geholfen haben.

    Mit dem folgenden code funktioniert es jetzt perfekt. :thumbsup:


    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. 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() ' Bildposition
    16. Tabellenblatt1.Paste() ' Zwischenablage einfügen
    17. End If
    18. 'Zwischenablage leeren
    19. My.Computer.Clipboard.Clear()
    20. End Sub
    Füge es doch einfach dort ein, wo du es hin haben möchtest.
    Wozu erst irgendwo einfügen, und dann verschieben ???



    Und wenn du dir meinen Code angeschaut hättest, würde in deinem das:

    VB.NET-Quellcode

    1. Excel_load = CType(CreateObject("Excel.Application"), Microsoft.Office.Interop.Excel.Application)
    2. 'oder das
    3. Tabellenblatt1 = CType(Excel_done.Worksheets(1), Microsoft.Office.Interop.Excel.Worksheet)


    nicht mehr vorkommen.
    Das ist völlig unnötig.
    Das ist meine Signatur und sie wird wunderbar sein!