程式設計-JavaScript
  JavaScript - jQuery
  NAT
  shell
  伺服器建置
  伺服器管理
  系統維護
  程式設計-ASP
  程式設計-C
  程式設計-Java
  程式設計-Jsp
  程式設計-Perl
  程式設計-PHP
  資料庫
  資料庫-Oracle
   

Google

 

 

 

 

 

回上頁
程式設計-ASP  
ASP編程 | ASP操作Excel技術總結
(2004-11-01)
點閱次數:12649
ASP編程 | ASP操作Excel技術總結
目錄
一、 環境配置
二、 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、 選中一個範圍
4、 單格左邊畫粗線條
5、 單格右邊畫粗線條
6、 單格上邊畫粗線條
7、 單格下邊畫粗線條
8、 單格設定背景色
9、 合併單格
10、 插入行
11、 插入列
四、 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 = "={1,4,5,6,2}"
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企業管理器也會產生問題。
七、例子
<%
On Error Resume Next
strAddr = Server.MapPath(".")
set objExcelApp = CreateObject("Excel.Application")
objExcelApp.DisplayAlerts = false
objExcelApp.Application.Visible = false
objExcelApp.WorkBooks.Open(strAddr & "\Templet\Null.xls")
set objExcelBook = objExcelApp.ActiveWorkBook
set objExcelSheets = objExcelBook.Worksheets
set objExcelSheet = 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="Internet Explorer"
objExcelSheet.Cells(4,1).Value="Netscape"
objExcelSheet.Cells(5,1).Value="Other"
objExcelSheet.Range("b2:k5").Select
objExcelApp.Charts.Add
objExcelApp.ActiveChart.ChartType = 97
objExcelApp.ActiveChart.BarShape =3
objExcelApp.ActiveChart.HasTitle = True
objExcelApp.ActiveChart.ChartTitle.Text = "Visitors log for each week shown in browsers percentage"
objExcelApp.ActiveChart.SetSourceData objExcelSheet.Range("A1:k5"),1
objExcelApp.ActiveChart.Location 1
'objExcelApp.ActiveChart.HasDataTable = True
'objExcelApp.ActiveChart.DataTable.ShowLegendKey = True
objExcelBook.SaveAs strAddr & "\Temp\Excel.xls"
objExcelApp.Quit
set objExcelApp = Nothing
%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<HTML>
<HEAD>
<TITLE> New Document </TITLE>
<META NAME="Generator" CONTENT="Microsoft FrontPage 5.0">
<META NAME="Author" CONTENT="">
<META NAME="Keywords" CONTENT="">
<META NAME="Description" CONTENT="">
</HEAD>
<BODY>
</BODY>
</HTML>
我在這兒再提供。將網頁中表格,保存的方法。
例如:TABLE 的 ID=MYTABLE
<!--生成EXCEL檔-->
sub btnExport_onclick()
dim objExcel
on error resume next
Set objExcel = CreateObject("excel.application")
With objExcel
.visible =true
.workbooks.add
.sheets("sheet1").select

End with
m_row="0"

for a=0 to document.all.mytable.rows.length-1
m_row = cstr(int (m_row)+1)
for b=0 to document.all.mytable.rows(a).cells.length-1
m_col = chr(asc("A")+b)
objexcel.range(m_col&m_row).select
M_value = document.all.mytable.rows(a).cells(b).innerText
objexcel.activecell.value=cstr(m_value)
next
next
objexcel.visible=true
objexcel.range("A1").select
End sub




.LinuxUser Since Oct 5 2005      | 關於LinuxUser | 廣告刊登 | 合作提案 | 聯絡我們 | 人才招募 | 隱私權政策 |