似乎Excel正在将我分配给细胞的值,例如" 9月15日和#34;并将它们改为" 15-Sep"
我的代码应该以我想要的格式(MMM yy
)分配val:
internal static string GetMMMYYFromYYYYMM(String YYYYMMVal)
{
// code from http://stackoverflow.com/questions/40045761/how-can-i-convert-a-string-in-the-format-yyyymm-to-mmmyy
DateTime intermediateDate = DateTime.ParseExact(YYYYMMVal, "yyyyMM", CultureInfo.InvariantCulture);
return intermediateDate.ToString("MMM yy");
}
...这样叫:
var monthYearCell = _xlPivotDataSheet.Cells[_lastRowAddedPivotTableData + 1, 4];
monthYearCell.Value2 = GetMMMYYFromYYYYMM(MonthYear);
...但数据仍然被写入/显示为" YY-MMM",例如" 15-Sep"
我在执行的两行之后调试了monthYearCell
的值,并找到" Text" monthYearCell对象的属性确实是" 15-Sep&#34 ;;它" 应该"是" 9月15日",因为这是从GetMMMYYFromYYYYMM()
辅助方法返回的内容。
Excel显然(对吗?)更改了" 9月15日和#34;等到" 15-Sep"等等。我认为Excel必须是" autocorrecting"幕后的东西;它让我想起了我曾经看过的一部电影(" Reds"也许?),当他的编辑改变了他所写的内容时,主角变成了半弹道。我常常对Word和Excel有这种感觉。我怎么能告诉Excel(假设这是问题)只是不管它 - "我写了什么,我写了"?
我确实尝试将原始"YYYYMM"
格式的值更改为我之前想要的格式:
monthField.NumberFormat = "MMM yy";
...但是这改变了诸如" 201509"和" 201510"至" 9月51日"两个......?!?
答案 0 :(得分:1)
如果您在值前加上'以指示Excel,则应将其视为文本,然后它不会尝试将您的值解析为日期。
答案 1 :(得分:1)
当您使用日期格式设置Excel字段时,它会将任何字符串转换为dateTime。
使用:
monthYearCell.NumberFormat = "@";
然后使用:
monthYearCell.Value = GetMMMYYFromYYYYMM(MonthYear);
答案 2 :(得分:0)
我认为它来自Excel存储日期的方式。它们是自01-01-1900以来的天数。 Stored dates in Excel
提取它们时,它们会查看格式的本地化设置。您想要保留的任何格式都需要在检索它们之后或之后。