ASP與Excel結合產生資料表和Chart圖的程式碼,需要的朋友可以參考下。目錄
一、 環境配置
二、 ASP對Excel的基本操作
三、 ASP操作Excel產生資料表
四、 ASP操作Excel產生Chart圖
五、 伺服器端Excel檔案瀏覽、下載、刪除方案
六、 附錄
正文
一、 環境配置
伺服器端的環境配置從參考資料來看,微軟系列的配置應該都行,也就是:
1. Win9x+PWS+Office
2. Win2000 Professional+PWS+Office
3. Win2000 Server+IIS+Office
目前筆者測試成功的環境是後二者。 Office的版本沒有特殊要求,考慮到用戶端設定的不確定性和下相容特性,建議伺服器端Office版本不要太高,以防止用戶端下載後無法正確顯示。
伺服器端環境配置還有兩個偶然的發現是:
1. 筆者開發機器上原來裝有金山的WPS2002,結果Excel物件建立總是出現問題,卸載WPS2002後,錯誤消失。
2. 筆者開發ASP程式碼喜歡用FrontPage,結果發現如果FrontPage開啟(伺服器端),物件建立出現不穩定現象,時而成功時而不成功。擴展考察後發現,Office系列的軟體如果在伺服器端運行,則Excel物件的建立很難成功。
伺服器端還必須設定的一點是COM元件的操作權限。在命令列鍵入DCOMCNFG,則進入COM元件設定介面,選擇Microsoft Excel後點選屬性按鈕,將三個單選項一律選擇自訂,編輯中將Everyone加入所有權限。儲存完畢後重新啟動伺服器。
客戶端的環境配置沒發現什麼特別講究的地方,只要裝有Office和IE即可,版本通用的好像都可以。
二、 ASP對Excel的基本操作
1、建立Excel對象
set objExcelApp = CreateObject(Excel.Application)
objExcelApp.DisplayAlerts = false 不顯示警告
objExcelApp.Application.Visible = false 不顯示介面
2、 新建Excel文件
objExcelApp.WorkBooks.add
set objExcelBook = objExcelApp.ActiveWorkBook
set objExcelSheets = objExcelBook.Worksheets
set objExcelSheet = objExcelBook.Sheets(1)
3. 讀取已有Excel文件
strAddr = Server.MapPath(.)
objExcelApp.WorkBooks.Open(strAddr & /Templet/Table.xls)
set objExcelBook = objExcelApp.ActiveWorkBook
set objExcelSheets = objExcelBook.Worksheets
set objExcelSheet = objExcelBook.Sheets(1)
4、 儲存Excel文件
objExcelBook.SaveAs strAddr & /Temp/Table.xls
5、儲存Excel文件
objExcelBook.Save (筆者測試時儲存成功,頁面報錯。)
6、退出Excel操作
objExcelApp.Quit 一定要退出
set objExcelApp = Nothing
三、 ASP操作Excel產生資料表
1、 在一個範圍內插入數據
objExcelSheet.Range(B3:k3).Value = Array(67, 87, 5, 9, 7, 45, 45, 54, 54, 10)
2、 在一個單元格內插入數據
objExcelSheet.Cells(3,1).Value=Internet Explorer
3. 改變儲存格文字顏色
objExcelSheet.Cells(3,1).Font.Color=vbred
4、 單元格四周畫線條
objExcelSheet.Cells(3.1).Borders(1).LineStyle =1
objExcelSheet.Cells(3.1).Borders(2).LineStyle =1
objExcelSheet.Cells(3.1).Borders(3).LineStyle =1
objExcelSheet.Cells(3.1).Borders(4).LineStyle =1
區域中間畫線條
objExcelSheet.Range(A1:G7).Borders(7).LineStyle =1
objExcelSheet.Range(A1:G7).Borders(8).LineStyle =1
8. 儲存格設定背景色
objExcelSheet.Cells(3.1).Interior.colorindex=17
9、 合併儲存格
objExcelSheet.Range(A1:G7).Merge
10、 設定左右對齊方式
2 left 3 middle 4 right
objExcelSheet.Range(A1).HorizontalAlignment = 2
11、 設定上下對齊方式
2 為居中
objExcelSheet.Range(A1)..VerticalAlignment = 2
四、 ASP操作Excel產生Chart圖
1、 建立Chart圖
objExcelApp.Charts.Add
2、 設定Chart圖種類
objExcelApp.ActiveChart.ChartType = 97
註:二維折線圖,4;二維餅圖,5;二維長條圖,51
3、 設定Chart圖標題
objExcelApp.ActiveChart.HasTitle = True
objExcelApp.ActiveChart.ChartTitle.Text = A test Chart
4、 透過表格資料設定圖形
objExcelApp.ActiveChart.SetSourceData objExcelSheet.Range(A1:k5),1
5. 直接設定圖形數據(建議)
objExcelApp.ActiveChart.SeriesCollection.NewSeries
objExcelApp.ActiveChart.SeriesCollection(1).Name = =333
objExcelApp.ActiveChart.SeriesCollection(1).Values = =
6、 綁定Chart圖
objExcelApp.ActiveChart.Location 1
7、顯示數據表
objExcelApp.ActiveChart.HasDataTable = True
8、 顯示圖例
objExcelApp.ActiveChart.DataTable.ShowLegendKey = True
五、 伺服器端Excel檔案瀏覽、下載、刪除方案
瀏覽的解決方法很多,Location.href=,Navigate,Response.Redirect都可以實現,建議用客戶端的方法,原因是給伺服器更多的時間產生Excel檔案。
下載的實作要麻煩一些。用網路上現成的伺服器端下載元件或自行客製開發一個元件是比較好的方案。另外一種方法是在客戶端操作Excel元件,由客戶端操作伺服器端Excel檔案另存至客戶端。這種方法要求客戶端開放不安全ActiveX控制項的操作權限,考慮到通知每個客戶將伺服器設定為可信任網站的麻煩程度建議還是用第一個方法比較省事。
刪除方案由三個部分組成:
A: 同一使用者產生的Excel檔案以同一個檔案名,檔案名稱可用使用者ID號或SessionID號等可確信不重複字串組成。這樣新檔案產生時自動覆蓋上一檔案。
B: 在Global.asa檔案中設定Session_onEnd事件激發時,刪除這個使用者的Excel暫存檔案。
C: 在Global.asa檔案中設定Application_onStart事件激發時,刪除暫存目錄下的所有檔案。
注意:建議目錄結構/Src 程式碼目錄/Templet 範本目錄/Temp 暫存目錄
六、 附錄
出錯時Excel出現的死進程出現是一件很頭痛的事。在每個檔案前加上On Error Resume Next將有助於改善這種情況,因為它會不管檔案是否產生錯誤都堅持執行到Application.Quit,保證每次程式執行完不留下死進程。
補充兩點:
1.其他Excel具體操作可以透過錄製巨集來解決。
2.伺服器端開啟SQL企業管理器也會產生問題。
複製代碼代碼如下:
<%
OnErrorResumeNextstrAddr=Server.MapPath(.)setobjExcelApp=CreateObject(Excel.Application)
objExcelApp.DisplayAlerts=false
objExcelApp.Application.Visible=false
objExcelApp.WorkBooks.Open(strAddr&/Templet/Null.xls)
setobjExcelBook=objExcelApp.ActiveWorkBook
setobjExcelSheets=objExcelBook.Worksheets
setobjExcelSheet=objExcelBook.Sheets(1)objExcelSheet.Range(B2:k2).Value=Array(Week1,Week2,Week3,Week4,Week5,Week6,Week7,
Week8,Week9,Week10)
objExcelSheet.Range(B3:k3).Value=Array(67,87,5,9,7,45,45,54,54,10)
objExcelSheet.Range(B4:k4).Value=Array(10,10,8,27,33,37,50,54,10,10)
objExcelSheet.Range(B5:k5).Value=Array(23,3,86,64,60,18,5,1,36,80)
objExcelSheet.Cells(3,1).Value=InternetExplorer
objExcelSheet.Cells(4,1).Value=Netscape
objExcelSheet.Cells(5,1).Value=OtherobjExcelSheet.Range(b2:k5).Select
objExcelApp.Charts.Add
objExcelApp.ActiveChart.ChartType=97
objExcelApp.ActiveChart.BarShape=3
objExcelApp.ActiveChart.HasTitle=True
objExcelApp.ActiveChart.ChartTitle.Text=
Visitorslogforeachweekshowninbrowserspercentage
objExcelApp.ActiveChart.SetSourceDataobjExcelSheet.Range(A1:k5),1
objExcelApp.ActiveChart.Location1
'objExcelApp.ActiveChart.HasDataTable=True
'objExcelApp.ActiveChart.DataTable.ShowLegendKey=TrueobjExcelBook.
SaveAsstrAddr&/Temp/Excel.xlsobjExcelApp.Quit
setobjExcelApp=Nothing
%>
<!DOCTYPEHTMLPUBLIC-//W3C//DTDHTML4.0Transitional//EN>
<HTML>
<HEAD>
<TITLE>NewDocument</TITLE>
<METANAME=GeneratorCONTENT=MicrosoftFrontPage5.0>
<METANAME=AuthorCONTENT=>
<METANAME=KeywordsCONTENT=>
<METANAME=DescriptionCONTENT=>
</HEAD>
<BODY>
</BODY>
</HTML>