2009-11-03 100 views
2

我正在解析Excel文件,並且難以讀取具有自定義單元格格式dd mmm yy的單元格的值。問題單元中的值是09年10月29日(單元格B25)。當我跑C#解析Excel自定義單元格格式

String arrive = Convert.ToString(_worksheets["GENERAL"].get_Range("B25", Type.Missing).Value2); 

我得到「40114」作爲單元格的值。

後來,當我嘗試

DateTime arrive = Convert.ToDateTime(_worksheets["GENERAL"].get_Range("B25", Type.Missing).Value2); 

我得到一個錯誤,指出「當從多家鑄造值必須小於無窮大的數字。」

任何想法的想法將不勝感激。

謝謝。

+0

您或者a)需要知道excel如何表示日期並具有將該表示(40114)轉換爲日期(假設您不能直接執行該操作)的函數或b)將單元格的內容作爲格式化字符串並使用Noldorin的答案。後者可能更容易,前者幾乎肯定會更好(更安全)。 – Murph 2009-11-03 15:45:02

回答

4

該隨機數字是OLE日期。

您可能需要DateTime.FromOADate方法。看看reference on MSDN

+0

螞蟻 - 它做到了人。萬分感謝。 – yoJordan 2009-11-03 15:53:47

+0

不錯 - 很高興聽到它! – Ant 2009-11-03 21:18:44

-1

好像你想要的DateTime.ParseExact方法,因爲這是一個非標準的格式,你正在使用,就.NET而言。

嘗試以下操作:

var dateTimeStr = _worksheets["GENERAL"].get_Range("B25", Type.Missing).Value2); 
var dateTime = DateTime.ParseExact(dateTimeStr, "dd MMM yy"); 

MSDN Custom Date and Time Frormat Strings頁面也可能是一個很好的參考書籤。

+0

不希望變得困難,這不會很好地轉換40114 ...我同意,如果他可以保證以指定的格式拉值,它會工作 – Murph 2009-11-03 15:42:10

+0

感謝您的快速響應。當我嘗試這個建議時,我收到一個錯誤,指出ParseExact需要2個參數。我想這是我聲明這是我第一次用C#編寫任何東西,併爲我的noobness而大量道歉。 – yoJordan 2009-11-03 15:48:59