2015-02-11 70 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