Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/68.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
Sql MS Excel:在VBA中使用Shell将SSIS包作为工作表中的嵌入对象运行_Sql_Excel_Ssis_Powerquery - Fatal编程技术网

Sql MS Excel:在VBA中使用Shell将SSIS包作为工作表中的嵌入对象运行

Sql MS Excel:在VBA中使用Shell将SSIS包作为工作表中的嵌入对象运行,sql,excel,ssis,powerquery,Sql,Excel,Ssis,Powerquery,我正在努力实现的目标: 我想通过按下绑定到VBA宏的按钮将Excel表上载到SQL Server数据库表 我希望宏在继续之前等待进程完成 我当前的方法: 目前,我有一个SSIS包作为对象嵌入在绑定到宏的按钮后面的单元格中。我的宏在这一阶段相当粗糙,因为我仍在试图找出如何在默认应用程序中不打开SSIS包的情况下运行SSIS包 我希望它通过shell脚本在后台运行。宏将等待shell脚本发出的上传成功的信号,然后继续。我以前将SSIS包作为外部文件运行,并运行shell(这很有效);但是,我真的希望

我正在努力实现的目标: 我想通过按下绑定到VBA宏的按钮将Excel表上载到SQL Server数据库表

我希望宏在继续之前等待进程完成

我当前的方法: 目前,我有一个SSIS包作为对象嵌入在绑定到宏的按钮后面的单元格中。我的宏在这一阶段相当粗糙,因为我仍在试图找出如何在默认应用程序中不打开SSIS包的情况下运行SSIS包

我希望它通过shell脚本在后台运行。宏将等待shell脚本发出的上传成功的信号,然后继续。我以前将SSIS包作为外部文件运行,并运行shell(这很有效);但是,我真的希望它包含在Excel文件中

我的代码:

Sub UpdateGroupsMacro()
ActiveWorkbook.Save
ActiveSheet.Shapes.Range(Array("Object 1")).Select
Selection.Verb Verb:=Activate
' Shell ("DTEXEC.EXE /F " & ActiveWorkbook.FullName & "\xl\embeddings\oleObject1.bin""") <---This wasn't working even when I went one level deeper.
Application.Wait (Now + TimeValue("00:00:01"))
Worksheets("Macro").ListObjects("GetGroupsTableCount").Refresh
End Sub
Sub-UpdateGroupsMacro()
活动工作簿。保存
ActiveSheet.Shapes.Range(数组(“对象1”))。选择
选择。动词:=激活

'Shell(“DTEXEC.EXE/F”&ActiveWorkbook.FullName&“\xl\embeddings\oleObject1.bin”“”)我真的不想在这里愚弄社区。理想情况下,我只需要从Select(ActiveWorkbook.FullName&Range(“我的数据表”)中插入一个PowerQuery到[databaseServer].[schema].[MyTable].但是,唉,这可不是那么容易的。只是回头看看。Bueller?Bueller?…Bueller?…几个问题。您是否试图从试图运行包的同一excel文档加载数据?什么是“ActiveWorkbook.FullName”在您的shell命令中?当您打开Excel文档时,您实际上是在使用一个副本。硬盘上的文件实际上并没有更新或更改-它只是在您保存它时被您正在使用的副本替换。因此,一旦它被保存,其他应用程序也可以打开一个副本并访问其中的更新信息。我正在对其进行更改/更新工作表中的一个表,然后正在更新数据库中的设置。因此,您将在开始时注意到,保存工作簿是为了让SSIS包可以访问表中更新的值。您是对的,我想当SSIS尝试访问您当前打开的excel文件时,您会遇到这个问题,但您不会。通过命令行执行SSIS并使用DTEXEC.EXE,它需要.dtsx文件的路径来执行,并且嵌入到excel中,我认为这不起作用。我认为解决这一问题的唯一方法是在宏中,基本上临时导出嵌入的对象,然后运行DTEXEC.EXE并将其传递到临时位置/文件,然后删除当它完成的时候。