2013-01-02 78 views
1

我正在開發一些功能,它需要知道給定Excel電子表格的用戶列的數據類型。這些電子表格可以有多種格式,除了第一行是列名以外,沒有標準格式。我遇到的問題是能夠區分整數和DateTime列。目前,我使用下面的函數來確定一個單元是一個DateTime細胞或不:Excel確定單元格的數據類型是DateTime還是Int

private bool isOADate(double Val) 
{ 
    try 
    { 
     DateTime dt = DateTime.FromOADate(Val); 
     return true; 
    } 
    catch (ArgumentException) 
    { 
     return false;  
    } 
} 

但是,如果一個小區有1個,2個,3等在裏面,這個函數返回true,因爲它是能夠將它們分別轉換爲1899/12/31 12:00:00 AM,1900/01/01 12:00:00 AM,1900/01/02 12:00:00 AM。有沒有更好的方法來確定單元格的DateTime數據類型?或者你能否建議對我目前的功能進行改進以區分它們?

+0

你可以測試單元格的格式!在一個單元格中,畢竟這是一個從日期/時間差異的數字。 –

回答

2

Excel中的每個單元格都包含公式,文本字符串或雙數值。

日期/時間只是一個數字,因此2013年1月2日11:02是41276.45972,代表自1899年12月31日以來的天數(包含舊的Lotus 123錯誤相信1900是一次飛躍年)。

因此,無法確定單元格是否包含日期值而不知道工作表的特定上下文。

如果您知道日期會落在一定範圍內(特別是我們通常可以定義至少一個下限),那麼可以增強函數以測試最小值。此外,如果您可以使用對單元格本身的引用,並且您知道包含表示日期/時間的值的單元格將被適當地格式化,那麼您可以測試NumberFormat屬性以獲取與日期/時間相關的內容(但在使用自定義格式的情況下,這可能會很快變得複雜)。

+0

謝謝你的回答。不幸的是,我們不能對日期設置任何限制。我認爲答案可能在於'NumberFormat',然而正如你所說的自定義格式可能會證明有問題。你可以想象一個問題,只需在'NumberFormat'中搜索''''''''''''''''''''''和''作爲確定單元格是否爲DateTime的手段? –

+0

@Shane - 按照描述搜索NumberFormat屬性應該可行,我想。當然,如果你可以像@Jüri描述的那樣(我不知道這個函數如何與一個單元格引用一起工作)來到VBA的'ISDate()'函數,那麼這也值得探索。 –

+0

我已經設法通過數字格式獲得差異化。再次感謝! –

-1

Excel將日期時間存儲爲整數。如果沒有其他上下文,則無法區分整數和日期時間。除非用戶將列指定爲日期時間;在這種情況下,您可以讀取.numberformat並從中推導出列的類型。

3

VBA功能Isdate()檢查也單元格的格式:27/01/2012給出True,其整數等效的結果40935False

+0

謝謝你。 'IsDate()似乎做我需要的東西,但是我需要使用C#,我似乎無法想到一個簡單的方法來獲得這個功能。 –

+0

http://social.msdn.microsoft.com/Forums/en/netfxbcl/thread/dc9ba956-6370-424a-95f5-1b4539c64a66:try 9-vote answer –

相關問題