我使用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;)
答案 0 :(得分:3)
来自https://stackoverflow.com/a/4538367/1397117
您需要将日期格式从OLE自动化转换为.net 使用DateTime.FromOADate格式化。
double d = double.Parse(b); DateTime conv = DateTime.FromOADate(d);
我在下面回答使用.Value
代替.Value2
的答案。
答案 1 :(得分:0)
row[3] = Convert.ToDateTime(((Microsoft.Office.Interop.Excel.Range)objsheet.Cells[rowIndex, 4]).Value2.ToString());
可以为你做,请看lin k。
答案 2 :(得分: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;
}