2011-09-09 355 views
2

我使用EPPlus來創建Excel報表。 現在,我正在嘗試創建一個帶有DateTimePageField的透視圖,以便用戶可以過濾他自己希望看到的時間段。但是,雖然我可以根據默認數據工作表中的年份,月份或日期過濾此數據,但我無法在數據透視表中使用它。在Excel中,按年份,月份和日期過濾DateTime字段

這裏是我有:

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")) 

這是唯一可以從列表,包括小時和分鐘,而不是按月F.E.組(見下圖),選擇日期時間值。

enter image description here

這是從數據工作表中的過濾器列表。如何獲得這個在樞軸?

enter image description here

預先感謝您。

注意:我也問過這個on codeplex沒有成功。也許其他人可以提供幫助,即使他沒有使用EPPlus的經驗,但也知道與其他圖書館有類似的問題。 我可以將DateTime值分成每個sql(年,月,日)單獨的列。但我擔心這個關鍵點會讓很多領域變得更加混亂(我還需要分割其他的日期字段)。 即使沒有任何經驗,在編程生成樞軸,什麼經驗的Excel用戶(我不)推薦?

回答

1

爲什麼excel無法在PageField和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'名稱作爲數據表頭,最後一行保持未格式化,因此數據透視不能將日期分組。

所以這個固定:

Dim range = wsData.Cells(2, colNumber, source.Rows.Count + 1, colNumber) 
相關問題