Chartcontrol in Excel exportieren

  • VB.NET

Es gibt 11 Antworten in diesem Thema. Der letzte Beitrag () ist von RodFromGermany.

    Chartcontrol in Excel exportieren

    Moin,

    ich lasse von meinem Programm in einem chartcontrol eine Grafik erstellen. Diese würde ich gerne mitsamt den Werten in Excel exportieren.
    Die Werte habe ich schon drüben, wie bekomme ich jetzt die Grafik rüber?
    Ich hab hier und in Google schon gesucht, finde aber nichts passendes.

    Eine Möglichkeit wäre, das Chart als Bild zu speichern und das in Excel zu laden. Das ist aber nur für den Fall dass nichts anderes möglich ist.
    Und wie bekomme ich das Bild in Excel?

    VB.NET-Quellcode

    1. xls_Appl = New Excel.Application() 'Excel Instanz bilden
    2. xls_Mappe = xls_Appl.Workbooks.Add() 'ein Workbook wird erstellt
    3. xls_Blatt = xls_Mappe.ActiveSheet
    4. With xls_Blatt.Pictures.Insert(savePathKenn & "GraphTemp.jpg") 'einfügen in Excel
    5. With .ShapeRange
    6. .LockAspectRatio = True
    7. .Width = 75
    8. .Height = 100
    9. End With
    10. .Left = xls_Blatt.Cells(0, 20).Left
    11. .Top = xls_Blatt.Cells(0, 20).Top
    12. .Placement = 1
    13. .PrintObject = True
    14. End With


    Den insert-Befehl mag er nicht. Da schmeißt er ne ComException

    Cistbesser schrieb:

    Den insert-Befehl mag er nicht.
    Wo hast Du denn die Information über die Existenz dieses Befehls her?
    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!

    Coldfire schrieb:

    Da ich Excel nicht mehr installiert habe, wäre mein Vorschlag den Makrorekorder zu starten, das Bild manuell einfügen und den erzeugten Code dann anzupassen.


    Das ist doch Käse. Dann steht da wieder was mit "xy.Range.bla" womit die Anwendung nichts anfangen kann. Ich weiß ja was ich machen will, kenne aber die Syntax nicht; da hilft der Rekorder nicht weiter.

    Habs aber selber herausgefunden. Für die Googler:

    VB.NET-Quellcode

    1. If My.Computer.FileSystem.FileExists(savePathKenn & "GraphTemp.jpg") Then 'speicher temporär
    2. File.Delete(savePathKenn & "GraphTemp.jpg")
    3. Else : Graph.SaveImage(savePathKenn & "GraphTemp.jpg", ChartImageFormat.Jpeg)
    4. End If
    5. If My.Computer.FileSystem.FileExists(savePathKenn & "PolTemp.jpg") Then
    6. File.Delete(savePathKenn & "PolTemp.jpg")
    7. Else : Polkontur.SaveImage(savePathKenn & "PolTemp.jpg", ChartImageFormat.Jpeg)
    8. End If
    9. xls_Blatt.Shapes.AddPicture(savePathKenn & "GraphTemp.jpg", Microsoft.Office.Core.MsoTriState.msoFalse, Microsoft.Office.Core.MsoTriState.msoTrue, 940, 1, 500, 280)
    10. xls_Blatt.Shapes.AddPicture(savePathKenn & "PolTemp.jpg", Microsoft.Office.Core.MsoTriState.msoFalse, Microsoft.Office.Core.MsoTriState.msoTrue, 940, 300, 400, 400)
    11. File.Delete(savePathKenn & "GraphTemp.jpg") 'Temporäre Dateien löschen
    12. File.Delete(savePathKenn & "PolTemp.jpg")

    Cistbesser schrieb:

    Habs aber selber herausgefunden.
    Sieht gut aus. :thumbup:
    Fehlermeldung: Microsoft.Office.Core: Core ist kein Member von Office.
    Kannst Du noch schreiben, was Du importiert hast, so dass Dein Code einfach so funktioniert?
    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!
    Verwende FileInfo, und machma bischen Code-Design:

    VB.NET-Quellcode

    1. Private Sub ExportChart(ByVal chart As chartcontrol, ByVal tmpName As String)
    2. Dim fi As New FileInfo(savePathKenn & tmpName)
    3. If fi.Exists Then fi.Delete()
    4. chart.SaveImage(fi.FullName, ChartImageFormat.Jpeg)
    5. xls_Blatt.Shapes.AddPicture(fi.FullName, Microsoft.Office.Core.MsoTriState.msoFalse, Microsoft.Office.Core.MsoTriState.msoTrue, 940, 1, 500, 280)
    6. fi.Delete()
    7. End Sub
    8. Private Sub ExportCharts()
    9. ExportChart(Graph, "GraphTemp.jpg")
    10. ExportChart(Polkontur, "PolTemp.jpg")
    11. End Sub
    Auf folgende DLLs muss verwiesen werden:
    Microsoft.Office.Interop.Excel.dll
    Office.dll
    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!
    ich habe nur die Imports

    VB.NET-Quellcode

    1. Imports System.IO
    2. Imports Excel = Microsoft.Office.Interop.Excel
    3. Imports System.Windows.Forms.DataVisualization.Charting

    Für diese Funktion braucht man die aber nicht soweit ich weiß. Außer es wird auf etwas zugegriffen, was bei denen hier schon dabei ist.

    Cistbesser schrieb:

    die Imports
    Ich meine die

    RodFromGermany schrieb:

    DLLs
    in Projekt -> Eigenschaften -> Verweise.
    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!