我已经能够将数据透视表拖到舞池上了,但是还没有能够将它转向布吉 - 我们似乎一直踩着对方的脚趾。我已经在工作表上获得了构建数据透视表的数据。该类描述了这些数据:
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>
我意识到问题的存在是因为我没有将正确的PivotField指定为xlPageField,xlColumnField [s],xlRowField [s]和xlDataField [s]。问题在于我的不客气;而不是围绕这些数据包裹我的思绪,我的灰质在数据透视表的城墙上以一个休息的角度躺着松弛。
我需要做些什么来改变数据透视表的外观,以便显示:
每个ItemCode的总计(例如&#34; 110051&#34;),无论ShortName如何。
......也许在另一个数据透视表中:
每个ShortName的总计(例如&#34; T&amp; T&#34;),无论ItemCode如何。
???
受到评论here的启发,我添加了列标题,这更改了数据透视表:
这是我想在代码中创建的虚假生成(使用GUI,而不是代码中)数据透视表:
需要哪些代码来指定&#34; SHORT NAME&#34;作为&#34;报告过滤器&#34;,以便它将生成如上所示的下拉列表,并且可以选择ShortName的各种值?
这是我最好的猜测:
// 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;
...但是并没有比在墙上抛出代码更好,因为它没有工作: