2014-10-19 85 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