希望有人可以在这里帮助我...
我试图将.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);
}
Run Code Online (Sandbox Code Playgroud)
坚持,救命!:)
我的猜测是,在一个(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;'";
Run Code Online (Sandbox Code Playgroud)
connectionstrings.com上的Excel条目解释了此属性设置,并且还有一个警告:
"IMEX = 1;" 告诉驱动程序始终将"混合"(数字,日期,字符串等)数据列读作文本.请注意,此选项可能会影响Excel工作表写入访问权限.
| 归档时间: |
|
| 查看次数: |
5835 次 |
| 最近记录: |