2011-09-09 305 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) 
相关问题