2017-03-02 85 views
2

我试图加载到SQL中的多个Excel格式文件(.xlsx)。我已经建立了我的软件包,如下所示。我的Excel文件名和表名日常动态Excel表格加载到SQL使用SSIS

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 

的变量将变化值

  1. 文件名:Z:\Users\darsftp\BDS\GBRTest\PROD File Tracking 02-10.xlsx
  2. FOLDERPATH:Z:\Users\darsftp\BDS\GBRTest
  3. ExtProperties:"Excel 12.0;HDR=Yes"

需要帮助

要动态每天拿起文件与动态表名称。

我知道如何挑选动态文件名但不包含动态表名的文件。那是我遇到问题的地方。

+1

尝试了这一点... http://stackoverflow.com/questions/4444169/import-data- from-excel-using-ssis-without-know-sheet-name – manderson

回答

0

创建一个新变量Sheetname并设置其属性Evaluate as expressionTrue并使用下面的表达式:

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$至极是SHEETNAME。

而在你Excel源读取变量Sheetname

旁注的SHEETNAME:Excel中SHEETNAME总是$签署最终(它不会出现在Excel中)

了解更多关于变量和在this article

EDIT表达式1

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

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

设置为True数据流任务的DelayValidation财产。

有用的链接

+0

非常感谢您的回复,但是当我尝试: 异常来自HRESULT:0xC02020E8 BDSEntityErrorIndicator [连接管理器“Excel连接管理器”]错误:连接字符串格式无效。它必须包含一个或多个X = Y形式的组件,用分号分隔。在数据库连接管理器上设置具有零组件的连接字符串时,会发生此错误。 –

+0

@SyedJafri此错误不是来自工作表名称。它正在使用您正在使用的连接字符串表达式。你说'我知道如何使用动态文件名来获取文件',所以我的答案是如何动态设置表名称 – Hadi

+0

@SyedJafri我更新了我的答案,看一看 – Hadi