使用SSIS加载不同格式的Excel文件

时间:2013-07-24 21:09:08

标签: excel ssis

我们遇到一个问题,我们必须加载不同的Excel文件模板,这里是模板

模板#1: 姓名地址城市邮编

模板#2: 姓名城市州地址电话号码

我们不知道我们可以获得什么格式,使用SSIS如何加载列名称动态变化的excel文件?

先谢谢

1 个答案:

答案 0 :(得分:0)

如果您确定只有2种不同的模板类型,您可以按照以下方法进行操作:

  1. 在控制流中创建脚本任务。在引用中添加Microsoft.Office.Interop.Excel库。此任务将用于在开始实际ETL操作之前读取Excel文件。
  2. 创建一个新变量,比如templateType。这将用于显示当前输入文件使用的模板。
  3. 创建2个数据流任务 - 两个不同模板中的每一个都有一个。
  4. 将脚本任务输出连接到数据流。在每个连接中,将优先约束评估类型设置为expression并将表达式设置为@ templateType == ValueToRepresentTemplateType
  5. 使用以下代码编辑脚本任务作为参考:

        //using excel = Microsoft.Office.Interop.Excel;
    
        excel.Application xlapp = null;
        excel.Workbook xlbook = null;
        excel.Worksheet xlsheet = null;
    
        string src = @"filename.xls";
    
        try
        {
            xlapp = new excel.Application();
            xlbook = xlapp.Workbooks.Open(src, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing);
            xlsheet = (excel.Worksheet) xlbook.Worksheets[0];
    
    
            //If fifth cell is empty, template has 4 columns i.e. first template
            excel.Range decider = (excel.Range)xlsheet.Cells[1, 5];
            if (string.IsNullOrEmpty(decider.Text.ToString()))
            {
                Dts.Variables["User::templateType"].Value = 1;//first template
            }
            else
            {
                Dts.Variables["User::templateType"].Value = 2;//second template
            }
    
    xlbook.Close(false);
    xlapp.Quit();
    
        }
        catch (Exception ex)
        {
        }
        finally
        {
            xlsheet = null;
            xlbook = null;
            xlapp = null;
        }
        Dts.TaskResult = (int)ScriptResults.Success;