我有一个带有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;
。