【发布时间】:2015-08-14 13:37:21
【问题描述】:
value = string.Empty;
if (cell.StyleIndex != null)
{
CellFormat cf = document.WorkbookPart.WorkbookStylesPart.Stylesheet.CellFormats.ChildElements[int.Parse(cell.StyleIndex.InnerText)] as CellFormat;
if (cf.NumberFormatId == 14)
{
//value = DateTime.Parse("1900-01-01").AddDays(int.Parse(cell.CellValue.Text) - 2).ToString("yyyy-MM-dd");
value = Convert.ToString(DateTime.FromOADate(Double.Parse(cell.CellValue.Text)).ToShortDateString());
}
if (cf.NumberFormatId == 176 || cf.NumberFormatId == 177)
{
//value = DateTime.Parse("1900-01-01").AddDays(int.Parse(cell.CellValue.Text) - 2).ToString("yyyy-MM-dd");
value = Convert.ToString(DateTime.FromOADate(Double.Parse(cell.CellValue.Text)));
}
}
我正在使用上面的代码检查excel中是否有任何日期列,然后将单元格的值转换为等效日期。默认情况下NumberFormatID是14,但是excel中有更多的日期格式。对于特定的日期格式有时 NumberFormatID 是 165,有时它显示 176。
这些不是固定的。所以当我选择日期时间格式时,有时它是 176,有时它是不同的,所以我的代码不起作用。我如何区分特定的日期和日期时间格式?
【问题讨论】:
-
您需要检查单元格格式还是只是尝试解析日期/日期时间值?
-
不确定是否可以使用 IsDate() VBA 函数,但this link 可能会有所帮助
-
@mjw 我正在尝试解析日期/日期时间值,但需要先检查它是否是日期/日期时间格式的单元格,因为可能有其他单元格可能没有日期值。根据这篇文章stackoverflow.com/questions/4730152/… mm/dd/yyyy 格式的数字格式 ID 为 14,所有其他日期/日期时间格式都在 14-22 范围内,但在我的情况下,默认值为 14,其他数字格式 ID >164,它们不固定.
标签: c# excel openxml openxml-sdk vba