2013-03-06 91 views
1

导入Excel到数据表中,我使用的是简单的代码:导入Excel到DataTable中的字符串的空

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

enter image description here

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

enter image description here

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

enter image description here

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

enter image description here

回答

1

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

我尝试了所有可能的方式(事先设置表格结构,使用DataReader,更改单元格的格式,...),但都失败了。这似乎是Microsoft.Jet.OLEDB供应商的问题。我高度推荐您使用第三方excel阅读库。有很多开源库可用。

如果您的文件是Excel 2007(.xlsx)文件,我强烈建议使用EPPluse。它也可以作为NuGet package

否则,你可以看看this answer找到更多的库。

+0

我不想处理更多问题并更改为EPPlus。这样可行。 – HOY 2013-03-14 09:48:04

2

MD.Unicorn的回答不是100%正确的。您的OLEDB提供程序使用名为TypeGuessRows的设置来确定要读取多少行来确定列的数据类型。不幸的是,这个设置不能在连接字符串中指定,并且必须在系统注册表中进行更改。有关更多详细信息,请参阅this问题。

0

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

1

试图改变自己的OleDbConnection字符串格式如下:

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

注意:“IMEX = 1;”告诉驱动程序总是将“混合”(数字,日期,字符串等)数据列作为文本读取。请注意,此选项可能会影响Excel表单写入访问权限。

+0

在我的情况下,它不工作。大小写在列中,第一个单元格的值是date,其他的是字符串,而在另一个列中,第一个单元格的值是字符串,其余是数字。剩下的值仍然是空白的。 – 2015-10-09 11:33:56