.net - 如何解释 Excel 数字格式字符串以确定值是否应由 DateTime.FromOADate 解析

标签 .net excel number-formatting

如何创建一个函数“bool IsDateTime”,该函数将可靠地确定 Excel 数字格式字符串(如“[$-409]h:mm:ss AM/PM;@”)是否指示数值是应传递的 DateTime到 DateTime.FromOADate?

我已经弄清楚 [$-409] 是什么:Excel Number Format: What is "[$-409]"? .这只是一个语言环境代码。

我还阅读了一些关于用分号将数字格式字符串分成四个格式部分的内容:http://office.microsoft.com/en-us/excel-help/create-or-delete-a-custom-number-format-HP005199500.aspx?CTT=5&origin=HP005198679在这里http://www.ozgrid.com/Excel/excel-custom-number-formats.htm

例如,简单地搜索日期/时间格式字符(如 h、m、s、y、d)的出现是否可靠? Excel 会如何解释它?

如果问题不清楚 ...当您读取 Excel 文件并查看日期/时间值时,您实际上是在查看一个普通的旧 double 值,因为这就是它在 Excel 中的存储方式。要确定应该传递给 DateTime.FromOADate 的是普通 double 还是 double ,您必须解释自定义数字格式字符串。所以我在问如何解释这样一个字符串,它可能引用或不引用日期/时间值,以确定 double 值是否应通过 DateTime.FromOADate 转换为 DateTime 值。此外,如果成功转换为 DateTime 值,则需要将 Excel 数字格式字符串转换为等效的 .NET DateTime 格式字符串,以便可以像 Excel 一样通过 DateTime.ToString(converted_format_string) 显示日期/时间值。

最佳答案

您可以使用 CELL 函数并返回格式来检查单元格是否包含任何内置日期格式。如果它使用内置格式,它将返回“D”后跟一个数字。

例如:

=IF(LEFT(CELL("format", A1),1)="D",TRUE,FALSE)

对于更一般的情况,我会首先检查单元格是数字( ISNUMBER() )并且在日期范围内(即,在 0 和 TODAY() 之间 - 今天是 39296)。然后,我会检查数字格式是否出现了至少一个 d、m、y、h、M 或 s,因为这应该表示您在单元格中有一个日期。

希望这可以帮助,

戴夫

关于.net - 如何解释 Excel 数字格式字符串以确定值是否应由 DateTime.FromOADate 解析,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6916201/

相关文章:

java - 无法在 Numberformat 中使用特定区域设置

c# - 检查文件/目录是否存在 : is there a better way?

javascript - 如何更改数据表插件中按钮的默认名称?

Excel:图表和图例中系列的 Z 顺序

vba - 如何验证 Excel 文件是否已成功导入 MS Access?

java - 如何将数字小数 (###,###,###.00) 放入字符串值中

java - 如何格式化数字 0..9 以显示 2 位数字(它不是日期)

c# - 以编程方式将程序集安装到 GAC

.net - XML 序列化中必需的属性

c# - 有什么方法可以提高 Regex.Replace 性能吗?