C#和excel cubefield项目列表

时间:2015-01-14 12:29:45

标签: c# excel vba olap excel-interop

我正在尝试自动化excel加载项的测试,允许您根据数据透视表定义创建一些分析实体。 我能够使用cubefield对象创建随机数据透视表(我将随机字段添加到行,列和度量)但我还需要添加一些过滤,这里我被卡住了。 有没有办法获得cubefield项目列表?例如,当我在过滤器中有日期字段时 所有天的列表然后我想选择一些随机天来过滤。

这是我的代码,也许它不优雅,但它适用于我的目的。 我基本上抓住立方体区域检查它是否是尺寸或尺寸然后我正在设置 这是方向。

public  void PivotTableFieldList()
{

        _currentPivotTable = (Excel.PivotTable) _worksheet.PivotTables("PivotTable1");
        _currentPivotTable.ManualUpdate = true;

        List<Excel.CubeField> measureList = new List<Excel.CubeField>();
        List<Excel.CubeField> dimensionList = new List<Excel.CubeField>();

        foreach (Excel.CubeField field in _currentPivotTable.CubeFields)
        {
            if (field.CubeFieldType == Excel.XlCubeFieldType.xlMeasure && field.ShowInFieldList)
            {
               measureList.Add(field);
            }
        }

        foreach (Excel.CubeField field in _currentPivotTable.CubeFields)
        {
            if (field.CubeFieldType != Excel.XlCubeFieldType.xlMeasure && field.ShowInFieldList)
            {
                dimensionList.Add(field);
           }
        }

        Random dimRan=new Random();
        dimRan.Next(0, dimensionList.Count);
        Random mesRan = new Random();
        mesRan.Next(0, measureList.Count);
        dimensionList.ToArray();
        measureList.ToArray();

        Excel.CubeField[] measureRandomList= new Excel.CubeField[3];
        Excel.CubeField[] dimensionRandomList = new Excel.CubeField[6];

        for (int i = 0; i < 3; i++)
        {
            measureRandomList[i] = measureList[mesRan.Next(1, measureList.Count)];
        }

        for (int i = 0; i < 6; i++)
        {
            dimensionRandomList[i] = dimensionList[dimRan.Next(i, dimensionList.Count)];
         }

        for (int i = 0; i < 3; i++)
        {
            var field = measureRandomList[i];
            var name = measureRandomList[i].Name;
            field.Orientation= Excel.XlPivotFieldOrientation.xlDataField;
        }

        dimensionRandomList[0].Orientation= Excel.XlPivotFieldOrientation.xlRowField;
        dimensionRandomList[1].Orientation = Excel.XlPivotFieldOrientation.xlColumnField;
        dimensionRandomList[2].Orientation = Excel.XlPivotFieldOrientation.xlPageField;
        dimensionRandomList[2].EnableMultiplePageItems=true;


        //How can I get cubefield items list ? 

    }

1 个答案:

答案 0 :(得分:0)

您可以按照以下方式过滤字段:

yourPivotField.CurrentPageName = string.Format("[{0}].[{1}].&[{2}]", SheetName, FieldName, FieldValue);

这会设置数据透视表的过滤器

set Excel Filter

不确定您是否正在搜索它。