卡提諾王國's Archiver

srv0915 發表於 2009-5-27 16:04

[卡國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]

頁面的寬剛好可以直接列印,這樣就完成了~

b8842731 發表於 2009-6-6 22:50

知識傳承,謝謝您的努力,感謝了!

myezgo 發表於 2009-6-23 19:26

請問srv0915大
如果是租用虛擬主機
就無法使用上述功能了是嗎
好像不能到元件服務裡去設定DCOM→Microsoft Excel 應用程式
是嗎?謝謝

srv0915 發表於 2009-6-23 20:03

[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元件對主機業者來講會有安全性的疑慮

myezgo 發表於 2009-6-23 22:07

謝謝srv0915大
了解了
所以我是租用虛擬主機的
應該只能用第十三章的教學
感謝srv0915大提供這麼多寶貴的資料:emo_045:

頁: [1]

Powered by Discuz! Archiver 7.0.0  © 2001-2009 Comsenz Inc.