2016-10-13 1 views
2

* Herausgegeben unten mit neuem CodeExcel VSTO + C# .NET + Erstellen Sie Pivot-Tabelle

Ich versuche, eine Pivot-Tabelle in C# .Net für eine Excel VSTO zu schaffen, sondern keeping eine Ausnahme, dass die Staaten geworfen zu werden:

Exception from HRESULT: 0x800A03EC 

das Blatt ich versuche, die Pivot-Tabelle zu erstellen ist oSheet genannt und ist das gleiche wie das Blatt, das die Quelldaten

ich einen Bereich für die Pivot-Tabelle Quelle schaffen hat:

Excel.Range pivotData = osheet.Range["A1", "B3"]; 

Ein Bereich für, wo die Pivot-Tabelle sein:

Excel.Range pivotDest = osheet.Range["A12", "B14"]; 

dann versuchen, die Tabelle mit diesem zu erstellen:

osheet.PivotTableWizard(
       Excel.XlPivotTableSourceType.xlDatabase, 
       pivotData, 
       pivotDest, 
       "Table", 
       true, 
       true, 
       true, 
       true, 
       true, 
       true, 
       false, 
       false, 
       Excel.XlOrder.xlDownThenOver, 
       0, 
       false, 
       false 
); 

Der Fehler auftritt in der Tabelle Assistenten Linie.

Irgendwelche Ideen zu dem, was den Fehler verursacht oder eine bessere Möglichkeit, eine Pivot-Tabelle über C# .Net zu erstellen?

* Neuer Code

 Excel.Application oApp; 
     Excel.Worksheet osheet; 
     Excel.Workbook oBook; 

     oApp = new Excel.Application(); 
     oBook = oApp.Workbooks.Add(); 
     osheet = (Excel.Worksheet)oBook.Worksheets.get_Item(1); 

     osheet.Cells[1, 1] = "Name"; 
     osheet.Cells[1, 2] = "Salary"; 

     osheet.Cells[2, 1] = "Frank"; 
     osheet.Cells[2, 2] = 1500000; 

     osheet.Cells[3, 1] = "Millford"; 
     osheet.Cells[3, 2] = 2200; 

     //Now capture range of first sheet = I will need this to create pivot table 
     Excel.Range oRange = osheet.Range["A1", "B3"]; 


     var pch = oBook.PivotCaches(); 

     Excel.Range pivotData = osheet.Range["A1", "B3"]; 

     Excel.PivotCache pc = pch.Create(XlPivotTableSourceType.xlDatabase, pivotData); 
     Excel.PivotTable pvt = pc.CreatePivotTable(osheet.Range["A12"], "MyPivotTable"); 

     pvt.PivotFields("Col1").Orientation = XlPivotFieldOrientation.xlRowField; 
     pvt.PivotFields("Col2").Orientation = XlPivotFieldOrientation.xlColumnField; 
     pvt.AddDataField(pvt.PivotFields("Col3"), "Sum of Col3", XlConsolidationFunction.xlSum); 
+0

Haben Sie [ 'PivotTables.Add' zu verwenden versucht, ] (https://msdn.microsoft.com/en-us/library/office/ff196910.aspx) anstatt den Assistenten zu verwenden? – PetLahev

Antwort

1

Ich antwortete nur eine ähnliche Frage neulich ...

https://stackoverflow.com/a/39968355/1278553

Auf den Punkt gebracht, die Art und Weise eine Pivot-Tabelle in C# zu erstellen ist:

Excel.Range pivotData = osheet.Range["A1", "B3"]; 

Excel.PivotCache pc = pch.Create(XlPivotTableSourceType.xlDatabase, pivotData); 
Excel.PivotTable pvt = pc.CreatePivotTable(osheet.Range["A12"], "MyPivotTable"); 

Und dann zuweisen Sie Ihre Zeile/Spalte und Datenfelder:

pvt.PivotFields("Col1").Orientation = XlPivotFieldOrientation.xlRowField; 
pvt.PivotFields("Col2").Orientation = XlPivotFieldOrientation.xlColumnField; 
pvt.AddDataField(pvt.PivotFields("Col3"), "Sum of Col3", XlConsolidationFunction.xlSum); 

Ich plagiiert stark von meiner vorherigen Antwort.

- EDIT 2016.10.17 -

Per Ihre aktualisierten Code, sollte dies nun die Pivot-Tabelle erstellen arbeiten:

var pch = oBook.PivotCaches(); 

Excel.Range pivotData = osheet.Range["A1", "B3"]; 

Excel.PivotCache pc = pch.Create(Excel.XlPivotTableSourceType.xlDatabase, pivotData); 
Excel.PivotTable pvt = pc.CreatePivotTable(osheet.Range["A12"], "MyPivotTable"); 

pvt.PivotFields("Name").Orientation = Excel.XlPivotFieldOrientation.xlRowField; 
pvt.AddDataField(pvt.PivotFields("Salary"), "Total Salary", 
    Excel.XlConsolidationFunction.xlSum); 
+0

Danke für die Antwort @Hambone; Fehle ich etwas Offensichtliches in dem bearbeiteten Code am Ende der Antwort? Eine Pivot-Tabelle wird nicht erstellt. – HShhanick

+1

@HShhanick - Ich habe die Lösung basierend auf dem von Ihnen geposteten Code aktualisiert. Das einzige, was wirklich falsch war, war, dass Sie auf die Spalten mit ihrem Namen verweisen mussten. Ich habe das getestet, und es hat an meinem Ende funktioniert. Hoffentlich wird es auch bei dir sein – Hambone