在asp.NET C#中导入Excel文件时丢失的日期格式

时间:2010-08-31 02:07:32

标签: c# asp.net excel

日期格式是excel文件中的1:55:25,在使用ExcelReaderFactory.CreateBinaryReader阅读后,我得到了0.0451388888888889.

3 个答案:

答案 0 :(得分:1)

内部Excel以十进制格式存储数据,并将逻辑应用于值以显示日期。不幸的是,从该格式到日期格式的转换并不总是直截了当。

我建议使用OleDb打开Excel文件将其读入数据集。这样做会以您在电子表格中看到的格式保存数据。

有很多关于如何使用OleDb阅读Excel的精彩文章。

你可以从这个开始: http://codehill.com/2009/01/reading-excel-2003-and-2007-files-using-oledb/

干杯!

答案 1 :(得分:1)

使用OleDb读取数据,如下所示:

string dsn = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" 
              + xlsPath + ";Extended Properties=\"Excel 8.0;HDR=Yes;IMEX=1\";"

OleDbConnection newConn = new OleDbConnection(dsn);

string tableName= "MyGlobalNamedRange";    
string sqlText = String.Format("SELECT * FROM [{0}]", tableName);
IDbCommand cmd = connection.CreateCommand();
cmd.CommandText = sqlText;

IDataReader res = cmd.ExecuteReader();

有关使用DataReaders的信息,请参阅KB article

答案 2 :(得分:1)

当Excel将值识别为时间值时,它将时间部分存储在数字的小数部分中,并将日期的日期部分存储为数字的整数部分。 Excel将所有数值存储为双精度浮点值,这就是获得非精确结果的原因。但是,为什么你得到0.0451388888888889而不是像0.080150462962963这样的东西是一个谜。您可以尝试通过在一个指向您的神秘日期值之一的空白单元格中放置一个简单的公式来查找Excel中的基础值(例如=A3)。然后将该单元格格式化为带小数位的数值,并查看它提供的数字。如果基础值也是0.04513 ...那么问题出在源数据而不是ExcelDataReader库中。