1

我正在研究一些功能,它需要知道给定 Excel 电子表格的用户列的数据类型。这些电子表格可以有各种格式,除了第一行是列的名称之外没有标准格式。我遇到的问题是能够区分整数和日期时间列。目前,我正在使用以下函数来确定单元格是否为 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 数据类型?或者您能否建议对我当前的功能进行改进以区分它们?

4

3 回答 3

3

VBA function Isdate() checks also the cell format: 27/01/2012gives True, the result of its integer equivalent 40935 is False.

于 2013-01-02T14:33:40.477 回答
2

Excel 中的每个单元格都包含一个公式、一个文本字符串或一个双精度数值。

日期/时间只是一个数字,因此 2013 年 1 月 2 日的 11:02 是 41276.45972,表示自 1899 年 12 月 31 日以来的天数(包括认为 1900 年是闰年的旧 Lotus 123 错误)。

因此,如果不了解工作表的特定上下文,就无法确定单元格是否包含日期值。

如果您知道日期将在某个范围内(特别是我们通常可以至少定义一个下限),那么可以增强该功能以测试最小值。

此外,如果您可以使用对单元格本身的引用,并且您知道包含表示日期/时间的值的单元格将被适当地格式化,那么您可以测试与NumberFormat日期/时间相关的属性(但这很快就会变得复杂使用自定义格式的地方)。

于 2013-01-02T11:09:24.353 回答
-1

Excel 将日期时间存储为整数。在没有任何其他上下文的情况下,您无法区分整数和日期时间。除非用户已将列指定为日期时间;在这种情况下,您可以读取 .numberformat 并从中推断出列的类型。

于 2013-01-02T09:53:57.417 回答