我正在尝试使用 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/