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

时间:2017-07-14 07:37:08

标签: sql-server excel ssis etl ssis-2008

我正在尝试从excel文件加载数据,其中一个非静态的sheetname(sheetname包含yyyymmdd,它会随每个文件而改变)到SQL数据库表中。我按照How to loop through Excel files and load them into a database using SSIS package?提供的解决方案,但只能设法获得第一个for循环工作。当我尝试在数据流任务下将用户变量“Sheetname”分配给Excel Source时,我收到错误 -

  

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 :(得分: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

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

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

很多工作,但我经常使用这个,我以为我会分享!!!