我遇到的问题是数据适配器只查看每列中的第一行以确定数据类型。在我的例子中,第一列“SKU”是前 500 行的数字,然后我碰巧有混合数字和字母的 SKU。所以最终发生的是 SKU 列中的行留空,但我仍然获得每列行的其他信息。
我相信这是控制它的连接字符串,并且根据我当前的设置它应该可以工作,但事实并非如此。
连接字符串:
conn.ConnectionString = @"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:\Users\Nick\Desktop\Pricing2.xlsx" + @";Extended Properties=""Excel 12.0 Xml;HDR=Yes;IMEX=1;ImportMixedTypes=Text;TypeGuessRows=0""";
ImportMixedTypes=Text;TypeGuessRows=0
应该是重要的关键字,查看 0 行并仅使用文本作为所有内容的值类型。
我在这上面加上的“创可贴”是让电子表格中的第一行混合字母和数字,特别是在我的查询中将该行排除在外。
最佳答案
不幸的是,您不能从连接字符串中设置 ImportMixedTypes
或 TypeGuessRows
,因为这些设置是在注册表中定义的。对于 ACE OleDb 驱动程序,它们存储在
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Office\14.0\Access Connectivity Engine\Engines\Excel
在注册表中。因此,您可以将连接字符串简化为:
conn.ConnectionString = @"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:\Users\Nick\Desktop\Pricing2.xlsx;Extended Properties=""Excel 12.0 Xml;HDR=Yes;IMEX=1;""";
在注册表中将 TypeGuessRows
设置为 0
并将 ImportMixedTypes
设置为 Text
后,您应该会得到该行为你在期待。但是,如果您发现导入性能不理想,您可以考虑使用一个适当大的数字,例如 1000 而不是零。
关于c# - 帮助处理 excel 文件的 OleDB 连接字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4551203/