[庫存區]

[卡國17天傳說#15] ASP會員管理 第十五章 線上生成Excel(進階篇)

本帖最後由 danielpaggy 於 2009-5-27 19:52 編輯

第十五章 線上生成Excel(進階篇)
在這個章節我們要在ASP上使用Excel進行版面設計,並且將會員資料匯入,讓使用者可以直接下載。

這張表格就是我們要完成的Excel表。
[卡國17天傳說#15] ASP會員管理 第十五章 線上生成Excel(進階篇)

可以看到這張表跟一般的Excel幾乎沒什麼差別,而且跟之前的匯出CSV比起來真是精緻多了。
當然,要完成這麼一張表需要很多的設定,在上一個章節有先示範了字型大小以及合併儲存格的功能,但是Excel的功能實在太多,網路上可以找到支援ASP的Excel語法又少的可憐,所以我們可以利用Excel巨集的方式。你可以把巨集想成是錄影,但最終的結果不同,它會把你錄製過程中做過的動作都轉為VBScript,由於ASP和VB兩者的語言非常相近,所以我們可以從當中找出符合ASP使用的程式碼,以下是巨集的製作方式。

首先打開一個空白的Excel表格,並將資料先輸入進去,不進行排版,你也可以直接拿上一章的CSV出來用也可以,只要不排版就好了。

接著找到「工具」->「巨集」->「錄製巨集」,輸入巨集名稱,按下確定開始錄製。
[卡國17天傳說#15] ASP會員管理 第十五章 線上生成Excel(進階篇)
[卡國17天傳說#15] ASP會員管理 第十五章 線上生成Excel(進階篇)

接著進行排版,包括版面設定、邊界、字型、列高、欄寬、合併儲存格等…。
[卡國17天傳說#15] ASP會員管理 第十五章 線上生成Excel(進階篇)
[卡國17天傳說#15] ASP會員管理 第十五章 線上生成Excel(進階篇)

完成後,停止巨集,接著在上面工具列中「工具」->「巨集」->「巨集」-「編輯」,查看錄製結果。
[卡國17天傳說#15] ASP會員管理 第十五章 線上生成Excel(進階篇)
[卡國17天傳說#15] ASP會員管理 第十五章 線上生成Excel(進階篇)
[卡國17天傳說#15] ASP會員管理 第十五章 線上生成Excel(進階篇)

這一堆密密麻麻的程式碼就是生成的 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,另外,因為不確定資料筆數會有幾筆,沒辦法一開始就把格子畫好,因此在寫入資料的同時,我們再畫出當前資料範圍的框線就好。
生成後直接下載,看一下效果。
[卡國17天傳說#15] ASP會員管理 第十五章 線上生成Excel(進階篇)

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

第十五章 線上生成Excel(進階篇).part01.rar

283.2 KB, 下載次數: 171

第十五章 線上生成Excel(進階篇).part02.rar

283.2 KB, 下載次數: 162

第十五章 線上生成Excel(進階篇).part03.rar

283.2 KB, 下載次數: 164

第十五章 線上生成Excel(進階篇).part04.rar

43.27 KB, 下載次數: 153

喜歡這篇文章嗎?
回覆 4
您需要登入後才可以回帖 登入 | 註冊會員

本版積分規則 回覆 15 個字以上可拿獎勵,
規則詳見此

精選熱門商品

提示訊息
go_top