2017-12-07 10 views
0

私は緩く、次の形式に似ているExcelファイルを持っている(列名が変更します)私は、データフロー内のデータは、それが使用可能な取得を開始するために、非ピボット午前として「重要」:SSIS Excelのインポート

enter image description here

問題は、ファイルが更新されますされて - 年と四半期は(歴史的)削除されます、新しいもの古いものに取って代わりました。つまり、データフローのメタデータは壊れています。

セルの範囲と位置などは常に同じです。

流動性の高いカラム名(2016q1)のデータフローで処理できる方法はありますか?列が順番に残っている場合、あなたはヘッダー行をスキップし、1行目はヘッダーが含まれていない選択することができます

おかげ

答えて

1

あなたは、それはまた、ピボットないとしてこれを好きになるだろう:C#スクリプトコンポーネントのソースを使用して

は、名前空間を追加します。 のSystem.Data.OleDbを使用します。

は、あなたの4つの出力列とsselectデータ型を追加します。

は、新しい行のセクションにコードを追加します。

public override void CreateNewOutputRows() 
    { 
     /* 
      Add rows by calling the AddRow method on the member variable named "<Output Name>Buffer". 
      For example, call MyOutputBuffer.AddRow() if your output was named "MyOutput". 
     */ 
     string fileName = @"C:\test.xlsx"; 
     string SheetName = "Sheet1"; 
     string cstr = "Provider.ACE.OLEDB.12.0;Data Source=" + fileName + ";Extended Properties=\"Excel 12.0;HDR=YES;IMEX=1\""; 

     OleDbConnection xlConn = new OleDbConnection(cstr); 
     xlConn.Open(); 

     OleDbCommand xlCmd = xlConn.CreateCommand(); 
     xlCmd.CommandText = "Select * from [" + SheetName + "]"; 
     xlCmd.CommandType = CommandType.Text; 
     OleDbDataReader rdr = xlCmd.ExecuteReader(); 

     //int rowCt = 0; //Counter 

     while (rdr.Read()) 
     { 
      for (int i = 2; i < rdr.FieldCount; i++) //loop from 3 column to last 
      { 
       Output0Buffer.AddRow(); 
       Output0Buffer.ColA = rdr[0].ToString(); 
       Output0Buffer.ColB = rdr[1].ToString(); 
       Output0Buffer.FactName = rdr.GetName(i); 
       Output0Buffer.FactValue = rdr.GetDouble(i); 
      } 


      //rowCt++; //increment counter 
     } 
     xlConn.Close(); 
    } 
+1

あなたは伝説のキースです!私がしただけの調整は Output0Buffer.ScenarioValue = rdr.IsDBNull(i)== true? 0:rdr.GetDouble(i); – Raymondo

+0

を経由するDBNullに対処するにはこれで完了しますが、nullのレコードを作成したくない場合はif文で出力バッファをラップしますif(!rdr.IsDBNull(i)) – KeithL

0

+0

しかし、これはKeithと言及したように、列は最終的に落ちます。 2016Q1,2016Q2,2016Q3、および2016Q4は次のファイルで削除され、すべてが左にシフトし、四半期の新しい年には右にタグが付けられます。 – Raymondo

関連する問題