代码之家  ›  专栏  ›  技术社区  ›  SherlockSpreadsheets

SSIS Foreach循环-Excel工作表-“xlnm##U FilterDatabase”(幻影/幻影工作表)

  •  0
  • SherlockSpreadsheets  · 技术社区  · 6 年前

    循环正在找到正确的表( '11-18$' ),然后是名称较长的同一张纸( '11-18$'_xlnm#_FilterDatabase ). 多余的床单导致 data duplication 以及错误消息,例如 "Derived Column.Outputs[Derived Column Output].Columns[SourceSheet]" specifies failure on truncation .

    • 为什么循环会复制图纸数据?

    MSSQLTips博客文章-- Read Data From Multiple Excel Worksheets SSIS

    变量

    • 变量 Name:'Sheet Name' Scope:'Import_AXExtractAgristatsInventory' (包名称), Date type:'String' , Value:'11-18$'

    Foreach循环编辑器

    • 集合枚举器 Foreach ADO.NET Schema Rowset Enumerator

    • 连接提供程序 .Net Providers for OleDb\Microsoft Office 12.0 Access Database Engine OLE DB Provider

    • 是通往 \\filepath\file.XLSX

    • 连接高级扩展属性 Excel 12.0

    • 连接变量映射 Variable:='User:SheetName' , Index:='2'

    • Data Source=C:\filepath\file.xlsx;Provider=Microsoft.ACE.OLEDB.12.0;Extended Properties=Excel 12.0;


    更新: Foreach ADO.NET架构行集枚举器 Set Restrictions

    我以为 设置限制 !=*_FilterDatabase* ,但根据flylib网上的电子书摘录,通配符不是一个选项。。。

    数据库、服务器上的目录或表的列。对于每个 在schema中,可以通过多种方式筛选结果。图13.13 显示Foreach ADO.NET架构行集枚举器编辑器,其中 已选择目录架构。

    无法为限制指定通配符。

    参考文献: Microsoft SQL Server 2005 Integration Services: Stock Foreach Enumerators

    • 图13.14显示了

    更新:调试循环中的值

    为了调试循环中的工作表对象,我终于找到了停止循环并显示工作表名称的方法。我在实用作品博客上找到一篇文章,展示了如何使用 Script Task , Break Point ,和 Watch Window 显示活动循环值-- Looping through resultset with foreach loop .

    enter image description here


    1 回复  |  直到 6 年前
        1
  •  1
  •   SherlockSpreadsheets    6 年前

    所有配置仍在使用中 MSSQLTips blog post Foreach ADO.NET Schema Rowset Enumerator 配置。我加了一点逻辑。。。

    步骤:跳过图纸名称的逻辑

    1. 变量(布尔)-FINDSTRING
      • 当数据流任务是无效的工作表时,我们要停止它。这样做。。。
      • 在“数据流”任务上单击鼠标左键,转到“属性”窗格,在“表达式”部分选择elipse图标(“…”)并选择 Disable '属性,只需为表达式添加变量 '在上一步中创建' @[User::varIsInvalidSheet_DisableTask] '
    2. 运行调试器以验证设置是否生效

    下面是这些步骤的一些屏幕截图

    ssis_task-expression-disable

    ssis_debug-loop-sheet-objects