OLEDB 连接 Excel 中的 HDR 与 IMEX 解释

 必赢亚州手机网站     |      2020-01-19 13:38

可以利用 Microsoft.Jet.OleDb 连接 Excel,就像数据库一样操作 Excel,以下是一个示例的连接字符串:

PS:有时候,我们可以把Excel当作一个简单的数据来用,就像Access,对于一些数据操作时,这样比直接操作COM封装的Excel组件来的方便。

string connString = "Provider=Microsoft.Jet.OleDb.4.0;Data Source=" + filePath + ";Extended Properties='Excel 8.0;HDR=NO;IMEX=1;'";

操作Excel的方式有两种一种通过ODBC,一种直接用OleDb驱动。使用ODBC的方式,我在服务器资源管理器中可以增加Excel表格,但无法进行任何操作,看不见Excel中的工作表。也不可以直接执行SQL语句。

HDR

所以只能使用OleDb的方式。先看看OleDb连接Excel的连接字符串

HDR 表示第一行是否是标题行。

连接字符串Provider=Microsoft.Jet.OLEDB.4.0;Data Source=|DataDirectory|\example.xls;Extended Properties=Excel 8.0
  • 必赢亚州手机网站,若为 YES,则第一行是标题行(即列名称),不是数据;
  • 若为 NO,则第一行不是标题行,跟后面的行一样,是数据。

这个连接字符串跟Access的很像(在可视化操作时,选择OleDb驱动,默认连接就是Access),就是多了一个“Extended Properties=Excel 8.0”这句。

IMEX

我之前一直通过代码的方式连接操作Excel,使用System.Data.OleDb命名空间下的ConnectionAdapterCommand。既然代码可以操作,那么VS2005的可视化的数据操作一定也可以。刚开始我通过下图的操作方式没有找到添加Excel的方式。

即 intermixed,表示混合数据类型时如何处理。Excel 不像 Access 样,Access 每一字段(列)具有数据类型,Excel 不具有,所以 Excel 第一行第一列可以存储字符串,第二行第一列又可以存储数字……同样的列,存储不同的数据类型,这就形成了混合数据类型。

必赢亚州手机网站 1

如果我们的 Excel 不存在混合数据类型,则可以省略 IMEX;如果我们的 Excel 存在混合数据类型,则需要正确指定 IMEX,否则 OLEDB 很可能错误地判断数据类型,导致读取出来的数据是空白,甚至读取不到行等错误。

在“更改数据源”窗口里根本没有OleDb的驱动方式选择,其实是我没有注意,其实期中的第一项连接Access就是OleDb方式。由此可以判断数据源是可以使用OleDb方式的。最终也被我找到。

  • 若为 0,则为输出模式,此情况下只能用作写入 Excel;
  • 若为 1,则为输入模式,此情况下只能用作读取 Excel,并且始终将 Excel 数据作为文本类型读取;
  • 若为 2,则为连接模式,此情况下既可用作写入、也可用作读取。

一)在更改数据源这一步,“数据源”选择“其他”,“在数据提供程序”选择“用于 OLE DB 的 .Net Framework 数据提供程序”,并点击“确定”,这时候数据连接驱动已经是正确的OleDb方式了。如下图所示。
必赢亚州手机网站 2

所以若要读取混合数据类型,应该将 IMEX 设置为 1;若误设置为 0,则读取不到任何行;若误设置为 2 或省略,则有些数据读取出来是空白。

二)再回到“添加连接”窗口后,窗口已经变成OleDb连接方式专用的添加连接窗口。如图所示。在“OLE DB 提供程序”中选择“Microsoft Jet 4.0 OLE DB Provider”(OleDb可以连接数据放方式超多,可以连接各种各样数据源,微软还是很彪悍的)。
必赢亚州手机网站 3

注意:输出模式对应写入、输入模式对应读取。

三)点击“数据连接”,打开“数据连接属性”窗口,在“连接”选项卡中,点击“…”按钮,进行选择要打开的Excel文件。如图所示。(正如我所说,OleDb方式默认是连接Access,所以在这个窗口,提示也是打开Access文件,但是实际情况是可以打开Excel文件)。
必赢亚州手机网站 4

需要注意点,打开文件窗口中,因为默认文件类型是Access文件,需要手动改为“全部文件”或在“文件名”中手动输入“*.xls”这样的文件筛选字符串,并回车。然后才能在窗口中看见你要打开的Excel文件。
必赢亚州手机网站 5

四)这时候还没完,OleDb方式默认是打开Access,这时点击“连接测试”肯定是失败的,回想刚才的连接字符串,我们还缺少配置一个属性:“Extended Properties”,它的值应该为“Excel 8.0”。这个属性非常关键,它告诉OleDb程序,打开的数据文件不是Access而是Excel。配置方式是在“数据连接属性”窗口,选择“所有”选项卡。找到“Extended Properties”熟悉,双击,在打开的“编辑属性值”窗口中手动输入“Excel 8.0”,并点击“确定”按钮。如下图所示。
必赢亚州手机网站 6

上一篇:学习笔记,就是全局的 下一篇:没有了