在IIS7.5上使用ASP生成Excel文件

问题描述:

在支持的现有Web应用程序中,有一个页面用于为某些数据生成Excel电子表格。 Web服务器安装了Excel 2002(这么旧......),并使用Excel对象的自动化来完成这项工作。在IIS7.5上使用ASP生成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服务器是Windows 2003服务器,运行IIS6,一切工作愉快。但是,我们正在升级到使用Windows 2008服务器,运行IIS7.5并且上述代码不再有效。返回的消息如下:

Microsoft Excel error '800a03ec' 

SaveAs method of Workbook class failed 

xxxxxx/Test_Excel.asp, line 42 

的事情是,是,如果我创建一个简单的.vbs文件,与上面的代码并运行它,这一切都按预期工作。只有在ASP页面运行时才会失败。

它试图写入的文件夹应具有正确的权限(我向其添加了“Everyone”,并具有完全访问权限)。

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

谢谢!

首先,我会从您尝试写入的文件夹中删除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,否则它会继续运行。

+0

干杯。目前我们已经切换到使用Excel XML,因此不再需要Excel.Exe。不过,我会尽快回去尝试你的建议,看看这是否适用于未来的参考。 – 2011-02-21 11:01:15

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