ASP Excel.Application对象范围(“范围”)冻结

ASP Excel.Application对象范围(“范围”)冻结,excel,asp-classic,vbscript,Excel,Asp Classic,Vbscript,每当我使用这个代码 Set oExcel = CreateObject("Excel.Application") Set oWorkbook = oExcel.Workbooks.Open(sPathToTemplate) oExcel.Range("shipping_name").Value = strShippingName oWorkbook.Close() Set oWorkbook = Nothing Set oExcel = Nothing 服务器上的Excel进程处于冻结状态

每当我使用这个代码

Set oExcel = CreateObject("Excel.Application")
Set oWorkbook = oExcel.Workbooks.Open(sPathToTemplate)

oExcel.Range("shipping_name").Value = strShippingName

oWorkbook.Close()
Set oWorkbook = Nothing
Set oExcel = Nothing
服务器上的Excel进程处于冻结状态,单元格永远不会更改。至少看起来是这样

工作簿打开得很好,如果我不尝试更改任何单元格内容,代码将毫无错误地完成。但是,当我重新添加更改并刷新页面时,任务管理器中会出现EXCEL.exe进程,脚本停止响应。我必须手动终止进程才能使其超时


我能做些什么来让代码正常工作?

这可能是因为您没有保存工作簿。在桌面上,这将导致Excel生成“是否保存更改?”对话框

尝试添加

oWorkbook.saved = true
在关闭工作簿之前。这将告诉Excel不要关心工作簿是否已更改(但不会保存文档)。如果asp正常工作,则是“保存”对话框导致了问题。要实际保存更改,您需要调用

oWorkbook.Save
oWorkbook.SaveAs

方法

如果我使用oExcel.Range(“shipping_name”),也会发生同样的情况,我很惊讶您没有得到解析错误,因为您的子例程调用中有括号
oWorkbook.Close()
我认为oWorkbook.Close()返回True或其他内容,这可能就是原因。我知道oExcel.Open(file)返回工作簿,所以我想知道.Close()返回的是什么。无论如何,括号不是函数和子例程之间的问题,而不是方法之间的问题吗?我的问题是,我计划将此工作簿用作模板,并将其另存为一个文件,但我还没有谈到这一部分。我可以用同样的结果进行SaveAs吗?我应该这样认为,只要你的asp对你的web服务器有写访问权,它就可以工作