2011-06-23 66 views
0

我正在將一個Excel工作表加載到在WPF中的DataGrid控件中。 在Excel工作表的單元格中,我有一個值1.6.2011這是一個日期。在DataGrid中查看Excel日期單元格內容的問題

如果我加載這個Excel用這種方法文件:

private static DataSet LoadExcelFile(string file,string sheetName) 
{ 
    string connString= "Provider=Microsoft.Jet.OLEDB.4.0;" + 
         "Data Source=" + file + ";" + 
         "Extended Properties=Excel 8.0;"; 
    var oledbConn = new OleDbConnection(connString); 
    try 
    { 
     // Open connection 
     oledbConn.Open(); 

     // Create OleDbCommand object and select data from worksheet Sheet1 
     var cmd = new OleDbCommand("SELECT * FROM ["+sheetName+"$]", oledbConn); 

     // Create new OleDbDataAdapter 
     var oleda = new OleDbDataAdapter(); 

     oleda.SelectCommand = cmd; 

     // Create a DataSet which will hold the data extracted from the worksheet. 
     var ds = new DataSet(); 

     // Fill the DataSet from the data extracted from the worksheet. 
     oleda.Fill(ds, "Employees"); 

     return ds; 
    } 
    catch 
    { 
     throw new Exception(); 
    } 
    finally 
    { 
     // Close connection 
     oledbConn.Close(); 
    } 

} 

然後添加DataSetDataGrid

Dps.ItemsSource = ExcelFile.Tables[0].DefaultView; 

則問題是在Excel工作表該值是1- 6-2001但在WPF DataGrid它被視爲40695

我做錯了什麼?我認爲它是由Excel中的單元格格式引起的。 Excel中單元格的數據類型爲DATE。我認爲這是問題的根源。如何解決它?

+0

刪除該try/catch塊。我無法想象捕捉異常並拋出一個新的空無類型'Exception'的好理由。你失去了原始異常原因的所有知識,並且你的程序仍然崩潰。 –

+0

不應該是6-1-2011?如果是這種情況,請參閱下面的答案。 –

回答

0

如果在Excel中它實際上是6-1- (不是2001,錯字?),那麼40695代表OLE日期。因此,您可以將其轉換爲:

DateTime dt = DateTime.FromOADate(40695); 

其中對應於6/1/2011。

在IValueConverter中使用上面的代碼來獲取正確的值以顯示在您的DataGrid中。

+0

謝謝,它幫助:) – totoz

相關問題