Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/263.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/29.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# Excel数据透视表:将值字段从行移动到列_C#_Excel_Pivot Table - Fatal编程技术网

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

C# Excel数据透视表:将值字段从行移动到列,c#,excel,pivot-table,C#,Excel,Pivot Table,我正在用c开发一个excel加载项,必须创建一个透视表,我不知道如何组织数据,应该如何组织数据 首先是数据源: 这就是最终数据透视表的外观: 但我只得到了这样的东西,我不知道在哪里我必须如何更改我的代码: 最后,我的代码用于排列数据源列: /* PIVOT RowFields */ Excel.PivotField nameField = pTable.PivotFields("Name"); nameField.Orientation = Excel.XlPivotFieldOrientati

我正在用c开发一个excel加载项,必须创建一个透视表,我不知道如何组织数据,应该如何组织数据

首先是数据源:

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

但我只得到了这样的东西,我不知道在哪里我必须如何更改我的代码:

最后,我的代码用于排列数据源列:

/* 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;
我正在使用.NETFramework4。。。我在网上读了很多文章,但没有一篇是有用的

有人有主意吗

更新:

正如@MP24发布的,在我的代码末尾添加这两个C行,这些列将显示在右边,不包括姓名和月份分组:

Excel.PivotField dataField = pTable.DataPivotField;
dataField.Orientation = Excel.XlPivotFieldOrientation.xlColumnField;
更新2:

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

/* 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);

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

VBA代码是

ActiveSheet.PivotTables("PivotTable1").DataPivotField.Orientation = xlColumnField
这将转换为C代码:

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

编辑:请注意,为了理解透视表,宏记录器将为您提供很好的提示。只需在执行所需操作之前开始录制宏,然后停止宏。将代码中的细节转换为C将很容易。

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

VBA代码是

ActiveSheet.PivotTables("PivotTable1").DataPivotField.Orientation = xlColumnField
这将转换为C代码:

Excel.PivotField dataField = pTable.DataPivotField;
dataField.Orientation = Excel.XlPivotFieldOrientation.xlColumnField;
编辑:请注意,为了理解透视表,宏记录器将为您提供很好的提示。只需在执行所需操作之前开始录制宏,然后停止宏。将代码中的细节转换为C将很容易。

尝试以下方法:

pivotTable.DataOnRows = false;
试试这个:

pivotTable.DataOnRows = false;

非常感谢你。我使用了宏记录器,但这只是我已经使用过的提示,但是您的C代码在正确显示数据方面工作得非常好。。。还有一件事:我怎样才能知道组名和月份?这两个字段分别显示在不同的列中。我通过分组获得了它,我将它添加到我的原始post=这一行在表构建结束时为我工作:pTable.DataPivotField.Orientation=Excel.XlPivotFieldOrientation.xlColumnField;非常感谢你。我使用了宏记录器,但这只是我已经使用过的提示,但是您的C代码在正确显示数据方面工作得非常好。。。还有一件事:我怎样才能知道组名和月份?这两个字段分别显示在不同的列中。我通过分组获得了它,我将它添加到我的原始post=这一行在表构建结束时为我工作:pTable.DataPivotField.Orientation=Excel.XlPivotFieldOrientation.xlColumnField;