导入Excel电子数据表来,我用简单的代码:
string connectionString = string.Format("Provider=Microsoft.ACE.OLEDB.12.0; data source={0}; Extended Properties=Excel 12.0;", physicalFolder + FileUpload1.FileName);
OleDbDataAdapter adapter = new OleDbDataAdapter("SELECT * FROM [Sheet1$]", connectionString);
DataSet ds = new DataSet();
当在Excel中的行之一,如果我的行看起来像下面
字符串中省略,我的数据集看起来像这样
但是,如果我加入一些字符串,如果我上传的是这样的:
然后,我的数据集看起来不省略的字符串:
这是因为提供者上的列的从柱(标题行之后的行)的第一行的类型决定。 当第一行包含一个数字,柱的类型是double
或另一数量类型,所以它不能包含的字符串值。
我尝试一切可能的方式(设置表结构提前,使用DataReader
,改变单元格的格式,...),他们都失败了。 这似乎是这个问题Microsoft.Jet.OLEDB
提供商。 我强烈电子书籍你使用第三方擅长读库。 有很多开源库可供选择。
如果你的文件是一个Excel 2007中(.xlsx)格式的文件,我强烈建议使用EPPluse 。 它也可以作为NuGet包 。
否则,你可以看看这个答案要多找几个库。
MD.Unicorn的答案是不是100%正确。 你OLEDB提供商使用名为设置TypeGuessRows
,以确定有多少行被读出,以决定一列的数据类型。 不幸的是这种设置不能在连接字符串中指定,并且必须在系统注册表中更改。 见这为更多的细节问题。
试着改变你的OleDbConnection字符串格式如下:
代码段OleDbConnection的CON =新的OleDbConnection(@ “供应商= Microsoft.Jet.OLEDB.4.0;数据源= C:\ BOOK1.XLS;扩展属性= 'Excel的8.0; HDR =是; IMEX = 1'”);
注: “IMEX = 1;” 通知驱动程序总是读“混杂”(数字,日期,字符串等)的数据列文本。 请注意,此选项可能会影响excel工作表写访问负。
在连接字符串使用IMEX = 1。 希望这将解决这个问题..