【问题标题】:How to loop through excel file and get sheetname using ssis 2008如何使用 ssis 2008 遍历 excel 文件并获取工作表名称
【发布时间】:2017-12-19 05:18:04
【问题描述】:

我正在尝试将具有非静态工作表名称的 Excel 文件中的数据(工作表名称包含 yyyymmdd 会随每个文件更改)加载到 SQL 数据库表中。我遵循How to loop through Excel files and load them into a database using SSIS package? 提供的解决方案,但只能设法让第一个 for 循环工作。当我尝试在数据流任务下将用户变量“Sheetname”分配给 Excel 源时,出现错误 -

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。对连接管理器“TEST MKBS CONNECTION”的 AcquireConnection 方法调用失败,错误代码为 0xC0202009。在此之前可能会发布错误消息,其中包含有关 AcquireConnection 方法调用失败原因的更多信息

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

请帮忙!

【问题讨论】:

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


【解决方案1】:

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

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

创建了 SheetName 的输出

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

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

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

确保关闭连接!!!如果您不这样做,这可能会在以后导致错误。

下一步是有条件的拆分,因为由于某种原因,结果中有重复的选项卡名称,并且它们都以“_”结尾。

下一步是派生一列来清除 exta "'" 的工作表名称

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

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

现在回到控制流并设置一个 foreach 循环控制:

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

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

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

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

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

【讨论】:

  • 您好 KeithL,感谢您的回复。据我了解,您的解决方案是从 excel 文件中获取 Sheetname。我的问题不在于无法检索 Sheetname,而是可以使用我在原始问题中提供的链接来完成。我的问题是当我尝试在我的数据流任务下将该变量分配给 excel 源时。我也遵循了您的解决方案,但在脚本组件上出现错误 - 初始化字符串的格式不符合从索引 0 开始的规范。我完全按照您提到的方式进行了操作。另外,我使用的是 SSIS 2008。
  • 您的问题似乎是您如何使用选项卡名称。尝试将任何表达式放在使用带有表名的变量创建 sql 语句的变量上。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-12-26
  • 2019-04-11
  • 1970-01-01
  • 1970-01-01
  • 2021-04-10
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多