2014-10-19 87 views
2

我從Excel中讀取一個日期列作爲這樣的Excel的日期欄不正確讀取

var y = DateTime.FromOADate(GetExcelCellValue(range, rowIndex, DateColumnNumber)); 

private dynamic GetExcelCellValue(Microsoft.Office.Interop.Excel.Range range, short? row, int col) 
{ 
    var cell = (range.Cells[row, col] as Microsoft.Office.Interop.Excel.Range); 
    return cell == null ? null : cell.Value2; 
} 

,但我得到一個錯誤異常=

The best overloaded method match for 'System.DateTime.FromOADate(double)' has some invalid arguments"

,當我用

var x = DateTime.FromOADate(Convert.ToDouble(GetExcelCellValue(range, rowIndex, DateColumnNumber))); 

我得到的日期值爲30/12/1899

有什麼想法?

回答

0

Microsoft specificationDateTime.FromOADate()方法需要double類型參數可以看出以下

public static DateTime FromOADate(double d) 

和你GetExcelCellValue()方法不返回double型等錯誤。

在第二種情況下,您明確將其轉換爲double,並且因此沒有任何錯誤。

你可以改變你的GetExcelCellValue方法來返回一個可爲空的double。

using Microsoft.Office.Interop.Excel; 

private double? GetExcelCellValue(Range range, short? row, int col) 
{ 
    var cell = (range.Cells[row, col] as Range); 
    //using null coalescing operator. 
    return cell ?? cell.Value2; 
} 
+0

謝謝! 但是,我現在得到一個錯誤: {「不能隱式地將類型'System .__ ComObject'轉換爲'double'」} 有什麼令人困惑的是,當我明確地施放時,我不會收到錯誤,被錯誤地轉換 – 2014-10-19 12:17:11

+0

你的'cell.Value2'總是'double'類型的嗎?或者它可以是任何類型? – Rahul 2014-10-19 12:18:56

+0

它可以是任何類型。 – 2014-10-19 12:38:59