Excel 连接管理器

适用于:SQL Server Azure 数据工厂中的 SSIS Integration Runtime

Excel 连接管理器使包可以连接到 Microsoft Excel 工作簿文件。 Microsoft SQL Server Integration Services 所包含的 Excel 源和 Excel 目标使用 Excel 连接管理器。

重要

有关连接到 Excel 文件的详细信息,以及从 Excel 文件加载数据或将数据加载到 Excel 文件的限制和已知问题,请参阅使用 SQL Server Integration Services (SSIS) 从 Excel 加载数据或将数据加载到 Excel 中

将 Excel 连接管理器添加到包时, Integration Services 会创建将在运行时作为 Excel 连接进行解析的连接管理器,设置该连接管理器的属性,并将该连接管理器添加到包上的 Connections 集合。

该连接管理器的 ConnectionManagerType 属性设置为 EXCEL

配置 Excel 连接管理器

可以按照下列方式配置 Excel 连接管理器:

  • 指定 Excel 工作簿文件的路径。

  • 指定用于创建文件的 Excel 的版本。

  • 指示所选工作表或区域中的第一行是否包含列名称。

可以通过 SSIS 设计器或以编程方式来设置属性。

有关可以在 SSIS 设计器中设置的属性的详细信息,请参阅 Excel 连接管理器编辑器

有关以编程方式配置连接管理器的信息,请参阅 ConnectionManager以编程方式添加连接项目。

Excel 连接管理器编辑器

使用 “Excel 连接管理器编辑器” 对话框可以将连接添加到现有或新的 Microsoft Excel 工作簿文件。

选项

Excel 文件路径
键入一个现有或新的 Excel 工作簿文件的路径和文件名。

“浏览”
使用“打开”对话框导航到 Excel 文件所在的文件夹或要创建新文件的文件夹

Excel 版本
指定用于创建文件的 Microsoft Excel 的版本。

首行包含列名称
指定所选工作表中的第一行数据是否包含列名称。 此选项的默认值为 True

从 Excel 导入混合数据类型的数据的解决方案

如果使用包含混合数据类型的数据,则默认情况下,Excel 驱动程序将读取前 8 行(由 TypeGuessRows 注册表项配置)。 Excel 驱动程序将基于前 8 行数据,尝试推测每列的数据类型。 例如,如果 Excel 数据源在一列中包含数字和文本,则在前 8 行包含数字的情况下,驱动程序可能会基于前 8 行确定列中的数据为整数类型。 在这种情况下,SSIS 将跳过文本值,并将其作为 NULL 导入到目标。

若要解决此问题,可以尝试以下解决方法之一:

  • 将 Excel 文件中的 Excel 列类型更改为“文本”

  • 将 IMEX 扩展属性添加到连接字符串,以替代驱动程序的默认行为。 将“;IMEX=1”扩展属性添加到连接字符串的末尾时,Excel 会将所有数据视为文本。 请参阅以下示例:

    Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:\ExcelFileName.xlsx;Extended Properties="EXCEL 12.0 XML;HDR=YES;IMEX=1";
    

    要使此解决方案能够可靠地工作,你可能还需要修改注册表设置。 main.cmd 文件如下所示:

    reg add "HKEY_LOCAL_MACHINE\SOFTWARE\WOW6432Node\Microsoft\Office\12.0\Access Connectivity Engine\Engines\Excel" /t REG_DWORD /v TypeGuessRows /d 0 /f
    reg add "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Office\12.0\Access Connectivity Engine\Engines\Excel" /t REG_DWORD /v TypeGuessRows /d 0 /f
    reg add "HKEY_LOCAL_MACHINE\SOFTWARE\WOW6432Node\Microsoft\Office\14.0\Access Connectivity Engine\Engines\Excel" /t REG_DWORD /v TypeGuessRows /d 0 /f
    reg add "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Office\14.0\Access Connectivity Engine\Engines\Excel" /t REG_DWORD /v TypeGuessRows /d 0 /f
    reg add "HKEY_LOCAL_MACHINE\SOFTWARE\WOW6432Node\Microsoft\Office\15.0\Access Connectivity Engine\Engines\Excel" /t REG_DWORD /v TypeGuessRows /d 0 /f
    reg add "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Office\15.0\Access Connectivity Engine\Engines\Excel" /t REG_DWORD /v TypeGuessRows /d 0 /f
    reg add "HKEY_LOCAL_MACHINE\SOFTWARE\WOW6432Node\Microsoft\Office\16.0\Access Connectivity Engine\Engines\Excel" /t REG_DWORD /v TypeGuessRows /d 0 /f
    reg add "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Office\16.0\Access Connectivity Engine\Engines\Excel" /t REG_DWORD /v TypeGuessRows /d 0 /f
    
  • 将该文件保存为 CSV 格式,并更改 SSIS 包以支持 CSV 导入。

使用 SQL Server Integration Services (SSIS) 从 Excel 加载数据或将数据加载到 Excel 中
Excel 源
Excel 目标