将Excel导入到DataTablestring是空的
为了将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中,如果我的行看起来像下面
stringommited和我的数据集看起来像这样
但是,如果我添加一些string,如果我的上传看起来像这样:
然后我的数据集看起来像不会省略string:
这是因为提供者决定列的第一行(标题行之后的行)的列的types。 当第一行包含一个数字时,列的types是double
或另一个数字types,所以它不能包含string值。
我尝试了所有可能的方法(事先设置表结构,使用DataReader
,更改单元格的格式,…),但都失败了。 这似乎是与Microsoft.Jet.OLEDB
提供者的问题。 我高度推荐你使用第三方excel阅读库。 有很多开源库可用。
如果您的文件是Excel 2007(.xlsx)文件,我强烈build议使用EPPluse 。 它也可以作为一个NuGet包 。
否则,你可以看看这个答案来find更多的库。
医生医生的答案不是100%正确的。 您的OLEDB提供程序使用名为TypeGuessRows
的设置来确定要读取多less行来确定列的数据types。 不幸的是,这个设置不能在连接string中指定,并且必须在系统registry中进行更改。 看到这个问题的更多细节。
尝试按以下格式更改您的oledbconnectionstring:
代码片段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;” 告诉驱动程序总是读取“混合”(数字,date,string等)数据列作为文本。 请注意,这个选项可能会影响Excel表单写访问的负面影响。
在连接string中使用IMEX = 1。 希望能解决这个问题..