Отфильтруйте поле DateTime для года, месяца и дня в Excel Pivot

Я использую EPPlus для создания отчетов Excel. Теперь я пытаюсь создать Pivot с DateTime PageField, чтобы пользователь мог отфильтровать период, который он хочет видеть самостоятельно. Но хотя я могу фильтровать это по году, месяцу или дням в соответствующем листе данных по умолчанию, я не могу заставить его работать в Pivot.

Вот что у меня есть:

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

Можно только выбрать значения даты и времени из списка, включая часы и минуты, а не группировать по месяцам, например (см. Рисунок ниже).

введите описание изображения здесь

Вот список фильтров из таблицы данных. Как получить это в опоре?

введите описание изображения здесь

Заранее спасибо.

Примечание. Я также спрашивал об этом о codeplex безуспешно. Может быть, кто-то еще может помочь, даже если у него нет опыта работы с EPPlus, но он знает похожие проблемы с другими библиотеками. Я мог бы разделить значения DateTime на отдельные столбцы для каждого sql (год, месяц, день). Но я боюсь, что сводная таблица станет более запутанной с таким количеством полей (мне также придется разделить другие поля даты). Что бы порекомендовали опытные пользователи Excel (я не), даже не имея опыта программной генерации сводок?


person Tim Schmelter    schedule 09.09.2011    source источник


Ответы (1)


Причина, по которой excel не мог сгруппировать по моему полю даты ни в PageField, ни в RowField, заключалась в том, что в таблице данных была одна неформатированная строка. Следующие строки вызывают эту проблему (см. Полный код в моем вопросе):

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

Параметры в Cells-Method диапазона:

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

Поскольку LoadFromDataTable загрузил DataTable с именами столбцов в качестве заголовка, последняя строка осталась неформатированной, поэтому сводная таблица не может сгруппировать дату.

Итак, это исправлено:

Dim range = wsData.Cells(2, colNumber, source.Rows.Count + 1, colNumber)
person Tim Schmelter    schedule 26.09.2011