代码之家  ›  专栏  ›  技术社区  ›  Jeffrey Cameron

使用C#/OLEDB从Excel导入时更改的值

  •  1
  • Jeffrey Cameron  · 技术社区  · 14 年前

    我正在尝试使用OleDB将Excel电子表格中的一些数据导入我的C应用程序。我将标准连接字符串与 IMEX=1,HDR=YES 选项

    提供者=微软.ACE.OLEDB.12.0;数据源={0};扩展 Properties=“Excel 12.0;HDR=是;IMEX=1”

    我有一个列,其中的值主要是文本:TRUE或FALSE。中间有几个空白值。导入时,空值将替换为空字符串。这可能是因为OleDB将列的数据类型确定为布尔型,并且不导入任何非布尔值(如BLANK)。

    我试过解决办法 this answer 但没有起作用。即使我预先创建DataTable并将其列设置为all具有string的数据类型,空值也会继续被删除。

    我试过破解同一个问题中建议的注册表项,但没有任何效果。

    有追索权吗?还是我要尝试使用COM?我们没有电子表格的预算,我也不能用 excellibrary 因为我大部分时间都要处理.xlsx文件。

    提前谢谢

    2 回复  |  直到 7 年前
        1
  •  0
  •   Max    13 年前

    尝试将Excel文件保存为CSV格式并进行处理。

        2
  •  0
  •   Community Egal    7 年前

    Andrew Garrison 谁公布了他的答案 here 您需要修改注册表设置:

    HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Office\12.0\Access Connectivity Engine\Engines\Excel\
    

    TypeGuessRows 0 ImportMixedTypes Text 在这把钥匙下面。

    ACE扫描前8行并尝试猜测列格式。之后所有与格式不匹配的内容都返回NULL。将TypeGuessRow设置为0将强制驱动程序扫描所有行以确定格式(当然会影响性能)。ImportMixedTypes=text指定具有混合格式的列(如您的情况)应作为文本导入。