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

问题描述 投票:0回答:4

我正在用 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# 行,这些列将显示在右侧,不包括名称和月份的分组:

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);
c# excel pivot-table
4个回答
3
投票

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

VBA代码是

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

这会翻译成 C# 代码:

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

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


2
投票

试试这个:

pivotTable.DataOnRows = false;

1
投票
PivotField fld = pivotTable.RowFields("Data");
fld.Orientation = XlPivotFieldOrientation.xlColumnField;

0
投票
Microsoft.Office.Interop.Excel.PivotField fld = (Microsoft.Office.Interop.Excel.PivotField)pivotTable.RowFields["Data"];
fld.Orientation = XlPivotFieldOrientation.xlColumnField;

看起来定义为数据字段的字段的输出被发送到另一个名为“数据”的字段,因此在定义所有数据字段后将其放入,它会告诉 excel 将所有数据放入列而不是行中我们正在获取“数据”字段的句柄,并将其放入数据透视表的列中。

© www.soinside.com 2019 - 2024. All rights reserved.