3

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

在此处输入图像描述

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

在此处输入图像描述

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

在此处输入图像描述

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

在此处输入图像描述

4

4 回答 4

3

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

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

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

于 2014-10-16T11:56:15.317 回答
2

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

于 2013-03-06T09:18:01.447 回答
1

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

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

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

否则,您可以查看此答案以找到更多库。

于 2013-03-06T09:09:15.813 回答
1

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

于 2013-04-11T03:57:08.533 回答