如何使用工作表中的标题信息在SSIS中加载多个Excel文件

时间:2017-09-19 13:27:44

标签: sql-server excel ssis

我有一个包含2张纸的文件。它有标题信息。我尝试了foreach循环容器来加载数据 我得到的错误是: [SSIS.Pipeline]错误:" Excel来源"验证失败并返回验证状态" VS_NEEDSNEWMETADATA"。

我尝试从工作表中手动删除标题行并运行foreach循环容器,它工作得很好。

但是在我的要求中,我将获得每个工作表中的标题行,后跟空白行。 在这种情况下我该怎么做。 我相信我们需要使用脚本任务来消除标题并从文件中跟随空行并读取其余记录。

我的问题是我对c#代码逻辑不好。

非常感谢您的帮助。 谢谢, swathi

1 个答案:

答案 0 :(得分:0)

以下脚本任务将删除文件中每个工作表的前2行(您需要在SSIS中创建变量' ExcelFilePath'并将其传递给任务,以及'系统:: TASKNAME&#39):

public void Main()
{
    MainTask();

    GC.Collect();
    GC.WaitForPendingFinalizers();
}

private void MainTask()
{
    xl.Application xlApp = null;
    xl.Workbook excelFile = null;
    string excelFilePath = Dts.Variables["User::ExcelFilePath"].Value.ToString();
    string thisTask = Dts.Variables["System::TaskName"].Value.ToString();

    try
    {
        xlApp = new xl.Application();

        excelFile = xlApp.Workbooks.Open(excelFilePath);

        xlApp.DisplayAlerts = false;

        foreach (xl.Worksheet ws in excelFile.Worksheets)
        {
            ws.Rows["1:2"].EntireRow.Delete();
        }

        xlApp.DisplayAlerts = true;

        excelFile.Save();
        excelFile.Close();

        xlApp.Quit();

        Dts.TaskResult = (int)ScriptResults.Success;
    }

    catch (Exception ex)
    {
        Dts.Events.FireError(0, thisTask, ex.Message, String.Empty, 0);

        if (excelFile != null) excelFile.Close(SaveChanges:false);
        if (xlApp != null) xlApp.Quit();
    }
}

您需要添加对COM' COM' > ' Microsoft Excel [版本号]对象库' (无论你有哪个版本)和' .NET' > ' Microsoft.CSharp&#39 ;.然后,您需要在“命名空间”中声明using xl = Microsoft.Office.Interop.Excel;。区域。