使用.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:我发现了从 Excel 读取时如何计算空行数 https://stackoverflow.com/questions/7317665/how-to-count-empty-rows-when-reading-from-excel但无法重现它。
该问题似乎与 OLEDB 提供程序的 TypeGuessRows 功能有关。简而言之,Excel 列中的数据可以是任何类型。 OLEDB 提供程序通过扫描工作表的前 8 行来猜测数据类型,以确定多数类型 - 样本中值数量最多的数据类型。任何不属于多数类型的东西都会被丢弃。
请参阅此博客文章以获取更详细的解释。 http://www.processinginfinity.com/mystery-of-the-missing-cell-value
还有这个MS 知识库文章 http://support.microsoft.com/kb/281517讨论行为。
(跳至 TypeGuessRows 行为的“解决方法”部分)
作为测试,我创建了一个与您发布的示例类似的文件,但是将所有列格式化为文本并保存文件。运行您发布的代码,我可以看到返回 4 行,其中第一行是空字符串。
您可能还想尝试修改注册表,看看将 TypeGuessRows 设置更改为 0(扫描文件中的所有数据以确定每列的数据类型)是否有助于返回第一个空白行。我的预感是这不会有帮助。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)