Announcement

Collapse
No announcement yet.

Excel Diagramm mit Sekundärachse erstellen

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Excel Diagramm mit Sekundärachse erstellen

    Hallo Miteinander,

    Ich möchte ein paar Messdaten, die ich ich während des Prozesses in einem Array ablege, in einem Excel Diagramm darstellen und speichern.
    Das übertragen der Werte in ein Excel und das erstellen des Diagramm ist bereits erledigt und funktioniert einwandfrei.
    Da aktuell nur eine Y-Achse (Vertikal) dargestellt wird und eine Tabellenspalte (Kraft) viel größere Werte (z.B. 1000) besitzt, als die anderen beiden Tabellenspalten (z.B. 10), ist die Skalierung des Diagramm nicht gerade perfekt. Nun möchte ich das im Diagramm die Tabellespalte (Kraft) als Sekundärachse dargestellt wird.
    Wie kann nun die Sekundärachse hinzugefügt werden und an die gewünchte Tabellenspalte zugewiesen werden?

    Aktueller Code: Erstellen des Diagramms
    Code:
                // Name des dritten Arbeitsblattes
                myExcelWorkSheet3 = (Excel.Worksheet)myExcelWorkbook.Sheets["Diagramm"];
    
                // Diagramm erstellen
                Excel.Range chartRange;
                Excel.ChartObjects xlCharts = (Excel.ChartObjects)myExcelWorkSheet3.ChartObjects(Type.Missing);
                Excel.ChartObject myChart = (Excel.ChartObject)xlCharts.Add(10, 50, 650, 400);
                Excel.Chart chartPage = myChart.Chart;
    
                chartRange = myExcelWorkSheet2.get_Range("B6", "E" +(i+7).ToString());      // Daten für Diagramm einlesen
    
    
                //Achsen Beschriftung X-Achse
                Excel.Axis xAchse = (Excel.Axis)chartPage.Axes(Excel.XlAxisType.xlCategory, Excel.XlAxisGroup.xlPrimary);
                xAchse.HasTitle = true;
                xAchse.AxisTitle.Text = "Zeit [s]";
    
                //Achsen Beschriftung Y-Achse
                Excel.Axis yAchse = (Excel.Axis)chartPage.Axes(Excel.XlAxisType.xlValue, Excel.XlAxisGroup.xlPrimary);
                yAchse.HasTitle = true;
                yAchse.AxisTitle.Text = "Weg [mm], Temperatur [°C]";
    
                chartPage.SetSourceData(chartRange, misValue);                            // Datenübergabe an Diagramm
                chartPage.ChartType = Excel.XlChartType.xlLine;                             // Diagramm Type
    Vielen Dank bereits im Voraus für eure Antworten.

  • #2
    Hast Du es denn schon mal per Hand in Excel geschafft? Wenn ja kannst Du einfach den Makro Rekorder bemühen. Einfach den Makro Rekorder starten, dann erzeugst Du das Diagramm mit der 2. Achse. Danach lässt Du Dir den Quellcode des Makros anzeigen. Dort solltest Du dann eigentlich sehen wie das mit den Achsen funktioniert. So habe ich früher immer nach Excel Funktionen gesucht von denen ich nicht wusste wie man sie programmatisch umsetzt

    Comment


    • #3
      Habe nun den Makro Recoder mitlaufen lassen: Code ist nun in VB:

      Code:
        ActiveSheet.ChartObjects("Diagramm 1").Activate
          ActiveChart.FullSeriesCollection(2).Select
          ActiveChart.FullSeriesCollection(2).AxisGroup = 2
          ActiveSheet.ChartObjects("Diagramm 1").Activate
          ActiveChart.FullSeriesCollection(2).Select
      Die Funktion müsste die FullSeriesCollection sein. Finde die Funktion in C# aber noch nicht.
      Was meint ihr zu diesem Code?
      Zuletzt editiert von stb_abe; 24.03.2014, 12:49.

      Comment


      • #4
        FullSeriesCollection ist laut Doku ein Excel 2013 Feature. Die kannst du also nur nutzen wenn die Interop Assembly die du nutzt auch gegen diese Version gebaut wurde und nicht was älteres ist.
        Ersetz mal FullSeriesCollection durch SeriesCollection die gab es auch in Excel 2010.

        Comment


        • #5
          Hier die Lösung:

          Code:
          //Auswahl der gewünschten Reihe als Sekundärachse (Y-Achse)
          Excel.Series series2 = (Excel.Series)chartPage.FullSeriesCollection(2); //2=Reihe2
          series2.Select();
          series2.AxisGroup = Excel.XlAxisGroup.xlSecondary;                          //Sekundärachse
          Je nach Wunsch kann noch die zweite X-Achse hinzufügt werden:
          Code:
          chartPage.set_HasAxis(Excel.XlAxisType.xlCategory, Excel.XlAxisGroup.xlSecondary, true);
          Danke für eure Hilfe.

          Comment


          • #6
            Danke dass Du die Lösung noch gepostet hast

            Comment

            Working...
            X