2011-09-09 3 views
2

Excel 보고서를 만들 때 EPPlus을 사용하고 있습니다. 이제 사용자가 직접보고 싶은 기간을 필터링 할 수 있도록 DateTimePageField의 피벗을 만들려고합니다. 그러나 내가 기본, 데이터 워크 시트에 따라 년, 월 또는 일 동안 이것을 필터링 할 수 있지만, 나는 피벗에서 작동하지 않습니다. 여기 Excel 피벗에서 년, 월, 일의 DateTime 필드를 필터링하십시오.

내가 무엇을 가지고 :

그것은 시간, 분, 달 f.e.에 의해 그룹 (아래 그림 참조)를 포함하여 목록에서 날짜 값을 선택 만 가능
Dim wsPivot = excel.Workbook.Worksheets.Add("Pivot") 
Dim wsData = excel.Workbook.Worksheets.Add("Data") 
Dim source = workSheet.GetDataSource 
wsData.Cells("A1").LoadFromDataTable(source, True, OfficeOpenXml.Table.TableStyles.Medium6) 
For Each col As DataColumn In source.Columns 
    If col.DataType = GetType(Date) Then 
     Dim colNumber = col.Ordinal + 1 
     Dim range = wsData.Cells(1, colNumber, source.Rows.Count, colNumber) 
     range.Style.Numberformat.Format = "dd.mm.yyyy" 
    End If 
Next 
Dim dataRange = wsData.Cells(wsData.Dimension.Address.ToString()) 
dataRange.AutoFitColumns() 
Dim pivotTable = wsPivot.PivotTables.Add(wsPivot.Cells("A3"), dataRange, "Open Contacts") 
pivotTable.PageFields.Add(pivotTable.Fields("OwnedAt")) '** this is the date column i want to group **' 
pivotTable.PageFields.Add(pivotTable.Fields("Owner")) 
pivotTable.RowFields.Add(pivotTable.Fields("Country")) 
pivotTable.ColumnFields.Add(pivotTable.Fields("Status")) 
pivotTable.DataFields.Add(pivotTable.Fields("Count")) 

. 여기

enter image description here

의 데이터 시트에서 필터리스트이다. 이것을 피봇에서 얻는 방법?

enter image description here

은 사전에 감사합니다.

참고 : 나는 또한 이것을 on codeplex에게 요청했습니다. EPPlus에 대한 경험이 없지만 다른 라이브러리와 비슷한 문제를 알고 있더라도 다른 사람이 도울 수 있습니다. DateTime 값을 SQL 당 (연도, 월, 일) 별개의 열로 나눌 수 있습니다. 그러나 피벗은 너무 많은 분야 (나는 또한 다른 날짜 필드를 분할해야 할 것입니다)와 더 혼란 스러울 것입니다 두려워. 프로그래밍 방식으로 피벗을 생성하는 데 전혀 경험이 없어도 경험이 풍부한 사용자는 무엇이 좋을까요?

답변

1

데이터 시트에 하나의 포맷되지 않은 행이 있기 때문에 Excel에서 Page Field와 RowField 모두 내 날짜 필드별로 그룹화 할 수없는 이유는 무엇입니까? 다음 줄이 문제 (내 질문에 전체 코드 참조) 원인 : 범위의 세포-방법에

Dim range = wsData.Cells(1, colNumber, source.Rows.Count, colNumber) 
range.Style.Numberformat.Format = "dd.mm.yyyy" 

매개 변수은 다음과 같습니다

1. From-Row 2. From-Column 3. To-Row 4. To-Column 

LoadFromDataTable 때문에이 Colums '이름과 함께 DataTable을로드 헤더의 마지막 행은 서식이 지정되지 않으므로 피벗은 날짜를 그룹화 할 수 없습니다.

Dim range = wsData.Cells(2, colNumber, source.Rows.Count + 1, colNumber) 
:

그래서이 그것을 고정