我正在使用NReco PivotData库在日期字段上进行旋转,以便日期在标题中水平显示。这很好,但是,我想添加日期来填补空白,以便结果更完整(默认情况下,库只显示记录中包含的日期)。
例如,如果我总共有2条记录,第一条记录是01/01/2018,第二条记录是10/01/2018,我将不会列出所有日期之间的列。
我已经为我的范围中的每个日期添加了空值的记录,但是,这会在结果的顶部添加一个空白行,这是不理想的。
总之,我想为 Date 维度添加“虚拟”值,以便通过显示没有任何条目的日期列来获得更完整的结果集。
代码
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(...);
}
答案 0 :(得分:1)
默认情况下,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];
}
(如果您不想在数据透视表中创建其他行/列,则必须使用除“Date”之外的维度的实键。您可以从第一个真正的数据点获取它们:object[] firstEntryKeys = pivotData.First().Key;
)
此行为由PivotData.LazyAdd属性控制,可以禁用。