2011-06-23 71 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

相关问题