2013-04-10 46 views
1

當我從Excel導入到數據集我的日期格式改變Excel數據集中的日期格式更改?

我的代碼如下:

DataSet ds = new DataSet(); 
string myConnStr = ""; 

if (ds != null) 
{ 
    myConnStr = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + FilePath + "; " + "Extended Properties=\"Excel 12.0;HDR=YES\""; 
} 
else 
{ 
    myConnStr = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + FilePath + ";Extended Properties=\"Excel 8.0;HDR=Yes;IMEX=1\""; 
} 

OleDbConnection myConn = new OleDbConnection(myConnStr); 
try 
{ 
    OleDbCommand cmd = new OleDbCommand("select * from [Sheet1$] ",myConn); 
    OleDbDataAdapter adapter = new OleDbDataAdapter(); 
    adapter.SelectCommand = cmd; 
    myConn.Open(); 
    adapter.Fill(ds); 
} 
catch 
{ } 
finally 
{ 
    myConn.Close(); 
} 

如果我從Excel讀取一行一行然後我可以使用DateTime.FromOADate 哪我不能在這裏做。 請幫助

+0

以什麼方式做的格式更改?你怎麼知道的?你想要什麼?你不能轉換顯示? – Floris 2013-04-10 11:51:35

+0

我在excel中的日期是06-11-2012,但它在數據集中更改爲41219,而我沒有顯示它 – Rohit 2013-04-10 11:52:32

+0

您正在看到時間序列號!這實際上是Excel如何存儲日期/時間。您需要轉換回日期/時間。你知道怎麼做嗎? – Floris 2013-04-10 11:53:10

回答

1

一個解決辦法是將你的整數回日期時間

一個示例代碼會像

public DateTime ExcelSerialDateToDT(int nSerialDate) 
{ 

int l = nSerialDate + 68569 + 2415019; 
int n = ((4 * l)/146097); 
l = l - ((146097 * n + 3)/4); 
int i = ((4000 * (l + 1))/1461001); 
l = l - ((1461 * i)/4) + 31; 
int j = ((80 * l)/2447); 
int nDay = l - ((2447 * j)/80); 
l = (j/11); 
int nMonth = j + 2 - (12 * l); 
int nYear = 100 * (n - 49) + i + l; 

return DateTime.Parse(nMonth + "/" + nDay + "/" + nYear); 

} 

爲我工作....

+0

爲我工作,但我懷疑它是否能夠將所有serialdates轉換爲實際日期..謝謝 – Rohit 2013-04-12 04:23:05