2017-09-19 12 views
0

ファイルが2枚あります。その中にヘッダー情報があります。私はforeachループコンテナにデータをロードしようとしました エラー: [SSIS.Pipeline]エラー: "Excelソース"が検証に失敗し、 "VS_NEEDSNEWMETADATA"という検証ステータスが返されました。SSISでシートのヘッダー情報を含む複数のExcelファイルをロードする方法

シートから手動でヘッダ行を削除してforeachループコンテナを実行しようとしましたが、完全に正常に動作しました。

私の要件では、私は各シートの空白行に続いてヘッダー行を取得します。 この場合、どうすればいいですか? 私は、スクリプトタスクを使用して、ヘッダーを削除し、ファイルからヌル行を追跡し、残りのレコードを読み取る必要があると考えています。

私の問題は、私はC#のコードロジックで悪いです。

お手数をおかけします。 ありがとう、 swathi

答えて

0

次のスクリプトタスクと一緒に、あなたはSSISで変数「ExcelFilePath」を作成し、タスクへのそれを渡す必要があります(ファイル内のすべてのワークシートから、トップ2行を削除します'システム:: TaskName:指定'):

public void Main() 
{ 
    MainTask(); 

    GC.Collect(); 
    GC.WaitForPendingFinalizers(); 
} 

private void MainTask() 
{ 
    xl.Application xlApp = null; 
    xl.Workbook excelFile = null; 
    string excelFilePath = Dts.Variables["User::ExcelFilePath"].Value.ToString(); 
    string thisTask = Dts.Variables["System::TaskName"].Value.ToString(); 

    try 
    { 
     xlApp = new xl.Application(); 

     excelFile = xlApp.Workbooks.Open(excelFilePath); 

     xlApp.DisplayAlerts = false; 

     foreach (xl.Worksheet ws in excelFile.Worksheets) 
     { 
      ws.Rows["1:2"].EntireRow.Delete(); 
     } 

     xlApp.DisplayAlerts = true; 

     excelFile.Save(); 
     excelFile.Close(); 

     xlApp.Quit(); 

     Dts.TaskResult = (int)ScriptResults.Success; 
    } 

    catch (Exception ex) 
    { 
     Dts.Events.FireError(0, thisTask, ex.Message, String.Empty, 0); 

     if (excelFile != null) excelFile.Close(SaveChanges:false); 
     if (xlApp != null) xlApp.Quit(); 
    } 
} 

あなたは 'COM' に参照を追加する必要があります> 'Microsoft Excelの[バージョン番号]オブジェクトライブラリ'(あなたが持っている方のバージョン)と '.NET'>「マイクロソフト。Cシャープ'。次に、 '名前空間'領域にusing xl = Microsoft.Office.Interop.Excel;を宣言する必要があります。

関連する問題