Exceldate列未正确读取

我正在从Excel中读取date列

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; } 

但我得到一个错误,例外=

“System.DateTime.FromOADate(double)”的最佳重载方法匹配有一些无效的参数“

当我使用

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

我得到date值30/12/1899

有任何想法吗?

根据Microsoft规范 DateTime.FromOADate()方法需要一个doubletypes参数,如下所示

 public static DateTime FromOADate(double d) 

和您的GetExcelCellValue()方法不会返回一个doubletypes,所以错误。

在你的第二种情况下,你明确地把它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; }