将VBA代码应用于来自SSIS的Excel文件

各位晚上好。 我必须build立一个SSIS包装,如下所示:

1)将VBA代码执行到XLS文件(将范围调换到另一个范围)2)保存XLS(在同一个文件或新文件中)3)从Transposed范围导入已修改的XLS。

基本上我必须转换我必须导入的XLS内的数据,我没有find一个在SSIS中这样做的好方法(因为列范围可以在文件之间更改)

有了这个简单的VBA脚本,我可以做到这一点,使SSIS以一种非常简单的方式读取数据。 但是,我没有find一种方法来应用此代码,而无需手动修改Excel来添加脚本并运行VBA脚本。 我想自动执行此操作,以便包准备xls,提取新数据并将其保存到表中。

任何人都可以提出一些关于如何应用这些代码或其他方法来做到这一点的想法? 我认为最重要的一点是,这是一个非常具体的范围,我想转置。

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

  1. 创buildpipe道到数据stream任务的脚本任务

    STask到DFtask

  2. 通过双击脚本任务并单击编辑脚本button来编辑脚本任务。

  3. 添加引用到Excel和CSharp在这个答案中看到

  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. 这在我创build的示例transpose.xlsx中给出了以下结果。 颠倒