1

我使用 Microsoft.Office.Interop.Excel 上传了一个 Excel 电子表格。当我尝试读取具有日期值的单元格以便将其插入我的数据集中时,它不会被识别为日期并且它会作为随机数出现?这是我指代细胞的方式:

Excel.Range startDate = objsheet.get_Range("C1:C" + lastUsedRow, System.Type.Missing);
double dbl = Convert.ToDouble(startDate);
DateTime conv = DateTime.FromOADate(dbl);
(row[3] = ((Microsoft.Office.Interop.Excel.Range)objsheet.Cells[rowIndex, 4]).Value2;)
4

3 回答 3

3

来自https://stackoverflow.com/a/4538367/1397117

您需要使用 DateTime.FromOADate 将日期格式从 OLE 自动化转换为 .net 格式。

double d = double.Parse(b);  
DateTime conv = DateTime.FromOADate(d);

我在该答案下方回应建议,以使用.Value而不是.Value2.

于 2013-07-29T14:58:27.903 回答
0

在我的项目中,当我不得不从 excel 中读取数据时,我创建了一个将单元格文本作为输入并以 C# DateTime 作为输出的方法。

public DateTime ReadDateFromExcel(string dateFromXL)
{
    Regex dateRegex = new Regex("^([1-9]|0[1-9]|1[0-2])[- / .]([1-9]|0[1-9]|1[0-9]|2[0-9]|3[0-1])[- / .](1[9][0-9][0-9]|2[0][0-9][0-9])$");
    DateTime dtParam = new DateTime();            
    if (!DateTime.TryParse(dateFromXL, out dtParam))
    {
        double oaDate = 0;
        if (Double.TryParse(dateFromXL, out oaDate))
        {
            dateFromXL = DateTime.FromOADate(oaDate).ToString("MM/dd/yyyy");
            if (!dateRegex.IsMatch(dateFromXL))
            {
                Console.Writeline("Date not in correct format");
            }
            else
            {
                dtParam = readDateFromExcel(dateFromXL);
            }
        }
        else
        {
            Console.Writeline("Date not in correct format");
        }
    }
    else
    {
        Console.Writeline("Date is in correct format");
    }
    return dtParam;
}
于 2014-08-26T08:54:22.047 回答
0
row[3] = Convert.ToDateTime(((Microsoft.Office.Interop.Excel.Range)objsheet.Cells[rowIndex, 4]).Value2.ToString());

可以为你做,看这个链接

于 2013-07-29T14:59:17.397 回答