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

标签 c# excel registry oledb 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;'");

研究告诉我,连接字符串中的完整扩展属性应该是

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

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

涉及的特定注册表项是:

路径:

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

键:

TypeGuessRows

原值=8,为了让它生效改成=0

如果不这样做,IMEX 将无法正常工作,我将 TypeGuessRows=0 添加到 Extended Properties 中。

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

简而言之:

有没有办法读取混合数据类型的 excel 文件, 不必修改任何注册表项(这是很常见的做法)?

更多主题:

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

如果 OleDb 无法正常工作:

除了 OleDb 之外还有其他选择吗?

我很感激任何意见或建议。

问候

最佳答案

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

关于c# - 在不修改注册表项的情况下读取 Excel InterMixed DataType,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9936646/

相关文章:

c# - 是否有可能将马尔可夫链引导至某些关键字?

c# - 处理后退按钮,在 WP7 中更改页面

c# - 下载文件时出现 NotSupportedException

vba - 无法在 Excel VBA 中添加两个数字

excel - 在 Excel 中使用 Power Query 解析 JSON,其方式与 FetchJson 在 Google 表格中的处理方式相同

excel - 如何仅获取 Apache POI 中未隐藏的工作表数量

batch-file - 批处理文件 - 发现的程序路径(变量) - 从发现的 reg 值(路径)运行程序

c# - 如何让我的应用程序从“开始”菜单运行?

c++ - RegEnumValue 使应用程序崩溃

c# - 使用 C# 读取和修改 Microsoft Word 文档