C# 为什么Excel会更改我的日期显示值,我如何防止它这样做?

C# 为什么Excel会更改我的日期显示值,我如何防止它这样做?,c#,excel,excel-interop,date-formatting,C#,Excel,Excel Interop,Date Formatting,Excel似乎正在接受我分配给单元格的值,例如“9月15日”,并将其更改为“9月15日” 我有代码,该代码应以我想要的格式分配val(MMM yy): …这样称呼: var monthYearCell = _xlPivotDataSheet.Cells[_lastRowAddedPivotTableData + 1, 4]; monthYearCell.Value2 = GetMMMYYFromYYYYMM(MonthYear); …但数据仍被写入/显示为“YY-MMM”,如“9月15日” 我

Excel似乎正在接受我分配给单元格的值,例如“9月15日”,并将其更改为“9月15日”

我有代码,该代码应以我想要的格式分配val(
MMM yy
):

…这样称呼:

var monthYearCell = _xlPivotDataSheet.Cells[_lastRowAddedPivotTableData + 1, 4];
monthYearCell.Value2 = GetMMMYYFromYYYYMM(MonthYear);
…但数据仍被写入/显示为“YY-MMM”,如“9月15日”

我在上面的两行执行之后调试了
monthYearCell
的值,发现monthYearCell对象的“Text”属性确实是“15 Sep”;它“应该”是“Sep 15”,因为这是从
getmmmyyfromyyyym()
helper方法返回的内容

Excel显然(对吗?)将值从“9月15日”之类更改为“9月15日”之类。我认为Excel一定是在幕后“自动更正”之类的东西;这让我想起了我曾经看过的一部电影(“可能是红色的吧?”),其中的主角在编辑修改了他所写的内容后变得半死不活。我经常对Word和Excel有这种感觉。我怎样才能告诉Excel(假设这是问题所在)别管它——“我写了什么,我写了什么”

我确实尝试过将原始
“yyyyymm”
格式的值更改为我以前希望的格式:

monthField.NumberFormat = "MMM yy";

…但这将“201509”和“201510”等值都更改为“Sep 51”

我认为它来自Excel存储日期的方式。它们是自1900年1月1日起的天数


提取它们时,它们会查看格式的本地化设置。要保留的任何格式都需要在检索后或检索时使用。

如果在值前面加上“以指示Excel应将其视为文本,则它不会尝试将值解析为日期。

当您使用日期格式设置Excel字段时,它会将任何字符串转换为日期时间

使用:

然后使用:

monthYearCell.Value = GetMMMYYFromYYYYMM(MonthYear);

因此,在按照我的意愿将值分配给对象的文本值之后,我需要做些什么来防止Excel霸道地接管和“改进”我的工作?为什么你有60枚金牌、209枚银牌和424枚铜牌,而你的总声誉只有38枚?这怎么可能?无论如何,Excel中必须应用数据格式。你能简单地把它改成一般的,或者强迫它成为你想要的吗?右键单击列,单击格式>自定义>类型='mmm yy'。应该可以。在指定值之前,将单元格格式设置为文本,或者在值前面加上“以指示Excel应将其视为文本”。我尝试了:monthYearCell.format=“Text”;在将值分配给Value2属性之前,尽管它已编译并运行,但我得到了运行时错误:“System.\uuu ComObject”不包含“Format”的定义第二个想法奏效了,尽管:monthYearCell.Value2=“””+reportRunnerConstandUtils.getmmmyyFromyyyyymm(MonthYear);回答这个问题,我会这样做。你可以在这里为50分的悬赏添加一个类似的答案:
monthYearCell.NumberFormat = "@";
monthYearCell.Value = GetMMMYYFromYYYYMM(MonthYear);