如何在SSIS中加载多张Excel文件,并在床单中使用标头信息



我有一个带有2张纸的文件。其中包含标题信息。我尝试foreach循环容器加载数据我得到的错误是:[ssis.pipeline]错误:" excel source"失败验证并返回验证状态" vs_needsnewmetadata"。

我尝试手动从床单手动卸下标头行,然后乘foreach循环容器,它工作得很好。

,但根据我的要求,我将在每个纸上进行空白行。在这种情况下,我该怎么办。我相信我们需要使用脚本任务来消除标头,并从文件中遵循Null行并阅读其余记录。

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

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

以下脚本任务将从文件中的每个工作表中删除前2行(您需要在SSIS中创建变量'excelfilepath',然后将其传递给任务,并将其传递给任务使用"系统:: taskname'):

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'>" Microsoft Excel [版本号]对象库'(您拥有的版本)和'.net'>'Microsoft.csharp'。然后,您需要在"名称空间"区域中声明using xl = Microsoft.Office.Interop.Excel;

最新更新