如何更改我的数据透视表以便以所需方式显示数据?

时间:2016-06-22 15:40:29

标签: c# excel pivot-table excel-interop

我已经能够将数据透视表拖到舞池上了,但是还没有能够将它转向布吉 - 我们似乎一直踩着对方的脚趾。我已经在工作表上获得了构建数据透视表的数据。该类描述了这些数据:

public class PriceVarianceData
{
    public String Unit { get; set; }
    public String ShortName { get; set; }
    public String ItemCode { get; set; }
    public String Description { get; set; }
    public String PriceWeek { get; set; }
    public String Week { get; set; }
    public String Price { get; set; }
    public String Variance { get; set; }
    public String VarianceAverage { get; set; }
    public int RegionOrder { get; set; }
    public int ContractPrice { get; set; }
}

工作表上的第一列(" A")包含单位值,第二列(" B")显示ShortName值等。

我使用以下代码从这些数据创建数据透视表:

private void AddPivotTable()
{
    pivotData = _xlSheet.Range["A1:K1600"];
    pivotDestination = _xlSheet.Range["A1602", useDefault];

    _xlBook.PivotTableWizard(
        Excel.XlPivotTableSourceType.xlDatabase,
        pivotData,
        pivotDestination,
        pivotTableName,
        true,
        true,
        true,
        true,
        useDefault,
        useDefault,
        false,
        false,
        Excel.XlOrder.xlDownThenOver,
        0,
        useDefault,
        useDefault
    );

    // Set variables used to manipulate the Pivot Table.
    pivotTable = (Excel.PivotTable)_xlSheet.PivotTables(pivotTableName);

    shortnamePivotField = (Excel.PivotField)pivotTable.PivotFields(2);
    itemcodePivotField = (Excel.PivotField)pivotTable.PivotFields(3);
    descriptionPivotField = (Excel.PivotField)pivotTable.PivotFields(4);
    priceweekPivotField = (Excel.PivotField)pivotTable.PivotFields(5);
    weekPivotField = (Excel.PivotField)pivotTable.PivotFields(6);
    regionorderPivotField = (Excel.PivotField)pivotTable.PivotFields(10);

    // Format the Pivot Table.
    pivotTable.Format(Excel.XlPivotFormatType.xlReport2);
    pivotTable.InGridDropZones = false;
    pivotTable.SmallGrid = false;
    pivotTable.ShowTableStyleRowStripes = true;
    pivotTable.TableStyle2 = "PivotStyleLight1";

    // The PivotFields have the following interesting properties:
    // Orientation, Function, Calculation

    // Page Field
    //shortnamePivotField.Orientation = Excel.XlPivotFieldOrientation.xlPageField;

    // Column Field
    priceweekPivotField.Orientation = Excel.XlPivotFieldOrientation.xlColumnField;

    // Row Fields
    descriptionPivotField.Orientation = Excel.XlPivotFieldOrientation.xlRowField;
    //regionorderPivotField.Orientation = Excel.XlPivotFieldOrientation.xlRowField;

    // Data Fields
    //contractPricePivotField.Orientation = Excel.XlPivotFieldOrientation.xlDataField;
    //contractPricePivotField.Function = Excel.XlConsolidationFunction.xlSum;
    itemcodePivotField.Orientation = Excel.XlPivotFieldOrientation.xlDataField;
    itemcodePivotField.Function = Excel.XlConsolidationFunction.xlSum;
}

不可否认,范围值的硬编码有点像doofusesque,但这是一个实验项目,它将始终返回相同(数量)的数据,所以在这种情况下,它适用于这种有点人为的情况。

上面的代码确实在工作表中添加了一个数据透视表,但它提供了查看器不足的值,因为它没有意义(最后几行原始数据显示在顶部;数据透视表从第1602行开始):< / p>

enter image description here

我意识到问题的存在是因为我没有将正确的PivotField指定为xlPageField,xlColumnField [s],xlRowField [s]和xlDataField [s]。问题在于我的不客气;而不是围绕这些数据包裹我的思绪,我的灰质在数据透视表的城墙上以一个休息的角度躺着松弛。

我需要做些什么来改变数据透视表的外观,以便显示:

每个ItemCode的总计(例如&#34; 110051&#34;),无论ShortName如何。

......也许在另一个数据透视表中:

每个ShortName的总计(例如&#34; T&amp; T&#34;),无论ItemCode如何。

???

更新

受到评论here的启发,我添加了列标题,这更改了数据透视表:

enter image description here

更新2

这是我想在代码中创建的虚假生成(使用GUI,而不是代码中)数据透视表:

enter image description here

需要哪些代码来指定&#34; SHORT NAME&#34;作为&#34;报告过滤器&#34;,以便它将生成如上所示的下拉列表,并且可以选择ShortName的各种值?

更新3

这是我最好的猜测:

// Page Field
shortnamePivotField.Orientation = Excel.XlPivotFieldOrientation.xlPageField;

// Row Fields
descriptionPivotField.Orientation = Excel.XlPivotFieldOrientation.xlRowField;
itemcodePivotField.Orientation = Excel.XlPivotFieldOrientation.xlRowField;

// Data Fields
pricePivotField.Orientation = Excel.XlPivotFieldOrientation.xlDataField;
pricePivotField.Function = Excel.XlConsolidationFunction.xlSum;

...但是并没有比在墙上抛出代码更好,因为它没有工作:

enter image description here

1 个答案:

答案 0 :(得分:0)

我已经到了那里;我在自动回答另一个问题here时显示了我如何开始如何完成我需要的工作。