我目前正在使用 Excel C# 库 (Microsoft.Office.Interop.Excel) 将 Excel 电子表格读入我的 C# 应用程序。
我最初尝试将所有单元格作为原始数据读取,但发现日期格式的单元格给了我一个 5 位整数,而时间格式的单元格返回了一个小数。所以我后来发现你可以使用 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 格式返回正确的数据。但是,我看不到用于转换时间格式单元格的等效函数。
当我0.58368055555555554
读取时间格式为[$-F400]h:mm:ss\\ AM/PM
. 我完全不知道如何将其转换为 a DateTime
,或者实际上这个 float 代表什么。
谁能建议一种将时间格式的 Excel 单元格(存储为奇怪的浮点数)转换为正确DateTime
变量的方法?