Reputation: 41
I uploaded an excel spreadsheet using Microsoft.Office.Interop.Excel. When I try to read cells with a date value in order to insert it into my data set, its not being recognized as a date and it comes up as a random number? this is the way that I refer to the cell:
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;)
Upvotes: 1
Views: 8047
Reputation: 422
In my project when I had to read data from excel, I created a method which takes cell text as input and C# DateTime as output.
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;
}
Upvotes: 0
Reputation: 3646
From https://stackoverflow.com/a/4538367/1397117
You need to convert the date format from OLE Automation to the .net format by using DateTime.FromOADate.
double d = double.Parse(b); DateTime conv = DateTime.FromOADate(d);
And I echo suggestions below that answer to use .Value
instead of .Value2
.
Upvotes: 3