SQL Server-VBScript:在SQL作业中打开Excel文件的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无法访问文件

关于

现在我尝试从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文件),我们将不胜感激。谢谢大家的支持


有什么想法吗

另一种观点

Excel非常擅长在控制台上弹出对话框,然后挂起,直到用户执行操作。这在服务器上是一件非常糟糕的事情,因为它会冻结进程并泄漏正在运行的excel实例。它还要求您在服务器上安装excel


通常,您最好通过代理安排SSIS作业,该代理通过OLEDB驱动程序读取电子表格,然后在服务器端作业上复制计算。宏到底做什么

在我的一天中,我在Excel源代码上做了一些ETL工作,并且(我认为)处理Excel数据的最佳方法是避免不惜一切代价调用
Excel.EXE
。挂起COM引用非常挑剔,因此在处理创建的所有COM对象时必须非常小心。在某些情况下,默认引用(工作表、工作簿、范围等)会在后台创建不透明的引用,而这些引用实际上无法通过编程进行整理,因为类型库不提供任何工具来进行整理

NET主互操作程序集会增加额外的复杂性,因为它们生成自己的引用,这些引用也必须显式地整理。COM和.Net之间存在着明显的阻抗不匹配现象,以至于有几本书都是关于如何使COM和.Net组件很好地协同工作的

幸运的是,WSH不涉及.Net,但我不建议在DBMS中进行Excel COM服务器上的COM远程处理

两种更安全的方法

  • 在OLEDB驱动程序中打开工作簿-将工作表读入暂存表,然后从中提取数据表单。这甚至不需要在服务器上安装Excel,而且非常健壮

  • 解开.xlsx zip文件并从中取出工作表-这实际上比您想象的效果更好。
    sheetxx.xml
    文件的格式非常简单,您可能需要的唯一其他东西是
    sharedStrings.xml
    。通常,如果您有可用的SSI,则不需要使用SQL Server执行此操作,但如果您在非Windows主机上使用(例如)Oracle,则这是一个非常有用的技巧

  • 编辑: 为了通过OLE自动化使用Excel,您需要在运行Excel的计算机上安装Excel。一般来说,在服务器上安装Excel不是一个好计划,因为它不是特别安全。它也是一个桌面工具,如果你不在COM引用的创建和处理过程中点I和交叉t,它有泄漏COM引用和运行Excel实例的倾向

    SSIS有一个excel数据源。您可以通过在BIDS中创建SSIS项目并创建新的连接管理器来查看它。其中一个选项是Excel

    但是,如果需要查询sharepoint列表,最好不用Excel,通过编程进行查询。google fu应该提供一些如何实现这一点的示例,例如。您可以通过独立的.Net应用程序或SSIS包中的脚本任务(脚本任务是可以在SSIS包中生成的.Net自定义任务)来执行此操作


    如果这样做,最好在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