SQL Server-VBScript:在SQL作业中打开Excel文件的VBScript失败?
关于 现在我尝试从SQL作业运行vbscript。虽然我成功地执行了作业,但它并没有打开我的excel文件(选中任务计划程序)。我去查看这份工作的历史记录,发现 信息 以用户身份执行:GSOPS4\SYSTEM。Microsoft(R)Windows脚本主机版本5.7版权所有(C)Microsoft Corporation。保留所有权利。C:\WINDOWS\system32\TestTOPTMay307.vbs(5,1)Microsoft Excel:Microsoft Excel无法访问文件“\gsops4\data\u extracts\TestTOPTMay307.xlsm”。有几个可能的原因:文件名或路径不存在。另一个程序正在使用该文件。您试图保存的工作簿与当前打开的工作簿同名。进程退出代码0。这一步成功了 我也遵循了本文中的建议 然而,我无法让它工作。这件事已经困扰了我48小时了。如果您能提供任何线索,了解是什么原因造成的,以及如何成功执行作业(从SQL运行vbscript文件),我们将不胜感激。谢谢大家的支持SQL Server-VBScript:在SQL作业中打开Excel文件的VBScript失败?,excel,vba,sql-server-2008,vbscript,sql-job,Excel,Vba,Sql Server 2008,Vbscript,Sql Job,关于 现在我尝试从SQL作业运行vbscript。虽然我成功地执行了作业,但它并没有打开我的excel文件(选中任务计划程序)。我去查看这份工作的历史记录,发现 信息 以用户身份执行:GSOPS4\SYSTEM。Microsoft(R)Windows脚本主机版本5.7版权所有(C)Microsoft Corporation。保留所有权利。C:\WINDOWS\system32\TestTOPTMay307.vbs(5,1)Microsoft Excel:Microsoft Excel无法访问文件
有什么想法吗 另一种观点 Excel非常擅长在控制台上弹出对话框,然后挂起,直到用户执行操作。这在服务器上是一件非常糟糕的事情,因为它会冻结进程并泄漏正在运行的excel实例。它还要求您在服务器上安装excel
通常,您最好通过代理安排SSIS作业,该代理通过OLEDB驱动程序读取电子表格,然后在服务器端作业上复制计算。宏到底做什么 在我的一天中,我在Excel源代码上做了一些ETL工作,并且(我认为)处理Excel数据的最佳方法是避免不惜一切代价调用
Excel.EXE
。挂起COM引用非常挑剔,因此在处理创建的所有COM对象时必须非常小心。在某些情况下,默认引用(工作表、工作簿、范围等)会在后台创建不透明的引用,而这些引用实际上无法通过编程进行整理,因为类型库不提供任何工具来进行整理
NET主互操作程序集会增加额外的复杂性,因为它们生成自己的引用,这些引用也必须显式地整理。COM和.Net之间存在着明显的阻抗不匹配现象,以至于有几本书都是关于如何使COM和.Net组件很好地协同工作的
幸运的是,WSH不涉及.Net,但我不建议在DBMS中进行Excel COM服务器上的COM远程处理
两种更安全的方法
sheetxx.xml
文件的格式非常简单,您可能需要的唯一其他东西是sharedStrings.xml
。通常,如果您有可用的SSI,则不需要使用SQL Server执行此操作,但如果您在非Windows主机上使用(例如)Oracle,则这是一个非常有用的技巧如果这样做,最好在SSIS之外开发它(如果没有其他选项,请使用Visual C#Express),然后将其移植到脚本任务。如果您熟悉Python,IronPython或Boo是交互式使用.Net API来实现工作的绝佳工具。您真的想使用VBS从SQL Server作业中打开Excel吗?为什么?任何需要任何类型的对话框或UI的东西在SQL Server上都无法正常工作。您还应该检查路径,`\gsops4\…`似乎不正确。我打赌这是权限错误。但是@AaronBertrand有第一个问题,没有有效的路径。除非该文件位于C:\gsops4\data\U extracts中,即使这样,通常也会指定完整路径。通常,如果可能的话,我会尽量避免在任何无头进程中使用EXCEL.EXE。有关从电子表格中提取数据的替代方案的建议,请参见下面的答案。@Aaron-我的Excel vba代码是完全自动化的,完全不需要人工干预。我运行vbScript代码,通过命令行成功执行excel vba。文件路径已存在。我想知道我无法从SQL作业访问操作系统资源。我甚至尝试创建代理帐户并使用它访问文件路径,但失败。@Nemo什么样的文件路径是
\gsops4\
?这不应该是\\gsops4\
?或者更好的是一个本地路径(因为试图通过网络实现这一点只是又一个让你痛苦的变量)?宏到底做了什么?它刷新iqy数据并将其输入Act