我对一些看似这样的数据有一个遗留观点 - 请注意,9月到12月是在2015年,而不是2016年:
此数据的数据透视表版本显示所有 2016年的年份:
...因此,因为今年的混乱,9月和12月之后在之后错误地将它们误导了。
数据透视表是根据另一张与“旧版”工作表(9月12月= 2015年1月和2月= 2016年)相同数据的工作表中的源数据生成的:
日期值从源数据添加到数据透视表,如下所示:
var pch = _xlBook.PivotCaches();
int pivotDataRowsUsed = xlBook.Worksheets["PivotData"].UsedRange.Rows.Count;
int pivotDataColsUsed =
xlBook.Worksheets["PivotData"].UsedRange.Columns.Count;
string lastColWrittenAsAlpha
ReportRunnerConstsAndUtils.GetExcelColumnName(pivotDataColsUsed);
string endRange = string.Format("{0}{1}", lastColWrittenAsAlpha
pivotDataRowsUsed);
Range sourceData = _xlBook.Worksheets["PivotData"].Range[string.Format("A1:{0}", endRange)];
PivotCache pc = pch.Create(XlPivotTableSourceType.xlDatabase, sourceData);
PivotTable pvt = pc.CreatePivotTable(_xlPivotTableSheet.Range["A6"], "PivotTable");
. . .
var monthField = pvt.PivotFields("MonthYr");
monthField.Orientation = XlPivotFieldOrientation.xlColumnField;
monthField.NumberFormat = "mmm yyyy";
monthField.DataRange.Interior.Color = ColorTranslator.ToOle(Color.LightBlue);
pvt.CompactLayoutColumnHeader = "Months";
上面所见的9月,10月和11月的行都是“15-”;所有的1月和2月都是“16 - ”
那么为什么日期标签在所有情况下都显示“16”,而不是有时“15”,我怎样才能让它们正常显示?
更糟糕的是,当我运行报告的典型13个月,因此有两个相同的月份(但是来自两个不同的年份) - 它显示它们是同一年,即使数据是< / em>不同:
Curiouser和curiouser - 使用NumberFormat“dd mmm”如下:
//monthField.NumberFormat = "mmm yyyy"; with this, they all show one year, even when the range spans two years
//monthField.NumberFormat = "dd mmm yyyy"; this shows a combination, such as "16 Jan 2016" and "15 Sep 2016"
monthField.NumberFormat = "dd mmm";
......确实给了我不同的年份,但是它们被命令错了(16岁之前有16个):
甚至奇怪的是,当我生成一份为期13个月的报告时,因此有两个相同的月份(但不同年份);在这种情况下,2016年月份是有序的,接着是2015年,与之前一样,除了倍增的月份,其中2015年正确但奇怪(基于其余月份标签的行为)首先出现: / p>
我已尝试过以下各种组合,但它们都以某种方式失败:
向数据透视表使用的源表提供数据 - 格式为“YY-MMM”(如“15-Sep”)或“YYYY-MMM”(如“2015-Sep”):
monthYearCell.Value2 = ReportRunnerConstsAndUtils.GetMMMYYFromYYYYMM(MonthYear);
-OR:
string _prependedCentury = "20" + MonthYear;
monthYearCell.Value2 = ReportRunnerConstsAndUtils.GetMMMYYFromYYYYMM(_prependedCentury); //MonthYear);
然后应用各种NumberFormats:
//monthField.NumberFormat = "MMM yy";
monthField.NumberFormat = "MMM yyyy";
//monthField.NumberFormat = "yyyy MMM";
//monthField.NumberFormat = "yyyy-MMM";
//monthField.NumberFormat = "dd mmm";
必须有一些数据格式和NumberFormat属性的组合才能正确地以正确的顺序显示值,但我还没有找到它。
如果源数据的格式为YYYYMM(例如“201509”和“201510”),并且数据透视表使用的NumberFormat为“MMM yy”,则两列(2015年9月和2015年10月)显示为“9月” 51" 。
答案 0 :(得分:1)
这有效:
将源数据YYYYMM vals转换为MM / 1 / YYYY:
// These come in as "YYYYMM" values (such as "201509"); need them to be 9/1/2016 and suchlike
private string ConvertToMMDDYYYY(string monthYear)
{
string YYYY = monthYear.Substring(0, 4);
string MM = monthYear.Substring(4, 2);
return string.Format("{0}/1/{1}", MM, YYYY);
}
以这种方式在数据透视表中使用它们:
var monthField = pvt.PivotFields("MonthYr");
monthField.Orientation = XlPivotFieldOrientation.xlColumnField;
monthField.NumberFormat = "MMM yy";