稍作修正,之前寫的有一些錯誤,Excel在Server並不會關閉,而且只能在Server執行,Client並不會出現Excel應用程式視窗,視窗反而出現在Server端。
Server端Excel不會關閉(在[工作管理員]→[處理程序]內),可以參考此文章。
這次使用內建的excel.dll來製作excel功能,如下:
Dim xlApp As Application Dim xlBook As Workbook Dim xlSheet As Worksheet Dim xlRange As Range On Error Resume Next xlApp = GetObject(, "Excel.Application") If Err.Number() <> 0 Then Err.Clear() xlApp = CreateObject("Excel.Application") If Err.Number() <> 0 Then errMsg.Text = Err.Description Return End If End If xlBook = xlApp.Workbooks.Open(Server.MapPath("~\報表範本.xls")) xlApp.DisplayAlerts = False xlApp.Visible = True xlBook.Activate() '設為做用中的目標 xlBook.Parent.Windows(1).Visible = True xlSheet = xlBook.Worksheets(1) '選取第1個sheet xlSheet.Activate() '設此sheet為做用中的目標 '填入資料,有三種方法 xlSheet.Range("A1").Value = "Value" '把資料填到A1的格子內 xlSheet.Range("A1","A2").Value = "Value" '把資料填到A1~A2的格子內 xlSheet.Range(xlSheet.Cells(1,1), xlSheet.Cells(2,1)).Value = "Value" '把資料填到A1~A2的格子內,Cells(row,column),A=1,B=2,C=3,D=4... xlApp.Run("報表範本.xls" & "!Caculater") xlBook.SaveAs("要另存的檔名.xls") xlBook.Close() System.Runtime.InteropServices.Marshal.ReleaseComObject(xlApp) '關閉Excel xlApp = Nothing xlBook = Nothing xlSheet = Nothing xlRange = Nothing
用VS開發環境執行通常不會有錯誤,但是放到IIS上面,可能會出現各種不可預期的錯誤。
例如:
「擷取元件 (CLSID 為 {00024500-0000-0000-C000-000000000046}) 的 COM Class Factory 失敗,因為發生下列錯誤: 80070005 存取被拒。」
或
「無法執行 ActiveX 元件。」
其實是因為沒有設定Excel應用程式的使用權限,需要把IIS這個使用者加入,IIS才能夠使用Excel應用程式。
(以下為XP的設定步驟,其他作業系統可能稍有不同)
=> 執行 dcomcnfg
=> 主控台根目錄
=> 元件服務
=> 電腦
=> 我的電腦
=> DCOM 設定
=> 找到 Microsoft Excel Application
=> 右鍵 內容
=> 安全設定 頁籤
=> 「啟動和啟用權限」設為自訂, 編輯加入 IIS/IUSERS/ASPNET/NETWORKSERVICE, 給予本機啟動/啟用權限
=> 「存取權限」設為自訂, 編輯加入 IIS/IUSERS/ASPNET/NETWORKSERVICE, 給予本機存取權限
=> 識別碼 頁籤 => 選擇 互動式使用者-目前登入的使用者