在我支持的现有Web应用程序上,有一个页面用于为某些数据生成Excel电子表格。 Web服务器安装了Excel 2002(太旧了......),并使用Excel对象的自动化来完成工作。
我完全清楚微软不建议像这样自动化Excel,但这是目前的工作方式,我从来没有分配任何时间来改变它。
以下是一些示例代码
Dim xlApp, xlBook, xlSheet
'create the Application Object and workbook object
Set xlApp = Server.CreateObject("Excel.Application")
Set xlBook = xlApp.Workbooks.Add
Set xlSheet = xlBook.Worksheets.Add
'turn off any alerts
xlApp.DisplayAlerts = False
xlApp.Visible = False
xlApp.ScreenUpdating = False
xlApp.DisplayFormulaBar = True
xlApp.CommandBars("Standard").Visible = True
xlApp.CommandBars("Formatting").Visible = True
xlApp.CommandBars("Chart").Visible = True
xlApp.CommandBars("Control Toolbox").Visible = True
xlSheet.Cells(1, 1).Value = "Test"
xlApp.ScreenUpdating = True
xlApp.ActiveWorkbook.SaveAs ("C:\Temp\Test.xls"), -4143
xlApp.Quit
Set xlApp = Nothing
Web服务器是运行IIS6的Windows 2003服务器,一切都很愉快。但是,我们目前正在升级到使用Windows 2008服务器,运行IIS7.5并且上面的代码不再有效。返回的消息如下:
Microsoft Excel error '800a03ec'
SaveAs method of Workbook class failed
xxxxxx/Test_Excel.asp, line 42
问题是,如果我使用上面的代码创建一个简单的.vbs文件并运行它,它就会按预期工作。只有在ASP页面运行时它才会失败。
尝试写入的文件夹应该具有正确的权限(我向其添加了“Everyone”,具有完全访问权限。)
有没有人对为什么会这样做有任何建议?
谢谢!
答案 0 :(得分:1)
首先,我要从您尝试写入的文件夹中删除该Everyone
组,这样就会在另一天留下潜在的安全问题。
您的网站可以通过几种不同的方式进行身份验证,这将决定Excel COM服务器将启动的身份。
然而,不是全部完成它们,而是创建一个执行此操作的脚本:
<%
Dim xlApp, xlBook, xlSheet
'create the Application Object and workbook object
Set xlApp = Server.CreateObject("Excel.Application")
Set xlBook = xlApp.Workbooks.Add
Set xlSheet = xlBook.Worksheets.Add
%>
打开任务管理器,选择“进程”选项卡。确保已启用“显示所有用户的进程”,并按“映像名称”对进程进行排序。
浏览到上面的脚本,您会看到Excel.exe出现在进程列表中:
在第三列中,您将看到运行Excel的标识。这是需要对c:\Temp
文件夹具有写入权限的帐户。
执行此操作时,您需要手动终止Excel.exe
,因为它会继续运行。
答案 1 :(得分:0)
我唯一可以推荐的是检查IIS7中的应用程序池。在应用程序池的高级设置中,您可能必须将身份帐户更改为其中一个内置插件。默认情况下,在IIS7.5 +中,动态帐户与应用程序池的名称一起使用,它将显示在任务管理器中,并带有名称。