我正在向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
。我认为这是问题的根源。怎么解决?
答案 0 :(得分:0)
如果在Excel中它实际上是6-1- 2011 (不是2001,错字?)那么40695代表一个OLE日期。因此,您可以通过以下方式进行转换:
DateTime dt = DateTime.FromOADate(40695);
,对应于6/1/2011。
使用IValueConverter中的上述代码获取要在DataGrid中显示的正确值。