C#读取Excel日期时间

C#这样读取Excel日期时有问题:

Excel.ApplicationClass excel=new Excel.ApplicationClass();
excel.Application.Workbooks.Open(@"E:\MFGP\ar20061220.xls",new object[]{3} ,new object[]{false},new object[]{5},new object[]{""},new object[]{""},new object[]{false},Excel.XlPlatform.xlWindows,null,new object[]{false},new object[]{true},Excel.XlFileFormat.xlExcel9795,new object[]{true},new object[]{true},new object[]{true});
range=(Excel.Range)excel.Cells[1,2];
Messagebox.Show(range.Value2.ToString());
为什么读出来是一个数值,如2008-08-08读出来是39688,怎样才能读出来是日期格式。

-------------------------------

在EXCEL中把你的日期列的格式设置一下,
设成"文本"型,就不会这样了

-------------------------------

在读excel日期的时候,如果单元格格式设置为date,那么就要注意:这里要做一个判断,如果该单元格是一个double值,那么就要用 DateTime.FromOADate(double.Parse(range.Value2.ToString()));方法获得时间;如果就是一个时间,那么就直接DateTime.Parse(range.Value2.ToString());就可以了。
至于为什么要做这个判断,是因为我做这个的时候发现这个日期值今天读的时候是一个日期值,而第二天就读出来一个double值。我也不知道为什么。
请参考:
http://msdn.microsoft.com/zh-cn/vcsharp/system.datetime.fromoadate.aspx





C#读取Excel单元格中的日期
2012-04-27 8:55

今天写一小程序用来分析某Excel报表,结果在处理日期的时候蛋疼了。

原Excel是这样的:

Excel加载到DataTable以后,日期都变成了这个样子:

看起来很像某偏移量。当然也有一部分日期是正常的:

我尝试用DateTime.Parse直接匹配,结果爆掉了。于是查了下MSDN找到了正确的办法:DateTime.FromOADate(double d) 方法:

d 参数是一个双精度浮点数字,它将日期表示为基础日期(1899 年 12 月 30 日午夜)之前或之后的天数。 d 的符号和整数部分将日期编码为相对于 1899 年 12 月 30 日的正负日偏移量,而 d 的小数部分的绝对值将当天的时间编码为相对于午夜的小数日偏移量。d 必须为负 657435.0 到正 2958466.0 之间的值。

根据我的Excel,我封装了一下转换函数,如下:

01 privateDateTime ConvertExcelDateTimeIntoCLRDateTime(objectvalue)
02 {
03     if(value isDateTime)
04     {
05         returnDateTime.Parse(value.ToString());
06     }
07     else
08     {
09         stringdt = DateTime.FromOADate(Convert.ToInt32(value)).ToString("d");
10         returnDateTime.Parse(dt);
11     }
12 }

这个函数首先判断日期是否能直接转换,因为我需要处理上图中F12列这样的日期。如果不能识别,就调用FromOADate(),将偏移量转换为日期。

于是就OK了,有图有真相:


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章