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;'");

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

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

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

所涉及的特定注册表项是:

小路:

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Jet\4.0\Engines\Excel

钥匙:

类型GuessRows

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

如果不这样做,IMEX我添加TypeGuessRows=0Extended Properties.

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

简而言之:

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

进一步的话题:

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

如果事情没有解决OleDb

旁边有替代品OleDb吗?

我感谢任何建议或建议。

问候

4

2 回答 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 (NO HEADER),但是由于您现在有标题,因此每列都将被视为字符串(文本),您可以对每个单元格值进行解析或验证。当然,您需要跳过或删除第一行,因为它包含标题信息。

于 2012-09-13T17:58:21.603 回答
2

而不是使用OleDb我知道使用Excel Data Reader。它非常有效!强烈推荐!

于 2012-04-03T02:01:36.017 回答