Pregunta

Estoy usando Epplus Para crear informes de Excel. Ahora estoy tratando de crear un pivote con un DateTime PageField, para que el usuario pueda filtrar el período que quiere ver por sí mismo. Pero aunque puedo filtrar esto durante año, mes o días en la hoja de trabajo de Data Según por defecto, no lo hago funcionar en el pivote.

Esto es lo que tengo:

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

Solo es posible seleccionar valores de fecha y hora de la lista, incluidas horas y minutos y no agrupar por mes FE (ver la imagen a continuación).

enter image description here

Aquí está la lista de filtros de la hoja de trabajo de datos. ¿Cómo conseguir esto en pivote?

enter image description here

Gracias de antemano.

Nota: También he preguntado esto en codeplex sin éxito. Tal vez alguien más pueda ayudar incluso si no tiene experiencias con EPPLU, pero conoce problemas similares con otras bibliotecas. Podría dividir los valores de fecha y hora en columnas separadas por SQL (año, mes, día). Pero me temo que el pivote se volverá más confuso con tantos campos (también tendría que dividir los otros campos de fecha). Incluso sin experiencias en absoluto en la generación de pivotes programáticamente, ¿qué recomendarían los usuarios experimentados de Excel (no)?

¿Fue útil?

Solución

La razón por la cual Excel no pudo agrupar en mi campo de fecha ni en Pagefield ni en Rowfield fue porque había una fila sin formato en la hoja de datos. Las siguientes líneas causan este problema (ver código completo en mi pregunta):

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

Los parámetros en el método de células del rango son:

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

Porque LoadFromDataTable Cargó el datos con los nombres de los Colums como encabezado, la última fila mantuvo sin formato, por lo tanto, el pivote no puede agrupar la fecha.

Entonces esto lo solucionó:

Dim range = wsData.Cells(2, colNumber, source.Rows.Count + 1, colNumber)
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top