OleDbAdapters不会从单个Excel列中以不同格式读取date
我正在阅读我的应用程序中的excel文件。 我使用OleDbDataAdapter来读取和DataTable来存储.xlsx文件的logging。 我有阅读单列不同date格式的问题。 我的专栏是这样的:
2014-02-07 2014-02-05 27.01.2014 19.11.2013 2014-02-07 2014-02-07
我的程序只加载“yyyy-MM-dd”格式的date,其余的都是DBNull.Value。 有没有什么办法读整列作为string(所以我可以操纵他们manualy)或强制OleDbDataAdapter读取所有date?
那是我的代码:
var fileName = string.Format(@"C:\28.xlsx"); var connectionstring = string.Format(@"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + fileName + ";Extended Properties='Excel 12.0 xml;HDR=NO;IMEX=1'"); var adapter = new OleDbDataAdapter("SELECT * FROM [Sheet1$B12:L]", connectionstring); var ds = new DataSet(); adapter.Fill(ds, "anyNameHere"); System.Data.DataTable data = ds.Tables["anyNameHere"]; foreach (DataRow row in data.Rows) { try { Console.WriteLine(row.Field<DateTime>(3).ToShortDateString()); } catch { Console.WriteLine(row.Field<string>(3)); } }
OleDb根据第一行的内容(如果头部可用,头部之后的内容)计算列数据types并将其应用于其余行。
所以我会build议将列的数据格式更改为文本而不是date/时间,然后在C#端处理它们。