希望有人可以在这里帮助我......
我正在尝试将.xlsx文件加载到DataTable中,然后使用C#.Net来处理信息。
启动并运行基础知识,使用OLEDB连接,加载数据并将其输出到DataGridView以检查数据。
我遇到的问题是某些单元格(只有少数单元格)不加载excel文件中包含的数据。在我的示例单元格“C3”中,例如,这是一个通用格式化单元格,就像excel中此行上的所有其他单元格一样,不会加载其内容。
实际的Cell应该作为MEMBERSHIP加载,但是当它输出到gridview时它会显示一个空白,或者在调试DataRow / Col值时它是空白的,即使excel文件包含该单元格的数据。如果我将此单元格MEMBERSHIP的内容更改为123456之类的数字,则会将此值加载为ok,但如果我将该值更改回字符,则会再次返回空白。
除了2之外,大多数单元格(15个中的13个)加载到此行,并且它们具有相同的格式。
这是我在我的代码中使用的连接字符串,实际上是从这个网站获得的:):
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);
}
坚持,帮助! :)
答案 0 :(得分:5)
我的猜测是,在一个(s)上面的同一列中有几个单元格,其字符串值为'MEMBERSHIP',即数字。这会导致OLEDB推断这些列中的数据是数字的,因此将忽略非数字值。
解决方案是在conn字符串的扩展属性部分中包含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;”告诉司机总是读“混合”(数字, 日期,字符串等)数据列为文本。请注意,此选项可能 影响excel表写访问否定。