将Excel导入DataTable字符串为空

时间:2013-03-06 08:34:31

标签: c# asp.net excel import dataset

要将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

4 个答案:

答案 0 :(得分:2)

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

答案 1 :(得分:2)

尝试按以下格式更改oledbconnection字符串:

代码段 OleDbConnection con = new OleDbConnection(            @" Provider = Microsoft.Jet.OLEDB.4.0;数据源= C:\ book1.xls;扩展属性=' Excel 8.0; HDR =是; IMEX = 1'") ;

注意:" IMEX = 1;"告诉司机总是读"混合" (数字,日期,字符串等)数据列为文本。请注意,此选项可能会影响Excel工作表写入访问权限。

答案 2 :(得分:1)

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

我尝试了一切可能的方法(预先设置表结构,使用DataReader,更改单元格的格式,...)并且它们都失败了。这似乎是Microsoft.Jet.OLEDB提供商的问题。我强烈建议您使用第三方Excel阅读库。有很多开源库可供使用。

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

的形式提供

否则,您可以查看this answer以查找更多库。

答案 3 :(得分:1)

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