
Excel文件如下所示:
- - - ABC XY ZZ 1 2 3 4 4 5
其中“ – ”是一个空单元格. (我对导入格式没有影响.)
简化代码:
string cnnStr = "ProvIDer=Microsoft.Jet.olEDB.4.0;Data Source=\"file.xls\";Extended PropertIEs=\"Excel 8.0;HDR=No;IMEX=1\""; string mySheet = "Sheet1$"; oleDbConnection connection = new oleDbConnection(cnnStr); DataSet Contents = new DataSet(); using (oleDbDataAdapter adapter = new oleDbDataAdapter("select * from [" + mySheet + "]",connection)) { adapter.Fill(Contents); } Console.Writeline(Contents.tables[0].Rows.Count); // prints: 3 Console.Writeline(Contents.tables[0].Rows[0].ItemArray[0]); // prints: ABC 知道如何保留那个空行吗?
ps:我发现How to count empty rows when reading from Excel但无法重现它.
解决方法 该问题似乎与olEDB提供程序的TypeGuessRows功能有关.简而言之,Excel列中的数据可以是任何类型. olEDB提供程序通过扫描工作表的前8行来确定数据类型,以确定多数类型 – 样本中具有最多值的数据类型.任何不属于多数类型的东西都将被丢弃.See this blog post for a more detailed explanation.
以及讨论行为的MS KB Article.
(向下跳转到TypeGuessRows行为的变通方法部分)
作为测试,我创建了一个类似于您发布的样本的文件,但将所有列格式化为文本并保存文件.运行您发布的代码我能够看到返回4行,第一行是空字符串.
您可能还想尝试修改注册表以查看是否将TypeGuessRows设置更改为0(扫描文件中的所有数据以确定每列的数据类型)有助于返回第一个空行.我的预感是,这无济于事.
总结以上是内存溢出为你收集整理的c# – 为什么在使用OleDb的Excel导入中忽略第一个空行全部内容,希望文章能够帮你解决c# – 为什么在使用OleDb的Excel导入中忽略第一个空行所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)