我有一個Excel工作簿,我嘗試使用DocumentFormat.OpenXml.Spreadsheet;
使用DocumentFormat.OpenXml.Packaging;
讀XLSX文件在C#
閱讀,但我如何知道什麼時候該值是一個日期不確定。共享字符串和數字都很好,但與單元格關聯的類型(Cell.DataType
)始終是共享字符串。
我已經看過替代產品,但他們似乎都涵蓋字符串和數字,但不包括日期。
任何想法。?
我有一個Excel工作簿,我嘗試使用DocumentFormat.OpenXml.Spreadsheet;
使用DocumentFormat.OpenXml.Packaging;
讀XLSX文件在C#
閱讀,但我如何知道什麼時候該值是一個日期不確定。共享字符串和數字都很好,但與單元格關聯的類型(Cell.DataType
)始終是共享字符串。
我已經看過替代產品,但他們似乎都涵蓋字符串和數字,但不包括日期。
任何想法。?
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));
我相信我有各種答案。在Styles文件中,有一個dxfs節點,其中包含一個或多個提供格式的dxf節點。我還沒有弄清楚如何從工作表中的單元格到dxf節點。但是,一旦確定了這種關係,那麼應該可以使用單元格的格式。
話雖如此,看起來至多,你不太可能知道一個單元格是否是一個日期,但在代碼中的一些測試,你可能會給它一個合理的最佳猜測。
我選擇在映射文檔中捕獲模式信息,所以我確實知道。
感謝您的迴應,這是朝着正確方向邁出的一步。問題是我不知道細胞值是否是日期。我希望這是在xlsx的xml文件中指定的。 – mattpm 2013-05-01 10:12:05