将 Excel 导入 DataTable 字符串为空

Posted

技术标签:

【中文标题】将 Excel 导入 DataTable 字符串为空【英文标题】:Import Excel to DataTable string's are empty 【发布时间】:2013-03-06 08:34:31 【问题描述】:

要将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的某一行中,如果我的行如下所示

省略了字符串,我的数据集如下所示

但是,如果我添加一些字符串并且我的上传看起来像这样:

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

【问题讨论】:

我也遇到了同样的问题。然后我手动将excel中该特定列的数据类型从一般更改为文本。它奏效了 【参考方案1】:

尝试将您的 oledbconnection 字符串更改为以下格式:

代码片段 OleDbConnection con = 新 OleDbConnection( @"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\book1.xls;Extended Properties='Excel 8.0;HDR=Yes;IMEX=1'");

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

【讨论】:

在我的情况下它不起作用。情况是在一列中的第一个单元格值为日期,其他为字符串,在另一列中,第一个单元格值为字符串,其余为数字。其余值仍为空白。【参考方案2】:

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

【讨论】:

【参考方案3】:

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

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

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

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

【讨论】:

【参考方案4】:

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

【讨论】:

以上是关于将 Excel 导入 DataTable 字符串为空的主要内容,如果未能解决你的问题,请参考以下文章

Excel操作--使用NPOI导入导出Excel为DataTable

使用 Asp.net 将 Excel 导入 DataTable

请问datatable能不能直接导入excel中??

DataTable 整行为空时,去除空行,常用于Excel导入,转换为DataTable时出现

解决从Excel导入数据库,导入到DataTable时数据类型发生变化的问题(如数字类型变成科学计数法,百分数变成小数)

如何快速的将 DataTable 导入到 Excel 中 ?