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,有时它是不同的,所以我的代码不工作。我如何区分特定的日期和日期时间格式?
答案 0 :(得分:0)
就像你说的那样,有很多" dateformat",人们可以自定义这个领域(我不知道你的情况如何)。
如果您唯一的问题是"解析日期",只需使用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将成功