为什么Excel改变我的date显示值,我怎么能阻止它做到这一点?

看来,Excel正在将我分配给单元格的值(例如“Sep 15”)更改为“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”

在上面两行直接执行后,我debugging了monthYearCell的值,发现monthYearCell对象的“Text”属性确实是“15-Sep”; 它应该是“9月15日”,因为这是GetMMMYYFromYYYYMM()辅助方法返回的GetMMMYYFromYYYYMM()

Excel很明显(对吧?)将值从“9月15日”改为“15-Sep”等等。 我认为Excel必须在幕后或其他方面“自动修正” 这让我想起我曾经看过的一部电影(“红人”也许?),当主编改变他写的内容时,主angular变成半弹道。 我经常对Word和Excel感觉如此。 我怎么能告诉Excel(假设这是个问题),让它独自一人 – “我写的,我写的”?

我曾尝试将原始"YYYYMM"格式的值更改为之前我想要的值:

 monthField.NumberFormat = "MMM yy"; 

…但是,将“201509”,“201510”等的值更改为“9月51日”

如果你用“向Excel表示”前面加上了值,那么它应该被视为文本,那么它就不会试图将你的值parsing成date。

当您使用date格式设置Excel字段时,它会将任何string转换为dateTime。

使用:

 monthYearCell.NumberFormat = "@"; 

然后使用:

 monthYearCell.Value = GetMMMYYFromYYYYMM(MonthYear); 

我认为它来自Excel存储date的方式。 这是自01-01-1900以来的天数。 在Excel中存储date

提取它们时,它们正在查看您的本地化设置的格式。 您要保留的任何格式需要在检索之后或之后进行。