我正在尝试使用DocumentFormat.OpenXml.Spreadsheet;
阅读的Excel工作簿
使用DocumentFormat.OpenXml.Packaging;
但我不确定如何知道该值何时为日期。共享字符串和数字很好,但与单元格关联的类型(Cell.DataType
)始终是共享字符串。
我已经看过其他产品,但它们似乎都涵盖了字符串和数字,但不包括日期。
任何想法。?
答案 0 :(得分:2)
Open XML将日期存储为从1900年1月1日开始的天数。您需要做的是从单元格中获取字符串,然后将该字符串解析为DateTime对象。
下面的片段说明了这一点。请注意使用DateTime.FromOADate
重载
public static string GetCellValue(WorkbookPart wbPart, Cell cell)
{
string value = string.Empty;
if (cell != null && cell.CellValue != null)
{
value = cell.InnerText;
if (cell.DataType != null)
{
switch (cell.DataType.Value)
{
case CellValues.SharedString:
var stringTable = wbPart.GetPartsOfType<SharedStringTablePart>().FirstOrDefault();
if (stringTable != null)
{
value = stringTable.SharedStringTable.ElementAt(int.Parse(value)).InnerText;
}
break;
case CellValues.Boolean:
if (value == "0")
value = "FALSE";
else
value = "TRUE";
break;
}
}
}
return value;
}
string value = GetCellValue(wbPart,cell);
var date = DateTime.FromOADate(double.Parse(value));
答案 1 :(得分:0)
我相信我有各种答案。在Styles文件中,有一个dxfs节点,其中包含一个或多个dxf节点,用于格式化。我还没有弄清楚如何从工作表中的单元格到达dxf节点。但是一旦确定了这种关系,那么单元格的格式就可以了。
话虽如此,似乎充其量只是你不太可能确定一个单元格是否是一个日期,但是在代码中进行了一些测试,你可能会给它一个合理的最佳猜测。
我选择在地图文档中捕获架构信息,所以我肯定知道。