C#excel interop:DateTime值不一致写出

我正在尝试使用互操作来创build一个Excel电子表格。 其中一列是date/时间列,我在数据上施加的格式没有反映在电子表格中。

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 (为什么不是月份/date正确的…为什么上午/下午?)。 我试着每次创build新的DateTime对象(只提取电子表格的相关属性),但这是不成功的。

为什么string格式不被尊重?

通过赋值给属性Value您正好提供了值而不是格式。 在某些情况下,Excel可能会同意您提供的实际格式,而在其他情况下则不会。

如果格式是重要的,我build议将Value写入DateTime并使用单元格的NumberFormat属性来定义格式。

如果你提供一个明确的格式,我会坚持使用系统格式,而不是自定义格式。 通常这可以避免用户的烦恼。

我的猜测是Excel使用默认格式(mm / dd / yyyy)将string转换为date值。 由于30/05/2004 21:59:23不是这种格式的有效date,它将其30/05/2004 21:59:23为string。

我build议使用date而不是string的数值,并让Excel格式化它们(或以编程方式更新date格式):

 var tmp = (DateTime)dt.Rows[i][col]; val = tmp.ToOADate();