none
Aktivieren von Reihen aus einem Pivot Table RRS feed

  • Frage

  • Hallo Zusammen,

    ich verwende folgenden Code um aus einem DataTable ein Pivot Table zu erstellen und basierend auf diesem ein Chart zu erstellen:

                var xlApplication = new Excel.Application();
                var xlWbooks = xlApplication.Workbooks;
                xlWbooks.Open(Filename: filePath, AddToMru: true);
                var xlWbook = xlWbooks[1];

                Excel.Worksheet xlDataSheet = xlWbook.Sheets[1];
                Excel.Worksheet xlTargetSheet = xlWbook.Sheets.Add(After: xlApplication.ActiveSheet);
                xlTargetSheet.Name = "MySheet";

                Excel.Range pivotData = xlDataSheet.Cells.CurrentRegion;
                Excel.Range pivotTarget = xlTargetSheet.Cells.CurrentRegion;


                xlWbook.PivotTableWizard(
                    SourceType: Excel.XlPivotTableSourceType.xlDatabase,
                    SourceData: pivotData,
                    TableDestination: pivotTarget,
                    RowGrand: true,
                    ColumnGrand: true,
                    SaveData: true,
                    HasAutoFormat: true,
                    BackgroundQuery: true);

                Excel.PivotTable pTable = xlTargetSheet.PivotTables(1);
                var pivotRange = pTable.TableRange2;
        

                Excel.Shape pivotChart = xlTargetSheet.Shapes.AddChart2(
                    Style: -1,
                    XlChartType: Excel.XlChartType.xlArea);


                pivotChart.Chart.SetSourceData(pivotRange);
               
                // HOW TO ACTIVATE Columns in the Chart??

                xlWbook.Save();
                xlWbooks.Close();
                xlApplication.Quit();   

    Dies funktioniert so weit. Allerdings ist in meinem Chart nichts zu sehen. Wie kann ich also felder aktivieren (vgl. händisch über ms excel) damit diese dann im Diagramm gezeigt werden?

    Über Lösungsvorschläge wäre ich sehr dankbar.

    Gruß

    Dienstag, 11. August 2015 08:06

