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 调试器的单元格:
我在这里做错了什么?为什么强制使用美国日期格式?
一些附加信息:
- 我的 OS 语言环境(意大利语)默认使用
dd/MM/yyyy
格式
- 我没有以任何方式更改我的 C# 应用程序的语言环境
- 我的 Excel 副本设置为意大利语,默认情况下也应使用
dd/MM/yyyy
格式。我在选项 -> 语言下检查过,我可以确认这一点。
编辑:我发现了一件有趣的事:如果我 double-click 在一个单元格上然后点击离开它,它 "magically" 修复了格式....为什么?我可以使用 Excel Interop 模拟双击单元格吗?
Excel 中的日期存储为代表 OLE 自动化日期的双精度值。
MSDN
在您的例子中,您正在设置一个字符串值。
在 Excel 中设置日期的正确方法如下:
cell.NumberFormat = "dd/MM/yyyy";
cell.Value = new DateTime(2019, 6, 20).ToOADate();
我正在使用 Microsoft Office C# 库 (Microsoft.Office.Interop.Excel
) 将一些值写入现有 excel 文件。
在 Excel 中,我已经将文件中的一些单元格格式化为日期,如屏幕截图所示:
如您所见,单元格设置为 dd/MM/yyyy
格式。
然而,当我使用互操作库写入值时,如下所示:
cell.Value2 = "20/06/2019"
我注意到它不起作用:当我在 Excel 中打开最终文件时,单元格被解释为纯文本,而不是日期。
所以我做了一些调试,结果我为单元格设置的格式被完全忽略了,interop 库使用的是美国格式,正如您通过检查 NumberFormat
看到的那样属性 带有 visual studio 调试器的单元格:
我在这里做错了什么?为什么强制使用美国日期格式?
一些附加信息:
- 我的 OS 语言环境(意大利语)默认使用
dd/MM/yyyy
格式 - 我没有以任何方式更改我的 C# 应用程序的语言环境
- 我的 Excel 副本设置为意大利语,默认情况下也应使用
dd/MM/yyyy
格式。我在选项 -> 语言下检查过,我可以确认这一点。
编辑:我发现了一件有趣的事:如果我 double-click 在一个单元格上然后点击离开它,它 "magically" 修复了格式....为什么?我可以使用 Excel Interop 模拟双击单元格吗?
Excel 中的日期存储为代表 OLE 自动化日期的双精度值。 MSDN
在您的例子中,您正在设置一个字符串值。 在 Excel 中设置日期的正确方法如下:
cell.NumberFormat = "dd/MM/yyyy";
cell.Value = new DateTime(2019, 6, 20).ToOADate();