2015-02-11 66 views
1

大家晚上好。 我必須建立一個SSIS包做如下:將VBA代碼應用於來自SSIS的Excel文件

1)執行一個VBA代碼到一個XLS文件(移調的範圍到另一個範圍) 2)保存XLS(在相同的文件或作爲新的文件) 3)從轉置範圍導入修改後的XLS。

基本上我要轉,我必須導入XLS裏面的數據,我沒有找到一個很好的辦法做到在SSIS(由於列範圍可以將文件之間切換)

有了這個簡單VBA腳本我可以做到這一點,並使SSIS以非常直接的方式讀取數據。但是,我沒有找到一種方法來應用此代碼,而無需手動修改Excel來添加腳本並運行VBA腳本。我想自動執行此操作,以便軟件包準備xls,提取新數據並將其保存到表中。

任何人都可以談談如何應用此代碼或其他方式來做到這一點?我認爲最重要的一點是這是一個非常具體的範圍,我想轉置。

Sub myTranspose() 
    With Range("a18:ZZ27", Range("a18:ZZ27").End(xlDown)) 
     .Copy 
     Range("a30").PasteSpecial Transpose:=True 
    End With 
End Sub 
+0

列範圍是否以可預測的方式在文件之間變化?如同一樣,一種類型的文件總是有3列,而另一種則有6個。我問,因爲這可能會使一個更簡單的解決方案。 – sorrell 2015-02-12 07:26:09

+0

不,這些文件不斷更改列數,因爲它們是使用有關年份和月份的數據生成的自動文件。所有這些數據都在列上而不是行上。而今年他們有一定數量的列,但明年他們會無限增長(增加到當前的列數) – 2015-02-12 09:28:34

+0

也許嘗試腳本任務[轉置數據。](http://stackoverflow.com/questions/ 12838403/c-sharp-transpose-method-to-transpose-rows-and-columns-in-excel-sheet)然後保存並導入? – sorrell 2015-02-12 13:08:11

回答

2
  1. 創建一個通過雙擊腳本任務,然後點擊編輯腳本按鈕管道輸送到一個數據流任務

    STask to DFtask

  2. 編輯腳本任務腳本任務。

  3. 添加到Excel和CSHARP引用作爲this answer

  4. 看到添加類似於下面的一些代碼:

    public void Main() 
    { 
        string filepath = @"c:\temp\transpose.xlsx"; 
        Excel.Application xlApp; 
        Excel._Workbook oWB; 
    
        try 
        { 
        xlApp = new Excel.Application(); 
        xlApp.Visible = false; 
        oWB = (Excel.Workbook)xlApp.Workbooks.Open(filepath); 
        Excel.Range fromrng = xlApp.get_Range("B4", "F5"); 
        Object[,] transposedRange = (Object[,])xlApp.WorksheetFunction.Transpose(fromrng); 
        Excel.Range to_rng = xlApp.get_Range("A8", "A8"); 
        to_rng = to_rng.Resize[transposedRange.GetUpperBound(0), transposedRange.GetUpperBound(1)]; 
        to_rng.Value = transposedRange; 
        xlApp.ActiveWorkbook.Save(); 
        oWB.Close(filepath); 
    
        } 
        catch (Exception ex) 
        { 
        //do something 
        } 
    
    Dts.TaskResult = (int)ScriptResults.Success; 
    } 
    
  5. 這讓我在創建示例transpose.xlsx以下結果。 Transpose

+0

這正是我所需要的。非常感謝,我將能夠以新的範圍(例如A8:B12範圍)讀取正確形式的數據和固定列。謝謝!我真的需要犀利的C#(沒有雙關語意)技能,它真的打開了廣泛的選項,不知道C#可以直接與XLS文件一起工作。 – 2015-02-14 13:14:32