Excel确定单元格的数据types是DateTime还是Int

我正在研究一些function,这些function需要知道给定Excel电子表格的用户的列的数据types。 这些电子表格可以有各种格式,除了第一行是列名以外,没有标准格式。 我遇到的问题是能够区分整数和DateTime列。 目前,我正在使用以下函数来确定单元格是否是DateTime单元格:

private bool isOADate(double Val) { try { DateTime dt = DateTime.FromOADate(Val); return true; } catch (ArgumentException) { return false; } } 

但是如果一个单元格有1,2,3等等,这个函数返回true,因为它能够将它们转换成1899/12/31 12:00:00 AM,1900/01/01 12:00:00 AM, 1900/01/02 12:00:00 AM。 有没有更好的方法来确定单元格的DateTime数据types? 或者你可以提出一个改进我目前的function,以区分它们?

Excel中的每个单元格都包含公式,文本string或双数值。

date/时间只是一个数字,因此2013年1月2日11:02是41276.45972,这是自1899年12月31日以来的天数(包含旧的Lotus相信1900年是闰年的错误)。

所以没有办法可以确定一个单元格包含date值而不知道工作表的特定上下文。

如果你知道date会落在一定范围内(特别是我们通常可以定义至less一个下限),那么函数可以被增强来testing一个最小值。

此外,如果您可以使用对单元格本身的引用,并且知道包含表示date/时间的值的单元格将被正确格式化,那么您可以testingNumberFormat属性以获取与date/时间相关的内容(但是这可以很快得到复杂的地方使用自定义格式)。

VBA函数Isdate()也检查单元格格式: 27/01/2012给出True ,其整数等于40935的结果是False

Excel将date时间存储为整数。 在没有任何其他上下文的情况下,您不能区分整数和date时间。 除非用户指定了一个列作为date时间; 在这种情况下,您可以读取.numberformat并从中推导出列的types。