2011-01-27 79 views
1

在支持的現有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」,並具有完全訪問權限)。

有沒有人有任何建議,爲什麼會發生這種情況?

謝謝!

回答

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,否則它會繼續運行。

+0

乾杯。目前我們已經切換到使用Excel XML,因此不再需要Excel.Exe。不過,我會盡快回去嘗試你的建議,看看這是否適用於未來的參考。 – 2011-02-21 11:01:15

0

我唯一可以推薦的是在IIS7中檢查您的應用程序池。在應用程序池的高級設置中,您可能必須將身份帳戶更改爲其中一個內置插件。默認情況下,在IIS7.5 +中,動態帳戶與應用程序池的名稱一起使用,並以名稱顯示在任務管理器中。