c# – 为什么在使用OleDb的Excel导入中忽略第一个空行
发布时间:2020-12-15 17:25:09 所属栏目:百科 来源:网络整理
导读:使用.Net的OleDb,我尝试导入一个Excel表,其中第一行可以为空.我想保留DataTable中的空行,以便稍后可以将单元格映射到Excel样式的单元格名称“A1,A2,…”.但无论我做什么,第一行都被删除了. Excel文件如下所示: - - - ABC XY ZZ 1 2 3 4 4 5 其中“ – ”是
使用.Net的OleDb,我尝试导入一个Excel表,其中第一行可以为空.我想保留DataTable中的空行,以便稍后可以将单元格映射到Excel样式的单元格名称“A1,A2,…”.但无论我做什么,第一行都被删除了.
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语言之带参数的宏定义
- Swift-->NSKeyedArchiver与NSKeyedUnarchiver数据
- PostgreSQL和Kingbase中设置search_path
- ruby-on-rails – 使用RSpec测试Paperclip文件上
- 几种常见的跨域提交的几种方法 cors flash跨域 j
- React+ES6+Less+Bootstrap----webpack初探
- 为何 String.CharacterView 不是 MutableCollect
- Cocos2d-x-------------------------------消息机
- sqlite3 not found 安装 sqlite3
- React Native 升级到版本到0.25.1
热点阅读