Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/28.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
打开Excel的SSIS C#脚本任务导致调用错误_C#_Excel_Ssis_Script Task_Ssis 2017 - Fatal编程技术网

打开Excel的SSIS C#脚本任务导致调用错误

打开Excel的SSIS C#脚本任务导致调用错误,c#,excel,ssis,script-task,ssis-2017,C#,Excel,Ssis,Script Task,Ssis 2017,我有一个SSIS包,它有一个脚本任务,可以从Excel中读取。 我得到以下错误,似乎无法找到问题 调用的目标已引发异常 位于System.RuntimeMethodHandle.InvokeMethod(对象目标,对象[] 参数、签名sig、布尔构造函数)位于 System.Reflection.RuntimeMethodInfo.UnsafeInvokeInternal(对象obj, 对象[]参数,对象[]参数)位于 System.Reflection.RuntimeMethodInfo.In

我有一个
SSIS包
,它有一个脚本任务,可以从
Excel
中读取。 我得到以下错误,似乎无法找到问题

调用的目标已引发异常

位于System.RuntimeMethodHandle.InvokeMethod(对象目标,对象[]
参数、签名sig、布尔构造函数)位于 System.Reflection.RuntimeMethodInfo.UnsafeInvokeInternal(对象obj, 对象[]参数,对象[]参数)位于 System.Reflection.RuntimeMethodInfo.Invoke(对象obj,BindingFlags invokeAttr,绑定器绑定器,对象[]参数,CultureInfo区域性) 在System.RuntimeType.InvokeMember处(字符串名称,BindingFlags bindingFlags、绑定器绑定器、对象目标、对象[]提供的参数、, ParameterModifier[]修饰符,CultureInfo区域性,字符串[] 命名参数)在 Microsoft.SqlServer.Dts.Tasks.ScriptTask.vstatasksscriptingEngine.ExecuteScript()

我已将问题缩小到这两行,在这两行中设置
Excel
应用程序

Excel.Application xlApp;
xlApp = new Excel.ApplicationClass();
似乎是
xlApp
的值设置导致了错误

我正在使用Visual Studio 2017

有人能帮我吗

调用的目标已引发异常

是发生错误时脚本任务引发的常规异常

读取真正的错误消息 要读取主错误消息,可以在代码中添加try-catch子句,并使用Dts.firererror()方法引发真正的异常

public void Main()
{
    try{

        Excel.Application xlApp;
        xlApp = new Excel.ApplicationClass();

        //...rest of code here

        Dts.TaskResult = (int)ScriptResult.Success;

    }catch(Exception ex){

        Dts.FireError(0,"An error occured", ex.Message,String.Empty, 0);
        Dts.TaskResult = (int)ScriptResult.Failure;

    }


}
试图找出问题所在
  • 尝试使用
    Excel.Application
    而不是
    ApplicationClass

    Excel.Application xlApp = new Excel.Application();
    
  • 确保计算机上安装了Microsoft Excel,并且在GAC中注册了互操作程序集


  • 为什么要将SQL Server(Microsoft.SqlServer)与Excel一起使用?我正在从文件夹中读取Excel,但他们倾向于重命名工作表。因此,脚本任务是读取工作表名称,以便它可以正确地从文件中读取。因此,您必须打开每个excel文件“.xls”,然后通过工作表名称进行枚举。之后,我找到了它。该包由用户通过SSMS上的作业运行。我必须在运行包的服务器上的作业中创建运行包的用户。这似乎使它能够访问服务器上的Excel函数。我将它放在一个try/catch块中,并在“无法访问文件”周围出现了一个错误。在try/catch读取Excel的工作表名称后,我将文件移动到另一个位置。奇怪的是,它继续很好地移动文件,但随后在上面触发try的catch子句,表示它无法访问文件?是的,在try/catch结束之前,我执行
    xlApp.Workbooks.Close()
    xlApp.Quit()