1

我有一个在 Windows Server 2012 上运行的非常简单的 VBA 脚本。它创建一个 Excel 对象,写入两个单元格,将工作表另存为 CSV,然后关闭工作簿和应用程序,然后退出 Excel 对象。

这适用于 Server 2003,没有任何问题。

当我在 Server 2012 R2 上运行脚本时,Excel 对象进程继续运行,并且必须通过任务管理器手动终止。

据我了解,Excel 应用程序在Session-0中运行,防止对象被用户会话中运行的脚本关闭。此外,如果我更改脚本以创建文件并保存/关闭对象然后重新打开 Excel 文件,则无法再次写入文件,它位于 Session-0 中。

当脚本运行时,它会在以下错误日志中创建一个错误:

Service Control Manager Event 2073: The Interactive Services Detection 
service terminated with the following error: Incorrect function.

脚本如下:

set fso = CreateObject("Scripting.FileSystemObject")
currDir = fso.GetParentFolderName(Wscript.ScriptFullName)

outputFile = currDir & "\ExcelTest.csv"

set objExcel = CreateObject("Excel.Application")
set ExcelWorkbook= objExcel.workbooks.add()
objExcel.application.visible = false
objExcel.application.displayalerts =false
set objExcelWorksheet = objExcel.worksheets(1)

objExcelWorksheet.Cells(1, 1).Value = "Foo"
objExcelWorksheet.Cells(1, 2).Value = "Bar"


ExcelWorkbook.saveas outputFile,23

ExcelWorkbook.close  false

objExcel.application.quit

objExcel.quit

set objExcel = nothing  

我正在寻找一种方法来强制 Excel 对象在用户会话中打开,或者以某种方式能够控制/访问该 Excel 对象。上面的代码是一个较大脚本的简化片段,它打开和关闭多个 CSV 文件,因此我确实需要访问这些 Excel 对象的能力。

警告:我无权更改注册表,也无权安装任何第三方应用程序。因为我们是一家与医疗保健相关的商店,所以安全性很严格。

4

0 回答 0