Excel 中设置的日期格式在使用 Excel Interop 时被忽略

Date format set in Excel is ignored when using Excel Interop

我正在使用 Microsoft Office C# 库 (Microsoft.Office.Interop.Excel) 将一些值写入现有 excel 文件。

在 Excel 中,我已经将文件中的一些单元格格式化为日期,如屏幕截图所示:

如您所见,单元格设置为 dd/MM/yyyy 格式。

然而,当我使用互操作库写入值时,如下所示:

cell.Value2 = "20/06/2019"

我注意到它不起作用:当我在 Excel 中打开最终文件时,单元格被解释为纯文本,而不是日期。

所以我做了一些调试,结果我为单元格设置的格式被完全忽略了,interop 库使用的是美国格式,正如您通过检查 NumberFormat 看到的那样属性 带有 visual studio 调试器的单元格:

我在这里做错了什么?为什么强制使用美国日期格式?
一些附加信息:

编辑:我发现了一件有趣的事:如果我 double-click 在一个单元格上然后点击离开它,它 "magically" 修复了格式....为什么?我可以使用 Excel Interop 模拟双击单元格吗?

Excel 中的日期存储为代表 OLE 自动化日期的双精度值。 MSDN

在您的例子中,您正在设置一个字符串值。 在 Excel 中设置日期的正确方法如下:

cell.NumberFormat = "dd/MM/yyyy";
cell.Value = new DateTime(2019, 6, 20).ToOADate();