我目前正在使用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");
Run Code Online (Sandbox Code Playgroud)
通过使用各种测试表调试我的应用程序,我能够记录单元格以不同方式格式化时返回的各种格式字符串.这些如下:
(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;@
Run Code Online (Sandbox Code Playgroud)
使用这些,我现在可以可靠地确定excel中单元格的格式样式.使用早期的代码,我可以检测日期格式的单元格并以DateTime格式返回正确的数据.但是,我看不到转换时间格式单元格的等效函数.
我得到的结果是0.58368055555555554当我读取格式时间格式为[$-F400]h:mm:ss\\ AM/PM.我完全不知道如何将其转换为a DateTime或者实际上这个float代表的内容.
任何人都可以建议一种方法将时间格式的excel单元格(存储为奇怪的浮点数)转换为正确的DateTime变量?
awu*_*oin 11
正如FrankPI所说,使用DateTime.FromOADate().您可以将此函数与来自Excel单元格的原始数据一起使用 - 无需解析格式.
Excel将日期和时间编码为双精度.积分部分表示1900年1月1日之后的天数.分数部分表示从参考日的午夜起的时间.例如:
1.5 is January 1, 1900 @ Noon
和
41507.25 = August 21, 2013 @ 6:00 am
有关更多信息,请参阅此函数的MSDN文档:
http://msdn.microsoft.com/en-us/library/system.datetime.fromoadate.aspx
| 归档时间: |
|
| 查看次数: |
13163 次 |
| 最近记录: |