在DataGrid中查看Excel日期单元格内容时出现问题

时间:2011-06-23 11:16:31

标签: wpf excel datagrid

我正在向WPF中的DataGrid控件加载Excel工作表。 在Excel工作表的单元格中,我的值为 1.6.2011 ,这是一个日期。

如果我使用此方法加载此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();
    }  

}

然后将DataSet添加到DataGrid

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

然后问题是Excel表格中的值是1-6-2001,但在WPF DataGrid中,它被视为40695

我做错了什么?我认为它是由Excel中的单元格格式引起的。 Excel中单元格的数据类型为DATE。我认为这是问题的根源。怎么解决?

1 个答案:

答案 0 :(得分:0)

如果在Excel中它实际上是6-1- 2011 (不是2001,错字?)那么40695代表一个OLE日期。因此,您可以通过以下方式进行转换:

DateTime dt = DateTime.FromOADate(40695);

,对应于6/1/2011。

使用IValueConverter中的上述代码获取要在DataGrid中显示的正确值。