使用 OLEDB + 读取.xlsx文件 某些单元格未加载数据的问题

本文关键字:单元格 加载 数据 问题 OLEDB 读取 xlsx 文件 使用 | 更新日期: 2023-09-27 18:36:08

希望有人能在这里帮助我...

我正在尝试将.xlsx文件加载到数据表中,然后使用 C#.Net 处理信息。

启动并运行基础知识,使用 OLEDB 连接,加载数据并将其输出到 DataGridView 以检查数据。

我遇到的问题是某些单元格(只有少数)无法加载 excel 文件中包含的数据。例如,在我的示例中,单元格"C3"是一个常规格式的单元格,就像excel中此行上的所有其他单元格一样,不会加载其内容。

实际的单元格应作为 MEMBERSHIP 加载,但是当将其输出到 gridview 时,它显示空白,或者在调试 DataRow/Col 值时它是空白的,即使 excel 文件包含此单元格的数据也是如此。如果我将此单元格 MEMBERSHIP 的内容更改为类似 123456 的数字,那么它会加载此值正常,但是如果我将值更改回字符,它会再次返回空白。

除 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);
}

卡住了,救命!:)

使用 OLEDB + 读取.xlsx文件 某些单元格未加载数据的问题

我的猜测是,同一列中有几个单元格,上面有几个单元格,字符串值为"MEMBER",它们是数字。 这会导致 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;"告诉驱动程序始终读取"intermix"(数字, 日期、字符串等)数据列作为文本。请注意,此选项可能会 影响 Excel 工作表写入访问负数。