【问题标题】:Excel Date Column not Correctly readExcel 日期列未正确读取
【发布时间】:2014-10-19 11:15:08
【问题描述】:

我正在从 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;
}

但我得到一个错误,异常 =

最好的重载方法匹配 'System.DateTime.FromOADate(double)' 有一些无效参数"

当我使用

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

我得到的日期值是 1899 年 12 月 30 日

有什么想法吗?

【问题讨论】:

    标签: c# excel datetime


    【解决方案1】:

    每个 Microsoft specification DateTime.FromOADate() 方法需要一个 double 类型参数,如下所示

    public static DateTime FromOADate(double d)
    

    并且您的 GetExcelCellValue() 方法没有返回 double 类型,因此出现错误。

    在第二种情况下,您将其显式转换为 double,因此您不会收到任何错误。

    您可以更改您的 GetExcelCellValue 方法以返回一个可为空的双精度值。

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

    【讨论】:

    • 谢谢!但是,我现在收到一个错误:{“无法将类型'System.__ComObject'隐式转换为'double'”},令人困惑的是,当我显式转换时,我没有收到错误,但日期转换错误跨度>
    • 您的cell.Value2 总是double 类型吗?或者它可以是任何类型?
    • 它可以是任何类型。
    • 这是典型的,在这种情况下;我会考虑验证 excel 数据并确保 cell.Value2 数据是固定类型而不是动态类型;这将使它更复杂。
    • 文件不是固定的,但我一直知道,对于这个特定的列,它将是一个日期,并以双精度形式读取为 OLE 自动化日期
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-12-19
    • 1970-01-01
    • 1970-01-01
    • 2018-04-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多