首页 文章

如何使用ssis 2008循环遍历excel文件并获取sheetname

提问于
浏览
2

我正在尝试从excel文件加载数据,其中一个非静态的工作表名称(工作表名称包含yyyymmdd,它将随每个文件而变化)到SQL数据库表中 . 我按照How to loop through Excel files and load them into a database using SSIS package?上提供的解决方案,但只能设法获得第一个for循环工作 . 当我'm trying to assign the user variable ' Sheetname ' to Excel Source under the Data Flow task, I' m得到错误 -

CSSN_Invoice出现错误[连接管理器“TEST MKBS CONNECTION”]:SSIS错误代码DTS_E_OLEDBERROR . 发生OLE DB错误 . 错误代码:0x80004005 . OLE DB记录可用 . 来源:“Microsoft Access数据库引擎”Hresult:0x80004005描述:“无效的参数 . ” . 数据流任务错误[MKBS Sheetname [1]]:SSIS错误代码DTS_E_CANNOTACQUIRECONNECTIONFROMCONNECTIONMANAGER . AcquireConnection方法调用连接管理器“TEST MKBS CONNECTION”失败,错误代码为0xC0202009 . 在此之前可能会发布错误消息,其中包含有关AcquireConnection方法调用失败原因的更多信息

将工作表名称选为“表或视图”而不是“表名或视图名称变量”时,数据流任务正常工作

请帮忙 !

1 回答

  • 0

    创建数据流任务以将工作表名称读入ADO对象 .

    Data flow

    第一项是脚本组件作为源 . 我有一个连接到Excel电子表格的连接字符串的变量

    connstr

    创建了SheetName的输出

    Output Setup

    这是读取标签名称的代码:
    C#

    您基本上是使用oleDB打开电子表格 . 将表名放入数据表中

    循环遍历数据表并写出要输出的行 .

    一定要关闭连接!如果不这样做,这可能会导致错误 .

    下一步是条件拆分,因为某些原因结果有选项卡名称的重复,它们都以'_'结尾 .

    Conditional Split

    下一步是派生一个列来清理exta“'”的工作表名称

    DerivedCol

    创建一个Object类型的变量:我命名为我的ADO_Sheets

    插入记录集目标对象:1 . 将变量设置为刚刚创建的变量2.映射干净工作表的列

    现在回到控制流并设置一个foreach循环控件:
    enter image description here

    配置foreach ...枚举器:Foreach ADO枚举器源:ADO_Sheets变量映射:设置为名为SheetName的变量

    我在循环中有一个函数任务,但它更容易理解,它可能已经在变量中:
    SQL

    此变量现在是您从该页面中提取数据的选择 .

    最后是您要运行的数据流任务 .

    Lot's of work, but I use this so often I thought I would share!!!

相关问题