close

稍作修正,之前寫的有一些錯誤,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, 給予本機存取權限
=> 識別碼 頁籤 => 選擇 互動式使用者-目前登入的使用者
 


arrow
arrow
    文章標籤
    asp.net
    全站熱搜

    伊 發表在 痞客邦 留言(0) 人氣()