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();