–
Web系統(tǒng)的開發(fā)過程中,我們經(jīng)常會(huì)碰到一些這樣的需求。客戶要求將DB檢索出的數(shù)據(jù)導(dǎo)出,并下載到本地的Excel文件中,做成一定樣式的報(bào)表。這里我想通過一個(gè)實(shí)際的例子,講講我們是如何在ASP中實(shí)現(xiàn)這一需求的。
一、下載處理中,CSV文件生成和Excel模板拷貝的實(shí)現(xiàn)代碼如下:
1、上圖為數(shù)據(jù)檢索頁(yè)面,檢索的數(shù)據(jù)一覽顯示。并且在該頁(yè)面中將檢索用的sql文保存在
Session(“strEXCELSQL”)中。
2、點(diǎn)擊Excel export按鈕,提交到下面的下載頁(yè)面。
3、現(xiàn)在頁(yè)面重新進(jìn)行數(shù)據(jù)庫(kù)檢索,生成CSV數(shù)據(jù)文件。代碼如下:
<%
‘變量定義
Dim fso, Fld, delf, tmpf, fmd, today
‘創(chuàng)建文件處理對(duì)象
set fso = CreateObject(“Scripting.FileSystemObject”)
‘對(duì)應(yīng)web服務(wù)器csv目錄
set Fld = fso.GetFolder(Server.MapPath(“csv”))
set delf = Fld.Files
‘將web服務(wù)器csv目錄中當(dāng)天以前的所有文件刪除。
For Each tmpf in delf
fmd = tmpf.DateLastModified
today = date()
if(year(fmd) < year(today)) then
tmpf.delete
elseif(month(fmd) < month(today)) then
tmpf.delete
elseif(day(fmd) < day(today)) then
tmpf.delete
end if
next
‘對(duì)應(yīng)web服務(wù)器Excel下載目錄
set Fld = fso.GetFolder(Server.MapPath(“excel_download”))
set delf = Fld.Files
‘將web服務(wù)器Excel下載目錄中當(dāng)天以前的所有文件刪除。
For Each tmpf in delf
fmd = tmpf.DateLastModified
today = date()
if(year(fmd) < year(today)) then
tmpf.delete
elseif(month(fmd) < month(today)) then
tmpf.delete
elseif(day(fmd) < day(today)) then
tmpf.delete
end if
next
‘變量定義
Dim rsPtn, strTitle, PtnNo
Dim rsData
Dim rsData_numRows
Dim csvFilePath, strFileNm
Dim strSelectSQL
Dim tempof, f1, csvfile
Dim csvLine, lngLineCnt
Dim i
Dim nowTime, strH, strM, strS
Dim strDateBuf
Dim strCol
Dim strOwner
‘當(dāng)前時(shí)間的取得
nowTime = Time()
strH = Hour(nowTime)
if(0 <= strH and strH <= 9) then
strH = “0” & CStr(strH)
end if
strM = Minute(nowTime)
if(0 <= strM and strM <= 9) then
strM = “0” & CStr(strM)
end if
strS = Second(nowTime)
if(0 <= strS and strS <= 9) then
strS = “0” & CStr(strS)
end if
‘檢索頁(yè)面設(shè)定的SQL文取得
strSelectSQL = Session(“strEXCELSQL”)
‘?dāng)?shù)據(jù)庫(kù)訪問
Set rsData = Server.CreateObject(“ADODB.Recordset”)
rsData.ActiveConnection = CONNECT_STRING
rsData.Source = strSelectSQL
rsData.CursorType = 0
rsData.CursorLocation = 2
rsData.LockType = 1
rsData.Open()
rsData_numRows = 0
‘CSV文件名生成‘Excel_ +用戶ID+時(shí)+分+秒
strFileNm = “Excel_” & Session.SessionID & strH & strM & strS
csvFilePath = Server.MapPath(“csv”) & “” & strFileNm & “.csv”
‘文件存在性的判斷
If(fso.FileExists(csvFilePath) = false) then
‘打開文件
Set csvfile = fso.OpentextFile(csvFilePath, 2, True)
lngLineCnt = 0
‘循環(huán)數(shù)據(jù)集,將數(shù)據(jù)寫入CSV文件
Do While rsData.EOF = false
‘Excel 最大行數(shù)超過
If lngLineCnt > 65535 Then Exit Do
csvLine = “”
For i = 0 To rsData.Fields.Count-1
csvLine = csvLine & rsData.Fields.Item(i).Value & “,”
Next
csvLine = Left(csvLine, len(csvLine)-1)
csvfile.WriteLine( “””*””,” & csvLine )
lngLineCnt = lngLineCnt + 1
rsData.MoveNext
Loop
End if
‘Excel模板文件生成
dim f2
set f2 = fso.getfile(Server.MapPath(“templatestemplate1.xls”))
if(fso.FileExists(Server.MapPath(“excel_download”) & “” & strFileNm & “.xls”) = false) then
‘文件從web服務(wù)器的templates目錄拷貝到excel_download目錄
‘文件名與CSV文件名相同。
f2.copy(Server.MapPath(“excel_download”) & “” & strFileNm & “.xls”)
end if
rsData.Close()
Set rsData = Nothing
%>