Antworten

  • In das sheet direkt werden noch keine Daten geladen. Wenn du in Excel mal schaust, sind alle Informationen ("Pivot Fields") rechts zum "anhaken" in der Liste.

    --> Vergleichbar mit dem Erstellen einer Pivot Tabelle in Excel. Dort werden die Daten auch nicht direkt ins sheet / den chart geladen.

    Gruß

    Edit: in Excel sieht die Datei nach Behandlung mit obigem Code wie folgt aus:

    Es scheint folgender Teil (Quelle: http://blogs.msdn.com/b/andreww/archive/2008/07/25/creating-a-pivottable-programmatically.aspx) zu fehlen:

    Set up the SalesTerritory field as the page field, and FullName as the row field:

    Excel.PivotField pageField =       (Excel.PivotField)pivotTable.PivotFields("SalesTerritory");

    pageField.Orientation = Excel.XlPivotFieldOrientation.xlPageField;

    Excel.PivotField rowField =       (Excel.PivotField)pivotTable.PivotFields("FullName");

    rowField.Orientation = Excel.XlPivotFieldOrientation.xlRowField;

     

    Add a data field for the sales for 2004:

    pivotTable.AddDataField(

        pivotTable.PivotFields("2004"), "Sum of 2004", Excel.XlConsolidationFunction.xlSum);

    Done. The end result looks like this:

    Die Problematik hierbei: wenn ich das ganze versuche vergleichbar zu implementieren bekomme ich die Fehlermeldung:

    An unhandled exception of type 'System.Runtime.InteropServices.COMException' occurred in System.Dynamic.dll

    Additional information: Ausnahme von HRESULT: 0x800A03EC

    Laut google können hiervon eine Unterschreitung (0) oder Überschreitung der Zellenazahl verantwortlich sein. Für mich bedeutet dass, das entsprechende Field wurde nicht gefunden. --> Achtung ich mag falsch liegen was das betrifft.

    Um präziser zu werden: folgender Teil aus der Vorlage generiert den Fehler:

    pivotTable.AddDataField(

        pivotTable.PivotFields("2004"), "Sum of 2004", Excel.XlConsolidationFunction.xlSum);

    (ich habe natürlich die Namen 2004 auf die Namen meiner Datei angepasst)

    GELÖST!

    statt dem fehlererzeugenden Code habe ich nun verwendet:

                Excel.PivotField dataFieldOne = (Excel.PivotField)pTable.PivotFields("2004");

                dataFieldOne.Orientation = Excel.XlPivotFieldOrientation.xlDataField;

    • Bearbeitet Bonexy Mittwoch, 12. August 2015 07:30
    • Als Antwort markiert Bonexy Mittwoch, 12. August 2015 07:30
    Mittwoch, 12. August 2015 05:45

Alle Antworten

  • Hallo,

    wenn  Source Data richtig gesetzt wurde, dann kann man den Chart mit

    pivotChart.Chart.Refresh();

    aktualisieren.

    Grüße

    Dienstag, 11. August 2015 10:39
  • Hallo,

    vielen Dank für die Antwort dies hat leider nicht funktioniert.

    Ich müsste die Felder irgendwie aktivieren / benutzen (pivot fields) --> vllt hilft das weiter bei der Antwortfindung.

    Gruß

    Dienstag, 11. August 2015 12:42
  • Hallo,

    mit der Methode SetSourceData wird die Datenquelle für das Diagramm festgelegt und das Diagramm wird mit Daten initialisiert.

    pivotChart.Chart.SetSourceData(pivotRange); 
       

    Hier wird der Datenbereich auf die gesamte Pivot Tabelle gelegt. Wie sieht die Pivot Tabelle aus?

    Grüße

    Dienstag, 11. August 2015 14:58
  • In das sheet direkt werden noch keine Daten geladen. Wenn du in Excel mal schaust, sind alle Informationen ("Pivot Fields") rechts zum "anhaken" in der Liste.

    --> Vergleichbar mit dem Erstellen einer Pivot Tabelle in Excel. Dort werden die Daten auch nicht direkt ins sheet / den chart geladen.

    Gruß

    Edit: in Excel sieht die Datei nach Behandlung mit obigem Code wie folgt aus:

    Es scheint folgender Teil (Quelle: http://blogs.msdn.com/b/andreww/archive/2008/07/25/creating-a-pivottable-programmatically.aspx) zu fehlen:

    Set up the SalesTerritory field as the page field, and FullName as the row field:

    Excel.PivotField pageField =       (Excel.PivotField)pivotTable.PivotFields("SalesTerritory");

    pageField.Orientation = Excel.XlPivotFieldOrientation.xlPageField;

    Excel.PivotField rowField =       (Excel.PivotField)pivotTable.PivotFields("FullName");

    rowField.Orientation = Excel.XlPivotFieldOrientation.xlRowField;

     

    Add a data field for the sales for 2004:

    pivotTable.AddDataField(

        pivotTable.PivotFields("2004"), "Sum of 2004", Excel.XlConsolidationFunction.xlSum);

    Done. The end result looks like this:

    Die Problematik hierbei: wenn ich das ganze versuche vergleichbar zu implementieren bekomme ich die Fehlermeldung:

    An unhandled exception of type 'System.Runtime.InteropServices.COMException' occurred in System.Dynamic.dll

    Additional information: Ausnahme von HRESULT: 0x800A03EC

    Laut google können hiervon eine Unterschreitung (0) oder Überschreitung der Zellenazahl verantwortlich sein. Für mich bedeutet dass, das entsprechende Field wurde nicht gefunden. --> Achtung ich mag falsch liegen was das betrifft.

    Um präziser zu werden: folgender Teil aus der Vorlage generiert den Fehler:

    pivotTable.AddDataField(

        pivotTable.PivotFields("2004"), "Sum of 2004", Excel.XlConsolidationFunction.xlSum);

    (ich habe natürlich die Namen 2004 auf die Namen meiner Datei angepasst)

    GELÖST!

    statt dem fehlererzeugenden Code habe ich nun verwendet:

                Excel.PivotField dataFieldOne = (Excel.PivotField)pTable.PivotFields("2004");

                dataFieldOne.Orientation = Excel.XlPivotFieldOrientation.xlDataField;

    • Bearbeitet Bonexy Mittwoch, 12. August 2015 07:30
    • Als Antwort markiert Bonexy Mittwoch, 12. August 2015 07:30
    Mittwoch, 12. August 2015 05:45