2010-08-31 106 views

回答

1

內部Excel以該十進制格式存儲數據並將邏輯應用於該值以顯示日期。不幸的是,從該格式到日期格式的轉換並不總是直截了當的。

我建議打開Excel文件,使用OleDb將其讀入數據集。這樣做會以電子表格中看到的格式保留數據。

有許多關於如何使用OleDb讀取Excel的精彩文章。

你可以用這一個開始: http://codehill.com/2009/01/reading-excel-2003-and-2007-files-using-oledb/

乾杯!

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(); 

有關使用的DataReader信息,請參閱KB article

1

當Excel識別值作爲一個時間值,它存儲時間部分在數字的小數部分,並將日期的日期部分存儲爲數字的整數部分。 Excel將所有數值存儲爲雙精度浮點值,這就是爲什麼您得到非精確結果的原因。但是,爲什麼你得到0.0451388888888889而不是像0.080150462962963這樣的東西是一個謎。您可以嘗試在一個空白單元格中指定一個神祕日期值(例如=A3),在Excel中查找基礎值。然後將該單元格格式化爲帶有小數位的數值,並查看它提供的數字。如果基礎值也是0.04513 ...那麼問題出在源數據而不是ExcelDataReader庫。