我目前正在使用Excel C#库(Microsoft.Office.Interop.Excel)将Excel电子表格读入我的C#应用程序。
我最初尝试读取所有单元格的原始数据,但发现日期格式的单元格给出了一个五位数的整数,而时间格式的单元格返回一个小数。因此,我找到了一个内置于Excel的C#库中的日期转换方法,如下所示:
DateTime excelDate = (DateTime)ExcelCalcValue.ExcelDateToDateTime(workbook, Double.Parse(cell.Value.ToString()));
output = excelDate.ToString("yyyy-MM-dd HH:mm");
通过使用各种测试表格对我的应用程序进行调试,我已经能够记录单元格以不同方式格式化时返回的各种格式字符串。以下是它们:
(WorksheetCell.CellFormat.FormatString)
Times
[$-F400]h:mm:ss\\ AM/PM
hh:mm:ss;@
h:mm:ss;@
[$-409]hh:mm:ss\\ AM/PM;@
[$-409]h:mm:ss\\ AM/PM;@
Dates
m/d/yy
[$-F800]dddd\\,\\ mmmm\\ dd\\,\\ yyyy
dd/mm/yyyy;@
dd/mm/yy;@
d/m/yy;@
d\\.m\\.yy;@
yyyy\\-mm\\-dd;@
[$-809]dd\\ mmmm\\ yyyy;@
[$-809]d\\ mmmm\\ yyyy;@
使用这些方法,我现在可以可靠地确定Excel中单元格的格式样式。使用早期的代码,我可以检测到日期格式的单元格并以DateTime格式返回正确的数据。然而,我无法找到一个等效的函数来转换时间格式的单元格。
当我读取一个格式为“[$-F400]h:mm:ss\\ AM/PM”的时间格式单元格时,我得到了一个结果为“0.58368055555555554”的值。我完全不知道如何将其转换为DateTime,或者这个浮点数代表什么意思。
有人能建议一种将Excel中时间格式的单元格(存储为奇怪的浮点数)转换为正确的DateTime变量的方法吗?