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

时间:2016-10-14 16:58:19

标签: c# excel excel-interop date-formatting

似乎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日"两个......?!?

3 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:1)

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

使用:

monthYearCell.NumberFormat = "@";

然后使用:

monthYearCell.Value = GetMMMYYFromYYYYMM(MonthYear);

答案 2 :(得分:0)

我认为它来自Excel存储日期的方式。它们是自01-01-1900以来的天数。 Stored dates in Excel

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