在IIS7.5上的ASP中生成Excel文件

时间:2011-01-27 10:39:49

标签: excel asp-classic windows-server-2008 iis-7.5

在我支持的现有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”,具有完全访问权限。)

有没有人对为什么会这样做有任何建议?

谢谢!

2 个答案:

答案 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出现在进程列表中:

enter image description here

在第三列中,您将看到运行Excel的标识。这是需要对c:\Temp文件夹具有写入权限的帐户。

执行此操作时,您需要手动终止Excel.exe,因为它会继续运行。

答案 1 :(得分:0)

我唯一可以推荐的是检查IIS7中的应用程序池。在应用程序池的高级设置中,您可能必须将身份帐户更改为其中一个内置插件。默认情况下,在IIS7.5 +中,动态帐户与应用程序池的名称一起使用,它将显示在任务管理器中,并带有名称。