读取Excel混合数据类型而不修改注册表键值

8

我正在尝试使用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;'");

研究表明,连接字符串中完整的“扩展属性”应为:
Excel 8.0; IMEX=1; HDR=NO; TypeGuessRows=0; ImportMixedTypes=Text
然而,我被告知在连接字符串中,“TypeGuessRows=0”没有任何意义,因为该值将直接从Registry中获取。因此,我需要手动修改键并从连接字符串中删除此属性。
涉及到的特定注册表键是:
路径:
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Jet\4.0\Engines\Excel
密钥:
TypeGuessRows
原始值 = 8,为使其起作用,改为 = 0
如果不这样做,“IMEX”将无法工作,即使我在“扩展属性”中添加了“TypeGuessRows=0”。
然而,我的公司禁止修改注册表值(严格要求)。我被告知要找到其他替代方法。
简而言之:有没有一种方式可以读取杂项数据类型的Excel文件,而不必修改任何注册表键(这是相当普遍的做法)?
进一步讨论:
你有没有遇到过这种情况?我们可以通过连接字符串仅设置"TypeGuessRows=0"而不必修改注册表键吗?
如果使用“OleDb”无法解决问题:
除了“OleDb”之外,还有哪些替代方法?
非常感谢您的建议和建议。
问候
2个回答

8
您可以要求在Excel的第一行中设置标题,并将连接字符串设置为:
var MyConnection = new OleDbConnection("provider=Microsoft.Jet.OLEDB.4.0; Data Source='" + path + "';Extended Properties='Excel 8.0;HDR=No;IMEX=1;'");

关键在于设置 HDR=No (无表头),但是由于现在有表头,每个列将被视为字符串(文本),您可以对每个单元格值进行解析或验证。当然,您需要跳过或删除第一行,因为它包含表头信息。

2

我现在使用 Excel Data Reader 替代了 OleDb。它的效果非常好!强烈推荐使用!


很棒的发现!谢谢! - Bronek

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接