在不修改注册表项的情况下读取Excel InterMixed DataType

rof*_*s91 8 c# oledb registry excel registrykey

我正在尝试使用C#来读取具有混合数据类型的excel文件.下面是我的连接字符串

var path = //xls location
var MyConnection = new OleDbConnection("provider=Microsoft.Jet.OLEDB.4.0; Data Source='" + path + "';Extended Properties='Excel 8.0;IMEX=1;'");
Run Code Online (Sandbox Code Playgroud)

研究告诉我,Extended Properties连接字符串中的完整应该是

Excel 8.0;IMEX=1;HDR=NO;TypeGuessRows=0;ImportMixedTypes=Text

但是,我被告知在连接字符串中,TypeGuessRows=0 没有任何意义,因为该值将直接从注册表中获取.因此,我需要手动修改密钥并从连接字符串中删除此属性.

涉及的特定注册表项是:

路径:

HKEY_LOCAL_MACHINE\SOFTWARE \微软\喷气\ 4.0 \发动机\ EXCEL

键:

TypeGuessRows

原始值= 8,为了使其工作变为= 0

如果不这样做的IMEX将无法正常工作,甚至强硬.我添加TypeGuessRows=0进了Extended Properties.

但是,我的公司禁止修改注册表值(严格地说).我被告知找到替代方案.

简而言之:

有没有办法读取混合数据类型excel文件,而无需修改任何注册表项(这是一种非常常见的做法)?

更多主题:

你以前经历过这个吗?是否有可能我们可以TypeGuessRows=0从连接字符串设置而无需修改注册表项(取消我的上述前提).

如果事情不能解决OleDb:

旁边还有替代品OleDb吗?

我感谢任何建议或建议.

问候

Vla*_*den 8

你可以做的是要求在Excel的第一行中有标题并设置连接字符串

var MyConnection = new OleDbConnection("provider=Microsoft.Jet.OLEDB.4.0; Data Source='" + path + "';Extended Properties='Excel 8.0;HDR=No;IMEX=1;'");
Run Code Online (Sandbox Code Playgroud)

这里的关键是设置HDR = No(NO HEADER),但是因为你现在有了标题,所以每个列都会被视为字符串(文本),你可以对每个单元格值进行解析或验证.当然,您需要跳过或删除第一行,因为它包含标题信息.