Excel 源

更新日期: 2007 年 9 月 15 日

Excel 源从 Microsoft Excel 工作簿的工作表或范围中提取数据。

ms141683.note(zh-cn,SQL.90).gif注意:
在 64 位计算机上,必须以 32 位模式运行连接到 Microsoft Excel 数据源的包。 连接至 Excel 数据源的 Microsoft Jet OLE DB 访问接口只有 32 位版本。
ms141683.note(zh-cn,SQL.90).gif注意:
若要从使用 Microsoft Office Excel 2007 的数据源加载数据,请使用 OLE DB 源。 使用 Excel 源无法连接到 Excel 2007 数据源。 有关详细信息,请参阅 Excel 连接管理器

Excel 源提供了四种提取数据的数据访问方式:

  • 表或视图。
  • 变量中指定的表或视图。
  • SQL 语句的运行结果。 查询可以是参数化查询。
  • 存储在变量中的 SQL 语句的运行结果。
ms141683.note(zh-cn,SQL.90).gif重要提示:
在 Excel 中,工作表或范围等同于表或视图。 Excel 源和目标编辑器中的可用表列表显示现有工作表(以追加到工作表名称后的 $ 符号标识,如 Sheet1$)和命名区域(不用 $ 符号标识,如 MyRange)。 有关详细信息,请参阅“使用注意事项”部分。

Excel 源使用 Excel 连接管理器与数据源建立连接,连接管理器可指定要使用的工作簿文件。 有关详细信息,请参阅 Excel 连接管理器

Excel 源有一个常规输出和一个错误输出。

使用注意事项

Excel 连接管理器使用 Microsoft OLE DB Provider for Jet 4.0 及其支持的 Excel ISAM(索引顺序存取方法)驱动程序来连接 Excel 数据源,并在 Excel 数据源中进行数据读写操作。

许多现有 Microsoft 知识库文章都记录了该访问接口和驱动程序的行为。虽然这些文章并非专门介绍 Integration Services 或其前身 Data Transformation Services,但您仍可了解到一些可能导致意外结果的行为。 有关 Excel 驱动程序的使用及行为的一般信息,请参阅如何将 ADO 与来自 Visual Basic 或 VBA 的 Excel 数据一起使用

当从 Excel 数据源读取数据时,Jet 访问接口和 Excel 驱动程序的下列行为可能会导致意外结果。

  • 数据源。 Excel 工作簿中的数据源可以是工作表(必须追加 $ 符号,如 Sheet1$)或命名区域(如 MyRange)。 在 SQL 语句中,工作表的名称必须加以分隔(如 [Sheet1$]),以避免 $ 符号引起语法错误。 查询生成器可自动添加这些分隔符。 指定工作表或范围时,该驱动程序将读取从工作表或范围左上角第一个非空单元开始的连续单元块。 因此,源数据中不能有空行,在标题或页眉行与数据行之间也不能有空行。
  • 缺少值。 Excel 驱动程序读取指定源中一定数量的行(默认情况下为 8 行)以推测每列的数据类型。 如果推测出列可能包含混合数据类型(尤其是混合了文本数据的数值数据时),驱动程序将决定采用占多数的数据类型,并对包含其他类型数据的单元返回空值。 (如果各种数据类型的数量相当,则采用数值类型。) Excel 工作表中大部分单元格格式设置选项不会影响此数据类型判断。 可以通过指定导入模式来修改 Excel 驱动程序的此行为。 若要指定导入模式,请在**“属性”**窗口中将 IMEX=1 添加到 Excel 连接管理器的连接字符串内的扩展属性值中。 有关详细信息,请参阅 PRB: Excel Values Returned as NULL Using DAO(PRB:Excel 使用 DAO OpenRecordset NULL 作为返回值)。
  • 截断的文本。 驱动程序在确定 Excel 列是否包含文本数据时,它将基于采样的最长值来选择数据类型(字符串或 memo)。 如果驱动程序没有在其采样的行中发现任何长于 255 个字符的值,那么它会将该列视为 255 个字符的字符串的列而不是 memo 列。 因此,长度超过 255 个字符的值可能会被截断。 若要从 memo 列导入数据而不发生截断,必须确保至少一个采样行中的 memo 列包含的值的长度超过 255 个字符,否则必须增加驱动程序采样的行数,使其包括这样的行。 通过增加 HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Jet\4.0\Engines\Excel 注册表项下面的 TypeGuessRows 的值,可以增加采样行数。 有关详细信息,请参阅 PRB:从 Jet 4.0 OLEDB 源传输数据失败并出现错误
  • 数据类型。 Excel 驱动程序只识别有限的一组数据类型。 例如,所有数值列均解释为双精度 (DT_R8),并且所有字符串列(除了 memo 列)均解释为 255 个字符的 Unicode 字符串 (DT_WSTR)。 Integration Services 按如下所示映射 Excel 数据类型:
    • 数值 – 双精度浮点 (DT_R8)
    • 货币 – 货币 (DT_CY)
    • 布尔 – 布尔 (DT_BOOL)
    • 日期/时间 – 日期 (DT_DATE)
    • 字符串 – Unicode 字符串,长度为 255 (DT_WSTR)
    • Memo – Unicode 文本流 (DT_NTEXT)
  • 数据类型和长度转换。Integration Services 不隐式转换数据类型。 因此,在将其加载到非 Excel 目标之前,可能需要使用“派生列”或“数据转换”转换来显式转换 Excel 数据,或在将它加载到 Excel 目标之前,对非 Excel 数据进行转换。 这种情况下,可能需要通过使用导入和导出向导(它将自动配置所需转换)来创建初始包。 下面是一些可能必需的转换的示例:
    • Unicode Excel 字符串列与具有特定代码页的非 Unicode 字符串列之间的转换
    • 在 255 个字符的 Excel 字符串列和不同长度的字符串列之间转换
    • 双精度 Excel 数值列与其他类型的数值列之间的转换

配置 Excel 源

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

有关可以在**“Excel 源编辑器”**对话框中设置的属性的详细信息,请单击下列主题之一:

**“高级编辑器”对话框反映了所有能以编程方式设置的属性。 有关可以在“高级编辑器”**对话框中或以编程方式设置的属性的详细信息,请单击下列主题之一:

有关如何设置属性的详细信息,请单击下列主题之一:

有关循环遍历一组 Excel 文件的信息,请参阅如何循环遍历 Excel 文件和表

请参阅

任务

如何循环遍历 Excel 文件和表

概念

Excel 目标
Integration Services 变量
创建包数据流
64 位计算机上的 Integration Services 注意事项

其他资源

Integration Services 源
Working with Excel Files with the Script Task

帮助和信息

获取 SQL Server 2005 帮助

更改历史记录

发布日期 历史记录

2007 年 9 月 15 日

新增内容:
  • 添加了有关如何使用 64 位计算机运行连接至 Excel 数据源的包的说明。

2006 年 12 月 12 日

新增内容:
  • 添加了有关使用 Excel 2007 数据源的说明。

2005 年 12 月 5 日

更改的内容:
  • 展开并重新编写了“使用注意事项”部分的大多数内容,以阐明已知的问题。