【问题标题】:Producing Excel files in ASP on IIS7.5在 IIS7.5 上用 ASP 生成 Excel 文件
【发布时间】:2011-01-27 10:39:49
【问题描述】:

在我支持的现有 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 服务器是 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 页面运行时才会失败。

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

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

谢谢!

【问题讨论】:

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


    【解决方案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,否则它将继续运行。

    【讨论】:

    • 干杯。目前我们已经切换到使用 Excel XML,因此不再需要 Excel.Exe。但是,我很快就会回去尝试您的建议,看看这是否适用于将来的参考。
    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 2016-11-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-12-12
      • 1970-01-01
      • 2015-07-08
      相关资源
      最近更新 更多