Excel数据透视表:将值字段从行移动到列

时间:2014-06-03 09:29:07

标签: c# excel pivot-table

我在c#中开发了一个excel插件,并且必须创建一个数据透视表,我不知道如何组织数据,应该如何。

首先是数据源:

Pivot Data Source

这就是最终数据透视表的外观:

Pivot should looks like this

但我只能得到这样的东西,我不知道如何改变我的代码:

This is what my code does with it -.-

最后我的代码来安排数据源列:

/* PIVOT RowFields */
Excel.PivotField nameField = pTable.PivotFields("Name");
nameField.Orientation = Excel.XlPivotFieldOrientation.xlRowField;
nameField.Position = 1;

Excel.PivotField monthField = pTable.PivotFields("Monat");
monthField.Orientation = Excel.XlPivotFieldOrientation.xlRowField;
monthField.Position = 2;

/* PIVOT Data */
Excel.PivotField sum200Field = pTable.PivotFields("Summe 1");
sum200Field.Orientation = Excel.XlPivotFieldOrientation.xlDataField;

Excel.PivotField sum700Field = pTable.PivotFields("Summe 2");
sum700Field.Orientation = Excel.XlPivotFieldOrientation.xlDataField;

Excel.PivotField sumDiffField = pTable.PivotFields("Differenz");
sumDiffField.Orientation = Excel.XlPivotFieldOrientation.xlDataField;

我使用的是.NET Framework 4 ...我在互联网上阅读了很多文章,但我读到的内容都没有用......

有没有人有想法?

更新:

正如@ MP24发布的那样,在我的代码末尾添加这两个C#-Lines,这些列将显示为独占名称和月份的分组:

Excel.PivotField dataField = pTable.DataPivotField;
dataField.Orientation = Excel.XlPivotFieldOrientation.xlColumnField;

UPDATE2:

要对月份和名称列进行分组,以下代码将显示如何:

/* PIVOT ZEILEN */
Excel.PivotField monthField = pTable.PivotFields("Monat");
monthField.Orientation = Excel.XlPivotFieldOrientation.xlRowField;
monthField.LayoutCompactRow = true;
monthField.LayoutForm = Excel.XlLayoutFormType.xlOutline;
monthField.set_Subtotals(1, false);

Excel.PivotField nameField = pTable.PivotFields("Name");
nameField.Orientation = Excel.XlPivotFieldOrientation.xlRowField;
nameField.LayoutCompactRow = true;
nameField.set_Subtotals(2, false);

2 个答案:

答案 0 :(得分:2)

您必须更改数据字段的方向:

VBA代码是

ActiveSheet.PivotTables("PivotTable1").DataPivotField.Orientation = xlColumnField

这转换为C#代码:

Excel.PivotField dataField = pTable.DataPivotField;
dataField.Orientation = Excel.XlPivotFieldOrientation.xlColumnField;

编辑请注意,为了理解数据透视表,宏录制器会为您提供良好的提示。只需在执行所需操作之前开始录制宏,然后停止宏。将代码中的见解转移到C#中将很容易。

答案 1 :(得分:2)

试试这个:

pivotTable.DataOnRows = false;