使用 SSIS 将动态 Excel 表格加载到 SQL 中

Posted

技术标签:

【中文标题】使用 SSIS 将动态 Excel 表格加载到 SQL 中【英文标题】:Dynamic Excel Sheets load into SQL using SSIS 【发布时间】:2017-03-02 19:00:48 【问题描述】:

我正在尝试将多个 excel 格式文件 (.xlsx) 加载到 sql 中。我已经按照以下方式设置了我的包裹。我的 excel 文件名和工作表名每天都会改变

File name: PROD File Tracking 02-10.xlsx - Month and Day change daily
Sheet name: 2-10$ -- month and day change daily

包结构

For each Loop Container -> Data Flow Task -> Excel Source -> OLE DB Destination

变量值

    文件名:Z:\Users\darsftp\BDS\GBRTest\PROD File Tracking 02-10.xlsx 文件夹路径:Z:\Users\darsftp\BDS\GBRTest ExtProperties:"Excel 12.0;HDR=Yes"

需要帮助

每天使用动态工作表名称动态提取文件。

我知道如何获取具有动态文件名但不具有动态工作表名称的文件。这就是我遇到问题的地方。

【问题讨论】:

试试这个...***.com/questions/4444169/… 【参考方案1】:

创建一个新变量 Sheetname 并将其属性 Evaluate as expression 设置为 True 并使用以下表达式:

REPLACE(SUBSTRING(@[User::Filename],FINDSTRING(@[User::Filename],"PROD File Tracking", 1 ) + LEN("PROD File Tracking"),100),".xlsx","") + "$"

因此,如果您的Filename 变量值为Z:\Users\darsftp\BDS\GBRTest\PROD File Tracking 02-10.xlsx,那么Sheetname 变量值将是02-10$,即工作表名称。

并在您的 Excel 源代码 中从变量 Sheetname 中读取工作表名称

旁注:Excel 工作表名称始终以 $ 符号结尾(它不会出现在 excel 中)

在this article中阅读有关变量和表达式的更多信息

编辑 1

您必须在Excel connection manager 连接字符串属性中添加一个表达式:

"Provider=Microsoft.ACE.OLEDB.12.0;Data Source="+ @[User::Filename] + ";Extended Properties=\"Excel 12.0;HDR=YES\";"

将数据流任务的DelayValidation 属性设置为True。

有用的链接

SSIS with variable excel connection manager Dynamically assign filename to excel connection string https://www.google.com.lb/amp/s/sqlserverrider.wordpress.com/2013/01/07/dynamic-file-name-for-excel-connection-manager-ssis/amp/

【讨论】:

感谢您的回复,但当我尝试这样做时出现此错误: HRESULT 异常:BDSEntityErrorIndicator [连接管理器“Excel 连接管理器”] 出现 0xC02020E8 错误:连接字符串格式无效.它必须由一个或多个 X=Y 形式的组件组成,用分号分隔。在数据库连接管理器上设置零组件的连接字符串时会发生此错误。 @SyedJafri 此错误不是来自工作表名称。它来自您正在使用的连接字符串表达式。你说I know how to pick up files with a dynamic file name 所以我的回答是关于如何动态设置工作表名称 @SyedJafri 等待您的回复 :)

以上是关于使用 SSIS 将动态 Excel 表格加载到 SQL 中的主要内容,如果未能解决你的问题,请参考以下文章

将超过 255 个字符从 excel 导入到 sql server(上一个问题 - 如何使用 ssis 将文本限定 CSV 动态加载到 sql server)

SSIS - 将Excel与数据库进行比较

使用 SSIS 加载最新的 Excel 文件:脚本任务调试

如何遍历 Excel 文件并使用 SSIS 包将它们加载到数据库中?

将数据从平面文件加载到 Sql Server 表,并使用 SSIS 导出到 excel

SSIS失败时失败