[卡國17天傳說#15] ASP會員管理 第十五章 線上生成Excel(進階篇)
[i=s] 本帖最後由 danielpaggy 於 2009-5-27 19:52 編輯 [/i]第十五章 線上生成Excel(進階篇)
在這個章節我們要在ASP上使用Excel進行版面設計,並且將會員資料匯入,讓使用者可以直接下載。
這張表格就是我們要完成的Excel表。
[IMG]http://i647.photobucket.com/albums/uu195/srv0915/MWSnap065.jpg[/IMG]
可以看到這張表跟一般的Excel幾乎沒什麼差別,而且跟之前的匯出CSV比起來真是精緻多了。
當然,要完成這麼一張表需要很多的設定,在上一個章節有先示範了字型大小以及合併儲存格的功能,但是Excel的功能實在太多,網路上可以找到支援ASP的Excel語法又少的可憐,所以我們可以利用Excel巨集的方式。你可以把巨集想成是錄影,但最終的結果不同,它會把你錄製過程中做過的動作都轉為VBScript,由於ASP和VB兩者的語言非常相近,所以我們可以從當中找出符合ASP使用的程式碼,以下是巨集的製作方式。
首先打開一個空白的Excel表格,並將資料先輸入進去,不進行排版,你也可以直接拿上一章的CSV出來用也可以,只要不排版就好了。
接著找到「工具」->「巨集」->「錄製巨集」,輸入巨集名稱,按下確定開始錄製。
[IMG]http://i647.photobucket.com/albums/uu195/srv0915/MWSnap050.jpg[/IMG]
[IMG]http://i647.photobucket.com/albums/uu195/srv0915/MWSnap052.jpg[/IMG]
接著進行排版,包括版面設定、邊界、字型、列高、欄寬、合併儲存格等…。
[IMG]http://i647.photobucket.com/albums/uu195/srv0915/MWSnap055.jpg[/IMG]
[IMG]http://i647.photobucket.com/albums/uu195/srv0915/MWSnap060.jpg[/IMG]
完成後,停止巨集,接著在上面工具列中「工具」->「巨集」->「巨集」-「編輯」,查看錄製結果。
[IMG]http://i647.photobucket.com/albums/uu195/srv0915/MWSnap062.jpg[/IMG]
[IMG]http://i647.photobucket.com/albums/uu195/srv0915/MWSnap063.jpg[/IMG]
[IMG]http://i647.photobucket.com/albums/uu195/srv0915/MWSnap064.jpg[/IMG]
這一堆密密麻麻的程式碼就是生成的 VBS,對照一下剛才做的設定,把標頭的字體放大成20pt,這裡的寫法是
With Selection.Font
.Size = 20
End With
粗體則是 .Font.Bold = true
水平置中則是 HorizontalAlignment = xlCenter
對照ASP的寫法
With xlWorksheet
.Range("A1").font.Size=20
.Range("A1").font.bold=true
.Range("A1").HorizontalAlignment = 3
end With
是不是很類似…依照這樣子的方式,幾乎所以在Excel上可以做到的動作,在ASP上都可以完成!
有個地方要注意的是在ASP上,許多參數都是用數字來代替,比如說上面的
xlCenter 對照出來就是 3。
把Excel生成的程式寫好後,我們要將會員資料寫入,以下是程式碼
i = 0
Set rs = Server.CreateObject("Adodb.RecordSet")
SQL = "Select A1.ID,UserId,UserName,Sex,Tel,Mobile," & _
"UserMemo,A1.Address,A2.Name As City,A3.Name As District" & _
" From" & _
" (UserData A1 LEFT JOIN CityData A2 ON A1.City = A2.ID)" & _
" LEFT JOIN DistrictData A3 ON A1.City = A3.ParentID And A1.District = A3.ID "&QueryStr&""
rs.open SQL,conn,1,1
if not rs.eof then
do while not rs.eof
i = i + 1
j = i + 2 '目前行數
UserId = rs("UserId")
UserName = rs("UserName")
Sex = rs("Sex")
Tel = rs("Tel")
Mobile = rs("Mobile")
Address = rs("City") & rs("District") & rs("Address")
'寫入資料
With xlWorksheet
.Range("A"&j&":G"&j&"").Borders.LineStyle=1 '畫出框線
.Range("A"&j&"").value = i
.Range("B"&j&"").value = UserId
.Range("C"&j&"").value = UserName
.Range("D"&j&"").value = Sex
.Range("E"&j&"").value = Tel
.Range("F"&j&"").value = Mobile
.Range("G"&j&"").value = Address
end With
rs.movenext
loop
end if
當中的j表示當前要寫入的行數,因為標題和表頭各佔掉一行,所以我們要加上2,另外,因為不確定資料筆數會有幾筆,沒辦法一開始就把格子畫好,因此在寫入資料的同時,我們再畫出當前資料範圍的框線就好。
生成後直接下載,看一下效果。
[IMG]http://i647.photobucket.com/albums/uu195/srv0915/MWSnap065.jpg[/IMG]
頁面的寬剛好可以直接列印,這樣就完成了~ 知識傳承,謝謝您的努力,感謝了! 請問srv0915大
如果是租用虛擬主機
就無法使用上述功能了是嗎
好像不能到元件服務裡去設定DCOM→Microsoft Excel 應用程式
是嗎?謝謝 [quote]請問srv0915大
如果是租用虛擬主機
就無法使用上述功能了是嗎
好像不能到元件服務裡去設定DCOM→Microsoft Excel 應用程式
是嗎?謝謝
[size=2][color=#999999]myezgo 發表於 2009-6-23 19:26[/color] [url=http://ck101.com/redirect.php?goto=findpost&pid=70916816&ptid=1472762][img]http://ck101.com/images/common/back.gif[/img][/url][/size][/quote]
上述方法生成Excel的原理是以ASP用類似VBScript的方法調用主機的Excel元件
所以必要條件是主機上要安裝Microsoft Office Excel
再來是 你的主機必需要讓你設定DCOM
據我所知國內的虛擬主機不太可能讓你做那些動作
除了Microsoft Office Excel是有版權的軟體,它不能免費幫你安裝之外
再來是直接調用主機的Excel元件對主機業者來講會有安全性的疑慮 謝謝srv0915大
了解了
所以我是租用虛擬主機的
應該只能用第十三章的教學
感謝srv0915大提供這麼多寶貴的資料:emo_045:
頁:
[1]