【发布时间】:2013-08-21 13:05:55
【问题描述】:
我目前正在使用 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 格式返回正确的数据。但是,我看不到转换时间格式单元格的等效函数。
当我读取时间格式为[$-F400]h:mm:ss\\ AM/PM 的单元格时,我得到0.58368055555555554 的结果。我完全不知道如何将它转换成DateTime,或者这个浮点数代表什么。
谁能建议一种将时间格式的 Excel 单元格(存储为奇怪的浮点数)转换为正确的 DateTime 变量的方法?
【问题讨论】:
-
@pnuts 我不能这样做,因为电子表格将由用户提供,当用户导入他们的电子表格时,我需要为许多不同的场景做准备。感谢您的链接!