2

EPPlusを使用して Excel レポートを作成しています。DateTime PageField今、ユーザーが自分で見たい期間をフィルタリングできるように、でピボットを作成しようとしています。しかし、デフォルトでは、対応するデータワークシートで年、月、または日でこれをフィルタリングできますが、ピボットでは機能しません。

ここに私が持っているものがあります:

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

時間と分を含むリストから datetime 値を選択することのみが可能であり、月 fe でグループ化することはできません (下の図を参照)。

ここに画像の説明を入力

これは、データ ワークシートのフィルター リストです。これをピボットで取得するにはどうすればよいですか?

ここに画像の説明を入力

前もって感謝します。

:私は成功せずにこれをコードプレックスでも尋ねました。EPPlus の経験がなくても、他のライブラリに関する同様の問題を知っている人が助けてくれるかもしれません。DateTime 値を sql(年、月、日) ごとに別々の列に分割できます。しかし、ピボットが非常に多くのフィールドで混乱するのではないかと心配しています(他の日付フィールドも分割する必要があります)。プログラムでピボットを生成した経験がまったくない場合でも、経験豊富な Excel ユーザー (私はそうではありません) は何をお勧めしますか?

4

1 に答える 1

1

ExcelがPageFieldでもRowFieldでも日付フィールドでグループ化できなかった理由は、データシートにフォーマットされていない行が1つあったためです。次の行がこの問題を引き起こします(私の質問の完全なコードを参照してください):

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)
于 2011-09-26T15:19:08.400 に答える