生成報(bào)表是做系統(tǒng)經(jīng)常遇到的事,一些企業(yè)或者單位往往要求EXCEL格式的報(bào)表!
第一種方式 利用FSO生成文本文件。
程序代碼:
Set fs = server.CreateObject("scripting.filesystemobject")
'--假設(shè)你想讓生成的EXCEL文件做如下的存放
filename = "c:\online.xls"
'-創(chuàng)建EXCEL文件
set myfile = fs.CreateTextFile(filename,true)
rs.Open sql,conn
if rs.EOF and rs.BOF then
else
dim strLine,responsestr
strLine=""
For each x in rs.fields
strLine= strLine & x.name & chr(9)
Next
'--將表的列名先寫(xiě)入EXCEL
myfile.writeline strLine
Do while Not rs.EOF
strLine=""
for each x in rs.Fields
strLine= strLine & x.value & chr(9)
next
'--將表的數(shù)據(jù)寫(xiě)入EXCEL
myfile.writeline strLine
rs.MoveNext
loop
end if
Set fs=Nothing
這方法的好處是不管有多少條記錄 速度上是沒(méi)問(wèn)題 但是有一個(gè)很?chē)?yán)重的缺點(diǎn) 就是生成的EXCEL文件的格式不能得到很好的控制 例如 單元格的格式不能改變等
第二種方法 用EXCEL組件+EXCEL模板
原理是打開(kāi)一個(gè)存在的EXCEL模板文件 然后寫(xiě)入數(shù)據(jù)后在另存為所要的報(bào)表文件
優(yōu)點(diǎn):格式能很好的控制
缺點(diǎn):速度上很慢 (因?yàn)榭丶涌诤苜M(fèi)資源)
看了微軟的說(shuō)明又想到了用數(shù)組做中轉(zhuǎn)的方法 只要打開(kāi)一個(gè)接口寫(xiě)入所有數(shù)據(jù),于是問(wèn)題得到了解決,可是新的問(wèn)題出來(lái)了,100萬(wàn)或者更高的記錄時(shí) 數(shù)組就的空間分配就成了問(wèn)題了.
工夫不負(fù)有心人 ,經(jīng)過(guò)幾天努力 終于完美解決
就是記錄多時(shí)分批寫(xiě)入~~~~~~~~~
程序代碼:
sub writetoarr(lines,begin_rs,begin_exl)
'==============================================================================
'過(guò)程writetoarr(lines,begin_rs,begin_exl)寫(xiě)入EXCEL
'lines:要寫(xiě)入的記錄條數(shù)
'begin_rs:從第幾條記錄開(kāi)始
'begin_exl:要寫(xiě)入的EXCEL開(kāi)始位置
'==============================================================================
redim temparr(lines-1,11)
'--將表的列名存放到數(shù)組
'--將表的數(shù)據(jù)存放到數(shù)組
ii=1
For i = begin_rs To begin_rs+lines-1
j=0
'response.write ii&"<br>"
For each x in rs.fields
temparr(ii-1,j)=x.value
j=j+1
Next
ii=ii+1
rs.movenext
Next
objExcelSheet.Range("A"&begin_exl).Resize(lines, 12).Value = temparr
redim temparr(0,0)
response.write "從A"&begin_exl&"開(kāi)始寫(xiě)到A"&begin_exl+lines&"<br>"
response.write "從第"&begin_rs&"條到"&begin_rs+lines&"條記錄<br>"
response.write "共寫(xiě)入"&lines&"行<br>"
response.write "-------------------------<br>"
end sub
maxk=rs.recordcount
beginrs=1 '從第幾條記錄開(kāi)始,一般是1
beginexl=2 '從excel的第幾行開(kāi)始寫(xiě),一般是2
liness=200 '每次操作多少條記錄,不建議超過(guò)10萬(wàn)
do while maxk>0
if maxk>liness then
call writetoarr(liness,beginrs,beginexl)
beginrs=beginrs+liness
beginexl=beginexl+liness
maxk=maxk-liness
else
call writetoarr(maxk,beginrs,beginexl)
exit do
end if
loop
本站僅提供存儲(chǔ)服務(wù),所有內(nèi)容均由用戶(hù)發(fā)布,如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)
點(diǎn)擊舉報(bào)。