从EXCEL中读取文本,数值型数据都很简单,EXCEL没有做其他转换,
可是读取日期数据就出现了一个问题:
EXCEL保存日期数据实际上存放的是时间戳,从1900年开始算起。
也就是说 1900-1-1 在EXCEL中表示为 1 。
OK,明白了这个原理之后就可以开始操作了 :
 

在 .net 中读取 Excel 中的日期数据 static readonly DateTime march1st1900 = new DateTime(19000301);
在 .net 中读取 Excel 中的日期数据  
static readonly DateTime december31st1899 = new DateTime(18991231);
在 .net 中读取 Excel 中的日期数据  
static readonly TimeSpan after1stMarchAdjustment = new TimeSpan(1000);
在 .net 中读取 Excel 中的日期数据  
在 .net 中读取 Excel 中的日期数据  
public static DateTime ConvertExcelDateToDate(string excelDate)
  }




思路参考
http://blogs.msdn.com/eric_carter/archive/2004/08/14/214713.aspx
不过这篇文章的计算方式和我有些出路:
1. 不能将从 Excel 文件中 读取到的日期数据直接转换为 DateTime, 会抛出异常
2. 应当从1899-12-31开始算而非1900-01-01
3. 1900-03-01 之前的数据不用再加1,而之后的才要加


不知道是 .net  版本的问题还是 Excel ???

ps: 我用 .net 1.1+Excel 2003


以下贴出全部代码:
先添加引用EXCEL.dll
再新建一个EXCEL文件,在sheet1中 A1,A2,A3 分别输入  1900-1-1 , 1900-2-28, 1900-3-1

以下是 C# 代码:

在 .net 中读取 Excel 中的日期数据
在 .net 中读取 Excel 中的日期数据
class ExcelDateTest

相关文章: