2017-03-02 7 views
2

複数のExcel形式ファイル(.xlsx)をSQLにロードしようとしています。私はその後のように私のパッケージをセットアップしました。私のExcelファイル名とシート名は毎日SSISを使用して動的ExcelシートがSQLにロードされる

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. フォルダパス:Z:\Users\darsftp\BDS\GBRTest
  3. ExtProperties:"Excel 12.0;HDR=Yes"

を動的にダイナミックシート名で毎日ファイルを拾うために

を助けが必要です。

ダイナミックファイル名ではなく動的シート名でファイルを取得する方法は分かっています。それが問題の原因です。

+1

... http://stackoverflow.com/questions/4444169/import-data-これを試してみてくださいfrom-excel-using -sis-without-knowing-sheet-name – manderson

答えて

0

は、新しい変数Sheetnameを作成し、それがTrueにプロパティEvaluate as expressionだ設定し、次の式を使用します。そのZ:\Users\darsftp\BDS\GBRTest\PROD File Tracking 02-10.xlsxそうSheetname変数値は02-10$ウィッヒになりますあなたのFilename変数の値がシート名であれば

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

を。

そして、あなたのエクセルソース

Sheetname変数サイドノートからシート名をお読みください。Excelのシート名は常に$記号(これは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\";" 

データフロータスクの設定DelayValidationプロパティをTrueに。

お役立ちリンク

+0

ご回答ありがとうございますが、私はそれを試してみるとこのエラーが出ます: HRESULTからの例外:0xC02020E8 BDSEntityErrorIndicatorでエラーが発生しました[接続マネージャー「Excel Connection Manager」]:接続文字列形式が無効です。セミコロンで区切られたX = Yという形式の1つ以上のコンポーネントで構成されている必要があります。このエラーは、コンポーネントがゼロの接続文字列がデータベース接続マネージャーに設定されている場合に発生します。 –

+0

@SyedJafriこのエラーはシート名からのエラーではありません。これはあなたが使用している接続文字列の式です。あなたは動的なファイル名でファイルを拾う方法を知っていると言ったので、私の答えはシート名を動的に設定する方法でした。 – Hadi

+0

@SyedJafri私は自分の答えを更新しました – Hadi