private static string GetCellValue(SpreadsheetDocument document, Cell cell)
{
SharedStringTablePart stringTablePart = document.WorkbookPart.SharedStringTablePart;
string value = cell.CellValue.InnerXml;
if (cell.DataType != null && cell.DataType.Value == CellValues.SharedString)
{ //compara si es un string
return stringTablePart.SharedStringTable.ChildElements[Int32.Parse(value)].InnerText;
}
else
{ //si es un numero o fecha
DateTime date = DateTime.FromOADate(value);
string val = date.ToString("dd/MM/yyyy");
return val;
}
}
我想在评估时 if (cell.DataType != null && cell.DataType.Value == CellValues.SharedString)输入您的 Date 数据类型并对其进行解析。如果您缓存 Date 类型并将其返回到下一个 if(解析 int 的那个),您应该在此之前执行另一个 if 条件,您放置一个 else if
在用西班牙语咨询 Stack Overflow 聊天并继续我的搜索后,我在英语的 Stack Overflow 上找到了这个答案,它表明数值是 OLE 自动化格式的值。
因此,要将 OLE 自动化格式的数值转换为 DateTime,使用以下方法
FromOADate
:例子:
要将 DateTime 类型的变量转换为 OLE 自动化,请使用以下方法
ToOADate
:例子:
您需要使用将获得的数字转换为日期
DateTime.FromOADate(value);
在方法中尝试以下代码
GetCellValue
:您需要在内部确定它是否是一个简单的数字,或者在这种情况下它是否是一个日期。
我想在评估时
if (cell.DataType != null && cell.DataType.Value == CellValues.SharedString)
输入您的 Date 数据类型并对其进行解析。如果您缓存 Date 类型并将其返回到下一个 if(解析 int 的那个),您应该在此之前执行另一个 if 条件,您放置一个 else if