如何使用ssis动态创建excel文件

时间:2017-07-11 19:39:31

标签: excel ssis

我已经设置了一个sql任务,它将完整的名称结果集加载到一个对象变量中,我将它连接到一个foreach循环,逐行扫描整个对象。我不确定接下来的步骤。如果我可以创建一个数据流任务,并以某种方式设置目标变量等于每个循环映射变量,这将是很好的。有小费吗?

1 个答案:

答案 0 :(得分:0)

根据您的描述,您需要做的就是:

1:execute SQL task返回您已经拥有的Excel文件名列表。

  1. 将输出连接到Foreach Loop Container并开始迭代每个名称。

  2. 在容器内部,您需要的第一个任务是Script Task,用于创建每个Excel文件。

  3. 我认为excel格式对于您需要填充的所有内容都是相同的。您需要创建一个具有指定所需列标题名称的新模板。

  4. 对于script task,将容器中的映射变量作为read only变量,您需要创建另一个变量,将其设置为read and write,假设它被命名为A;用于存储每个动态excel文件路径,并编辑脚本。

  5. 如果您熟悉C#,则每个迭代名称的Copy模板都很容易。

  6. 代码将是这样的:

    Using System.IO;
    ...
    ...
    ...
    string source = "C:\\template.xlsx";//need to be a full path
    string target = "C:\\" + Dts.Variables["that read only variable"].Value.Tostring() + ".xlsx"
    File.Copy(source,target );
    Dts.Variables["A"].Value = target;   //important!
    
    1. Script task之后,需要一个约束数据流任务,在其中,您需要一个excel destination,棘手的部分是(1):您需要设置动态ExcelFile path excel connection manager的属性,我建议第一次使用现有的Excel来缓存映射,然后对于动态连接部分,选择A,这是read and write变量来自script task 1}}。

    2. 要将数据填充为Excel,您需要将所有varchar类型转换为nvarchar,这可以使用derived columndata conversion <来完成/ p>

    3. 最后但同样重要的是,为delay validationTRUE和整个connection manager设置excel destinationdata flow task,这非常重要动态过程。

    4. 以上所述可能只是一个简短的解释,但这是主要的想法。

      PS:(1)Excel在SSIS中非常挑剔,如果您没有安装数据访问引擎,可能无法成功填充数据。对于excel,可能需要.JET(较旧)或.ACE(较新)提供商。

      (2)如果您的标题行不仅仅位于第1行,您可能还需要考虑OPENROWSET属性。