2014-09-23 51 views
0

我試圖使用interop來創建一個excel電子表格。其中一列是日期/時間列,我對數據施加的格式沒有反映在電子表格中。C#excel interop:DateTime值不一致地寫出

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對象(只提取電子表格的相關屬性),但這是不成功的。

爲什麼字符串格式不被尊重?

回答

1

隨着分配給Value您提供準確公正的價值屬性,但不是格式。在某些情況下,Excel可能會同意您提供的實際格式,而在其他情況下則不會。

如果格式化很重要,我建議您編寫Value,就像DateTime,並使用單元格的NumberFormat屬性來定義格式。

如果你提供一個明確的格式,我會堅持使用系統格式,而不是自定義格式。通常這可以避免用戶的煩惱。

1

我的猜測是Excel正在使用它的默認格式(mm/dd/yyyy)將字符串轉換爲日期值。由於30/05/2004 21:59:23不是該格式的有效日期,因此將其保留爲字符串。

我會建議使用數值的日期,而不是字符串,並讓Excel格式它們(或更新程序的日期格式):

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