使用 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)
如何遍历 Excel 文件并使用 SSIS 包将它们加载到数据库中?