Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/259.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_Vba_Olap_Excel Interop - Fatal编程技术网

C#和excel立方字段项列表

C#和excel立方字段项列表,c#,excel,vba,olap,excel-interop,C#,Excel,Vba,Olap,Excel Interop,我正在尝试自动测试excel加载项,它允许您基于透视表定义创建一些分析实体。 我能够使用cubefield对象创建随机数据透视表(我将随机字段添加到行、列和度量值中),但我还需要添加一些筛选,我在这里遇到了麻烦。 有没有办法获取cubefield项目列表?例如,当我在过滤器中有日期字段时 列出所有天数,然后我想选择一些随机天数进行筛选 这是我的代码,也许它不优雅,但它符合我的目的。 我基本上是抓取立方场,检查它是尺寸还是尺寸,然后设置 这是方向 public void PivotTableFi

我正在尝试自动测试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 ? 

    }
public void数据透视表字段列表()
{
_currentPivotTable=(Excel.PivotTable)\工作表.PivotTables(“数据透视表1”);
_currentPivotTable.ManualUpdate=true;
List measureList=新列表();
列表维度列表=新列表();
foreach(当前数据透视表.CubeFields中的Excel.CubeField字段)
{
if(field.CubeFieldType==Excel.XlCubeFieldType.xlMeasure&&field.ShowInFieldList)
{
测量列表添加(字段);
}
}
foreach(当前数据透视表.CubeFields中的Excel.CubeField字段)
{
if(field.CubeFieldType!=Excel.XlCubeFieldType.xlMeasure&&field.ShowInFieldList)
{
维度列表。添加(字段);
}
}
Random dimRan=新的Random();
dimRan.Next(0,dimensionList.Count);
Random mesRan=新的Random();
mesRan.Next(0,measureList.Count);
dimensionList.ToArray();
测量列表ToArray();
Excel.CubeField[]度量值域列表=新的Excel.CubeField[3];
Excel.CubeField[]dimensionRandomList=新建Excel.CubeField[6];
对于(int i=0;i<3;i++)
{
measureRandomList[i]=measureList[mesRan.Next(1,measureList.Count)];
}
对于(int i=0;i<6;i++)
{
dimensionRandomList[i]=dimensionList[dimRan.Next(i,dimensionList.Count)];
}
对于(int i=0;i<3;i++)
{
变量字段=度量值域列表[i];
var name=measureRandomList[i]。名称;
field.Orientation=Excel.XlPivotFieldOrientation.xlDataField;
}
dimensionRandomList[0]。方向=Excel.XlPivotFieldOrientation.xlRowField;
dimensionRandomList[1]。方向=Excel.XlPivotFieldOrientation.xlColumnField;
dimensionRandomList[2]。方向=Excel.XlPivotFieldOrientation.xlPageField;
dimensionRandomList[2]。EnableMultiplePageItems=true;
//如何获取cubefield项目列表?
}

您可以像这样筛选字段:

yourPivotField.CurrentPageName = string.Format("[{0}].[{1}].&[{2}]", SheetName, FieldName, FieldValue);
这将设置透视表的过滤器


不确定您是否正在搜索。

你好,Fabian,谢谢您的回答,问题是我不知道pivotField或更确切地说是cubefield中有哪些成员,因为我使用的是olap数据源。例如,有一次我将在过滤器中使用多年,下一次我将有一些机器的名称。所以我想做的是随机抓取一些成员(比如你的截图上的数字38,42)并将其传递给过滤器。但我找不到得到这个值的方法。