2015-01-14 5 views
0

피벗 테이블 정의를 기반으로 일부 분석 엔티티를 만들 수있는 Excel 추가 기능 테스트를 자동화하려고합니다. cubefield 객체를 사용하여 임의의 피벗 테이블을 만들 수 있습니다 (행, 열 및 계수에 임의의 필드를 추가하고 있음). 그러나 일부 필터링을 추가해야하고 여기에 붙어 있습니다. 큐브 필드 항목 목록을 가져 오는 방법이 있습니까? 예를 들어 필터에 날짜 필드가있는 경우 모든 요일을 나열한 다음 필터링 할 임의의 요일을 선택하고 싶습니다.C# 및 Excel 큐브 필드 항목 목록

이것은 내 코드가 아닐지 모르지만 제 목적을 위해 작동합니다. 저는 기본적으로 큐브 필드를 잡아서 치수 또는 치수인지 확인한 다음 방향을 설정합니다 방향입니다.

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 ? 

    } 

답변

0

이처럼 필드를 필터링 할 수 있습니다

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

이는 그것이 당신이 찾고 있다면

set Excel Filter

확실하지 피봇 테이블의 필터를 설정합니다.

+0

안녕하세요 Fabian, 답장을 보내 주셔서 감사합니다. 문제는 olap 데이터 소스를 사용하고 있기 때문에 pivotField 또는 cubefield에 어떤 멤버가 있는지 모르겠다는 것입니다. 그래서 예를 들어 한 번 필터와 몇 년 동안 기계 이름을 갖게됩니다. 그래서 내가하려고했던 것은 무작위로 일부 회원을 붙잡고 (예 : 스크린 샷 번호 38,42에서와 같이) 필터로 전달하는 것입니다. 그러나 나는이 가치를 얻을 수있는 방법을 찾을 수 없습니다. – Lukas