Отфильтруйте поле DateTime по году, месяцу и дню в сводной таблице Excel - PullRequest
2 голосов
/ 09 сентября 2011

Я использую 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"))

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

enter image description here

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

enter image description here

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

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

1 Ответ

1 голос
/ 26 сентября 2011

Причина, по которой 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 загрузил DataTable с именами Colums в качестве заголовка, последняя строка осталась неотформатированной, поэтому сводная таблица не может сгруппировать дату.

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

Dim range = wsData.Cells(2, colNumber, source.Rows.Count + 1, colNumber)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...