我正在使用 NReco PivotData 庫在日期字段上進行透視,以便日期在標題中水平顯示。這很有效,但是,我想添加日期來填補空白,以便結果更完整(默認情況下,庫僅顯示包含在記錄中的日期)。例如,如果我總共有 2 條記錄,第一條記錄是 01/01/2018,第二條記錄是 10/01/2018,那么我將不會有包含兩者之間所有日期的列。我已經通過為我的范圍中的每個日期添加空值的記錄來解決這個問題,但是,這會在結果的頂部添加一個空白行,這并不理想??傊?,我想為我的日期維度添加“虛擬”值,以便通過顯示沒有任何條目的日期列來獲得更完整的結果集。代碼using (var package = new ExcelPackage()){ var dimensionNames = new string[] { "Id", "Name", "Date", "Hours" }; var aggregator = new SumAggregatorFactory("Hours"); var rows = new Dictionary<string, object>() { { 1, "John Smith", new DateTime(2018, 1, 1), 5 }, { 2, "John Doe", new DateTime(2018, 1, 10), 10 } }; var pivotData = new PivotData(dimensionNames, aggregator, rows); var pivotTable = new PivotTable(new string[] { "Name" }, new string[] { "Date" }, pivotData); var worksheet = package.Workbook.Worksheets.Add("Report"); var tableWriter = new PivotTableExcelWriter(worksheet); tableWriter.Write(pivotTable); package.SaveAs(...);}
1 回答

慕的地8271018
TA貢獻1796條經驗 獲得超4個贊
默認情況下,PivotData類在使用索引器訪問時為非退出維度鍵創建新數據點,您可以使用它來創建“空”日期:
for (int i=1; i<=10; i++) {
// if aggregator for specified keys doesn't exist, it will be added
var aggr = pivotData[1, "John Smith", new Date(2018, 1, i), 5];
}
(你必須使用真正的鍵尺寸除“日期”,如果你不希望在數據透視表中創建額外的行/列,您可以從第一個真正的數據點得到他們。object[] firstEntryKeys = pivotData.First().Key;)
此行為由PivotData.LazyAdd屬性控制,可以禁用。
- 1 回答
- 0 關注
- 267 瀏覽
添加回答
舉報
0/150
提交
取消