Question

J'utilise EPPlus pour créer des rapports Excel. Maintenant, je suis en train de créer un pivot avec un DateTime de PageField, de sorte que l'utilisateur peut filtrer la période qu'il veut voir par lui-même. Mais bien que je puisse filtrer cette année pour, mois ou jours dans la feuille de données par défaut selon, je ne comprends pas travailler dans le pivot.

Voici ce que j'ai:

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

Il est possible de sélectionner des valeurs datetime dans la liste y compris les heures et les minutes et pas un groupe par mois F.E. (voir photo ci-dessous).

entrer image description ici

Voici le filtre liste à partir des données-feuille de calcul. Comment obtenir ce en pivot?

entrer image description ici

Je vous remercie à l'avance.

Remarque : Je l'ai également demandé à ce sur CodePlex sans succès. Peut-être que quelqu'un d'autre peut aider, même s'il n'a pas d'expérience avec EPPlus mais connaît des problèmes similaires avec d'autres bibliothèques. Je pourrais diviser les valeurs DateTime dans des colonnes séparées par sql (année, mois, jour). Mais je crains que le pivot va obtenir plus de confusion avec autant de domaines (je aussi de diviser les autres champs de date). Même sans expérience du tout dans les pivots, générant programatically ce qui les utilisateurs expérimentés (Excel je ne suis pas) recommander?

Était-ce utile?

La solution

La raison pour laquelle Excel pourrait pas regrouper par ma date champ ni dans PageField ni RowField était parce qu'il y avait une ligne non formatée dans la feuille de données. Les lignes suivantes provoquent ce problème (voir code complet dans ma question):

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

Les paramètres de cellules Méthode de la gamme sont les suivantes:

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

Parce que LoadFromDataTable chargé le DataTable avec les noms des colonnes comme en-tête, la dernière ligne maintenue sans mise en forme, donc le pivot peut pas regrouper la date.

Alors que ce soit réglé il:

Dim range = wsData.Cells(2, colNumber, source.Rows.Count + 1, colNumber)
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top