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

在支持的现有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 

问题是,如果我使用上面的代码创build一个简单的.vbs文件并运行它,它将按预期工作。 只有在ASP页面运行时才会失败。

该文件夹试图写入应该有正确的权限(我添加了“所有人”,具有完全访问权限)。

有没有人有任何build议,为什么发生这种情况?

谢谢!

首先,我会从您要写入的文件夹中删除Everyone群组,这就为将来的一天打开一个潜在的安全头痛。

有几种不同的方法可以将您的站点configuration为进行身份validation,这将确定Excel COM服务器将以何种身份启动。

但是,不要全部通过它们,而是创build一个脚本来做到这一点:

 <% 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 %> 

打开任务pipe理器,select“进程”选项卡。 确保启用“显示来自所有用户的进程”,并按“映像名称”对进程进行sorting。

浏览到上面的脚本,你会看到Excel.exe出现在进程列表中:

在这里输入图像说明

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

当你这样做,你将需要手动杀死Excel.exe因为它会继续运行,否则。

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