【问题标题】:Get cell format to check date column value in excel using opemxml SDK使用openxml SDK获取单元格格式以检查excel中的日期列值
【发布时间】: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


【解决方案1】:

就像你说的,有很多“日期格式”,人们可以自定义字段(我不知道你是不是这样)。

如果您唯一的问题是“解析日期”,只需使用 DateTime.TryParse

value = string.Empty;
if (cell.StyleIndex != null)
{
    DateTime res;
    if (DateTime.TryParse(cell.CellValue.Text, out res))
    {
        value = res.ToString("yyyy-MM-dd");
    }
}

如果单元格是“日期格式”,TryParse 会成功

【讨论】:

  • cell.CellValue.Text 始终是双精度值,因此 DateTime.TryParse 每次都是 false。即使使用 DateTime.FromOADate 将双精度值转换为日期时间,然后尝试解析它返回 true。现在最大的问题是如何知道单元格中的双精度值是日期时间并且需要将其转换为不是日期时间包含不需要日期时间解析的双精度的单元格???
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-09
  • 2011-11-18
  • 1970-01-01
相关资源
最近更新 更多