Bmp.Datei aus Picture Box nach Excel kopieren/senden?

  • VB.NET

Es gibt 18 Antworten in diesem Thema. Der letzte Beitrag () ist von Aquin81.

    Bmp.Datei aus Picture Box nach Excel kopieren/senden?

    Einen schönen guten Abend,

    leider bin ich nicht in der Lage, als VB2010 Anfänger und mit Hilfe von Google, folgendes Problem zu lösen. ;(

    Ich versuche verzweifelt seit einiger Zeit diesen Code so umzuschreiben, dass er mir nicht eine neue Excel Datei öffnet, sondern das Bild in einer Excel Vorlage kopiert.

    Diesen Code habe ich unter folgendem Link gefunden:

    http://www.vb-magazin.de/forums/forums/t/6303.aspx

    Alles andere bekomme ich hin (Text senden, Datei speichern und schließen), leider nur dieses Problem nicht. ?(

    VB.NET-Quellcode

    1. Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
    2. Dim Excel_Appl As Excel.Application 'Excel
    3. Dim Excel_Mappe As Excel.Workbook 'Arbeitsmappe
    4. Dim Excel_Tabellenblatt As Excel.Worksheet 'Arbeitsblatt
    5. Dim Hilfsdatei As String
    6. Dim HilfsdateiBmp As String
    7. Hilfsdatei = Path.GetTempFileName() ' Eindeutigen temporären Dateinamen incl. Pfad erzeugen lassen
    8. HilfsdateiBmp = Hilfsdatei.Replace(Path.GetExtension(Hilfsdatei), ".bmp") ' Dateiendung umbennen in ".bmp"
    9. Debug.WriteLine(HilfsdateiBmp) ' *** FÜR TESTZWECKE
    10. ' ANNAHME: In Form2.PictureBox1 ist bereits ein Bild vorhanden !!
    11. Me.PictureBox1.Image.Save(HilfsdateiBmp, Imaging.ImageFormat.Bmp) ' Image als Bitmap in Datei speichern
    12. Excel_Appl = CType(CreateObject("Excel.Application"), Excel.Application) ' Excel Öffnen
    13. Excel_Appl.Application.Workbooks.Open(EXCEL_VORLAGE)
    14. Excel_Appl.Visible = True
    15. Excel_Mappe = Excel_Appl.Workbooks.Add ' Tabelle hinzufügen und 1. Tabelle auswählen
    16. Excel_Tabellenblatt = CType(Excel_Mappe.Worksheets(1), Excel.Worksheet)
    17. Excel_Tabellenblatt.Select()
    18. Excel_Tabellenblatt.Shapes.AddPicture(Filename:=HilfsdateiBmp, _
    19. LinkToFile:=CType(True, Microsoft.Office.Core.MsoTriState), _
    20. SaveWithDocument:=CType(False, Microsoft.Office.Core.MsoTriState), _
    21. Left:=200, Top:=80, Width:=134, Height:=118) ' Bildpfad an Excel übergeben
    22. File.Delete(HilfsdateiBmp) ' Hilfsdatei wieder löschen (Bild wird weiterhin in Excel angezeigt!)
    23. Excel_Mappe.Saved = True ' *** FÜR TESTZWECKE
    24. MessageBox.Show("Excel wird jetzt geschlossen (es wurde nichts gespeichert)")
    25. Excel_Appl.Quit() ' Excel schließen
    26. End Sub

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

    Der Code funktioniert auch :rolleyes: .

    Ich möchte nur dass er eine Excel Vorlage öffnet, die ich erstellt habe und dort das Bild direkt in meiner Vorlage eingefügt wird.

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

    Hallo Aquin81,

    Ich hoffe dies hilft dir weiter ;)

    VB.NET-Quellcode

    1. Private Sub ImgToExcel(ByVal openPath As String, ByVal savePath As String, ByVal imagePath As String)
    2. Dim excelApp As New Excel.Application
    3. excelApp.Visible = False
    4. Dim file As Excel.Workbook
    5. Dim workbooks As Excel.Workbooks = excelApp.Workbooks
    6. file = workbooks.Open(openPath)
    7. Dim tabelle As Excel.Worksheet = CType(file.Worksheets(1), Excel.Worksheet)
    8. With tabelle
    9. .Shapes.AddPicture(imagePath, Microsoft.Office.Core.MsoTriState.msoTrue, Microsoft.Office.Core.MsoTriState.msoTrue, 100, 100, 800, 450)
    10. End With
    11. file.SaveAs(savePath)
    12. file.Close()
    13. workbooks.Close()
    14. Marshal.ReleaseComObject(tabelle)
    15. Marshal.ReleaseComObject(workbooks)
    16. Marshal.ReleaseComObject(file)
    17. excelApp.Quit()
    18. Marshal.ReleaseComObject(excelApp)
    19. End Sub


    Aufgerufen wird dies durch

    VB.NET-Quellcode

    1. Dim imagePath As String = Path.GetTempFileName()
    2. imagePath.Replace(Path.GetExtension(imagePath), ".bmp")
    3. Me.PictureBox1.Image.Save(imagePath)
    4. ImgToExcel("C:\Daten\VBTestDocs\ExcelBild.xltx", "C:\Daten\VBTestDocs\ExcelBildExp.xlsx", imagePath)


    Du benötigst folgende Imports:

    VB.NET-Quellcode

    1. Imports Microsoft.Office.Interop
    2. Imports System.IO
    3. Imports System.Runtime.InteropServices​

    Gruß
    HamburgerJungeJr

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

    Hallo HamburgerJungeJR,

    danke für deine Antwort.

    Habe leider Fehlermeldungen, bei allen Path und bei ImgToExcel. Ich vermute weil sie nicht deklariert sind.

    Ich habe den Pfad, wo sich die Excel Vorlage (Datei) befindet in My.Settings hinterlegt, müssen dann die ganzen Path sein?

    mfg Auqin 81
    Ich habe deinen Code eingefügt oder habe ich das falsch verstanden.

    VB.NET-Quellcode

    1. Dim excelApp As New Excel.Application
    2. excelApp.Visible = False
    3. Dim file As Excel.Workbook
    4. Dim workbooks As Excel.Workbooks = excelApp.Workbooks
    5. file = workbooks.Open(openPath)
    6. Dim tabelle As Excel.Worksheet = CType(file.Worksheets(1), Excel.Worksheet)
    7. With tabelle
    8. .Shapes.AddPicture(imagePath, Microsoft.Office.Core.MsoTriState.msoTrue, Microsoft.Office.Core.MsoTriState.msoTrue, 100, 100, 800, 450)
    9. End With
    10. file.SaveAs(savePath)
    11. file.Close()
    12. workbooks.Close()
    13. Marshal.ReleaseComObject(tabelle)
    14. Marshal.ReleaseComObject(workbooks)
    15. Marshal.ReleaseComObject(file)
    16. excelApp.Quit()
    17. Marshal.ReleaseComObject(excelApp)
    18. Dim imagePath As String = Path.GetTempFileName()
    19. imagePath.Replace(Path.GetExtension(imagePath), ".bmp")
    20. frmAufschreibungen.pib_Artikelbilder.Image.Save(imagePath)
    21. ImgToExcel("C:\Daten\VBTestDocs\ExcelBild.xltx", "C:\Daten\VBTestDocs\ExcelBildExp.xlsx", imagePath)


    Es werden mir fehler angezeigt bei:
    ImgTOExcel
    imagePath
    savePath
    openPath

    Das Verzeichnis muss ich noch ändern, habe dieses aber noch nicht getan!

    Dieser Beitrag wurde bereits 4 mal editiert, zuletzt von „Aquin81“ ()

    Ok.
    vielleicht etwas komisch von mir geantwortet.

    Du kopierst den gesamten ersten Code-Block direkt vor "End Class". Damit hast du einen Sub, den du dann mit deinem Button-Click aufrufst (2. Code Block) damit die funktioniert, müssen gewisse Sachen importiert werden (3. Code Block). Diese Imports kommen vor "Class".

    Hoffe es ist nun verständlich.
    1. Also Code Block 1 habe ich verstanden, wird mit einem Button aufgerufen.
    2. Code Block 3 auch ok
    3. Aber leider verstehe ich nicht genau, wohin mit Code Block 2 ?
    In die gleiche Sub oder in einer anderen Sub? Sorry, dass ich noch mal frage!
    Aber danke für deine Hilfe
    Der gesamte erste Code-Block ist eine eigenständige Sub.
    Der Zweite Code-Block wird in den Button_Click-Sub eingefügt.
    Der Dritte Code-Block wird vor "Class" eingefügt, um die benötigten Bibliotheken zu importieren.

    VB.NET-Quellcode

    1. Imports Microsoft.Office.Interop 'Benötigte Bibliotheken importieren
    2. Imports System.IO
    3. Imports System.Runtime.InteropServices
    4. Class
    5. Private Sub Button_Click (...)
    6. Dim imagePath As String = Path.GetTempFileName() 'Temporäre Datei erzeugen
    7. imagePath.Replace(Path.GetExtension(imagePath), ".bmp") 'Temp-Datei in Bitmap umbennen
    8. Me.PictureBox1.Image.Save(imagePath) 'Bild aus Picturebox speichern
    9. ImgToExcel("C:\Daten\VBTestDocs\ExcelBild.xltx", "C:\Daten\VBTestDocs\ExcelBildExp.xlsx", imagePath) 'Bild in Excel einfügen (Parameter: Quell Excel Datei, Excel Speicherdatei, einzufügendes Bild)
    10. End Sub
    11. Private Sub ImgToExcel(ByVal openPath As String, ByVal savePath As String, ByVal imagePath As String)
    12. Dim excelApp As New Excel.Application 'neues Excel erzeugen
    13. excelApp.Visible = False 'Excel verstecken
    14. Dim file As Excel.Workbook 'Excel-Datei definieren
    15. Dim workbooks As Excel.Workbooks = excelApp.Workbooks 'Excel-Workbooks zum öffnen bereitstellen
    16. file = workbooks.Open(openPath) 'Excel-Datei öffnen
    17. Dim tabelle As Excel.Worksheet = CType(file.Worksheets(1), Excel.Worksheet) 'Erste Tabelle in der Datei auswählen
    18. With tabelle
    19. .Shapes.AddPicture(imagePath, Microsoft.Office.Core.MsoTriState.msoTrue, Microsoft.Office.Core.MsoTriState.msoTrue, 100, 100, 800, 450) 'Bild einfügen
    20. End With
    21. file.SaveAs(savePath) 'Datei speichern
    22. file.Close() 'Datei schließen
    23. workbooks.Close() 'Workbooks schließen
    24. Marshal.ReleaseComObject(tabelle) 'Tabelle freigeben, damit Excel beendet werden kann (kann man vielleicht auch weglassen) (Marshal wegen COM-Bindung zu Excel)
    25. Marshal.ReleaseComObject(workbooks) 'Workbooks freigeben s.o.
    26. Marshal.ReleaseComObject(file) 'Datei freigeben s.o.
    27. excelApp.Quit() 'Excel beenden
    28. Marshal.ReleaseComObject(excelApp) 'Excel freigeben s.o.
    29. End Sub
    30. End Class

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