导入Excel电子数据表到字符串的空(Import Excel to DataTable strin

2019-10-17 18:30发布

导入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中的行之一,如果我的行看起来像下面

字符串中省略,我的数据集看起来像这样

但是,如果我加入一些字符串,如果我上传的是这样的:

然后,我的数据集看起来不省略的字符串:

Answer 1:

这是因为提供者上的列的从柱(标题行之后的行)的第一行的类型决定。 当第一行包含一个数字,柱的类型是double或另一数量类型,所以它不能包含的字符串值。

我尝试一切可能的方式(设置表结构提前,使用DataReader ,改变单元格的格式,...),他们都失败了。 这似乎是这个问题Microsoft.Jet.OLEDB提供商。 我强烈电子书籍你使用第三方擅长读库。 有很多开源库可供选择。

如果你的文件是一个Excel 2007中(.xlsx)格式的文件,我强烈建议使用EPPluse 。 它也可以作为NuGet包 。

否则,你可以看看这个答案要多找几个库。



Answer 2:

MD.Unicorn的答案是不是100%正确。 你OLEDB提供商使用名为设置TypeGuessRows ,以确定有多少行被读出,以决定一列的数据类型。 不幸的是这种设置不能在连接字符串中指定,并且必须在系统注册表中更改。 见这为更多的细节问题。



Answer 3:

试着改变你的OleDbConnection字符串格式如下:

代码段OleDbConnection的CON =新的OleDbConnection(@ “供应商= Microsoft.Jet.OLEDB.4.0;数据源= C:\ BOOK1.XLS;扩展属性= 'Excel的8.0; HDR =是; IMEX = 1'”);

注: “IMEX = 1;” 通知驱动程序总是读“混杂”(数字,日期,字符串等)的数据列文本。 请注意,此选项可能会影响excel工作表写访问负。



Answer 4:

在连接字符串使用IMEX = 1。 希望这将解决这个问题..



文章来源: Import Excel to DataTable string's are empty