使用OLEDB +读取.xlsx文件某些单元格未加载数据时出现问题

希望有人能帮助我

我试图加载一个.xlsx文件到一个DataTable中,然后使用C#.Net处理信息。

得到了基本知识和运行,连接使用OLEDB,数据加载,我输出到DataGridView来检查数据。

我遇到的问题是一些单元格(只有less数)不加载Excel文件中包含的数据。 在我的例子中,例如单元格“C3”,这是一个通用格式化的单元格,就像Excel中这一行上的所有其他单元格不会加载其内容。

实际的单元格应该加载为MEMBERSHIP,但是当输出到gridview时,它会显示一个空白,或者在debuggingDataRow / Col值时它是空白的,即使excel文件在这个单元格中有数据。 如果我把这个单元格MEMBERSHIP的内容更改为123456这样的数字,那么它会将这个值加载好,但是如果我把这个值改回字符,它会再次返回空白。

大部分单元格(15个中的13个)加载在此行上,除了2以外,它们具有相同的格式。

这里是我在我的代码中使用的连接string,实际上从这个网站:):

try { string tabsheet = Path.GetFileNameWithoutExtension(FullFileName); string connectionString = @"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + FullFileName + ";" + "Extended Properties='Excel 12.0 Xml;HDR=NO'"; var adapter = new OleDbDataAdapter("SELECT * FROM [" + tabsheet + "$]",connectionString); adapter.Fill(aDataTable); } catch (Exception er) { logfile.AddToFile("GetDataTableFromCsv exception: " + er.Message); } 

卡住了,帮忙! 🙂

我的猜测是,在string值为'MEMBERSHIP'的数字之上的同一列中有几个单元格。 这会导致OLEDB推断这些列中的数据是数字,因此非数字值将被忽略。

解决方法是在您的connstring的扩展属性部分包含IMEX = 1:

 string connectionString = @"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + FullFileName + ";" + "Extended Properties='Excel 12.0 Xml;HDR=NO;IMEX=1;'"; 

connectionstrings.com上的Excel条目解释了此属性设置,并且还有一个警告:

“IMEX = 1;” 告诉驱动程序总是读取“混合”(数字,date,string等)数据列作为文本。 请注意,这个选项可能会影响Excel表单写访问的负面影响。