C#excel互操作:DateTime值的写入不一致
本文关键字:不一致 互操作 DateTime C#excel | 更新日期: 2023-09-27 18:24:08
我正在尝试使用interop创建excel电子表格。其中一列是日期/时间列,我强加给数据的格式没有反映在电子表格中。
if (dt.Rows[i][col] is DateTime)
{
var tmp = (DateTime)dt.Rows[i][col];
val = tmp.ToString("dd/MM/yyyy HH:mm:ss", System.Globalization.CultureInfo.InvariantCulture);
}
cell.Value = val; // cell is a range object...set the cell's Value property
电子表格中的一些数据的格式为30/05/2004 21:59:23
(正确),但其他数据的格式则为1/6/2004 4:18:35 AM
(为什么月份/日期不正确…为什么是AM/PM?)。我每次都尝试创建新的DateTime
对象(只提取电子表格的相关属性),但都没有成功。
为什么不尊重字符串格式?
通过分配给属性Value
,您只提供了值,而没有提供格式。在某些情况下,Excel可能会同意您提供的实际格式,而在其他情况下则不然。
如果格式很重要,我建议将Value
写成DateTime
,并使用单元格的NumberFormat
属性来定义格式。
如果你提供了一个明确的格式,我会尽可能坚持系统格式而不是自定义格式。通常这样可以避免用户的烦恼。
我猜Excel正在使用默认格式(mm/dd/yyyy)将字符串转换为日期值。由于30/05/2004 21:59:23
不是该格式的有效日期,因此将其保留为字符串。
我建议使用数字值代替字符串作为日期,并让Excel格式化它们(或以编程方式更新日期格式):
var tmp = (DateTime)dt.Rows[i][col];
val = tmp.ToOADate();