日韩精品中文字幕一区二区-日韩精品中文字幕一区-日韩精品中文字幕视频-日韩精品在线一区二区三区-第一页在线-第一福利视频

當(dāng)前位置:首頁文章首頁 IT學(xué)院 IT技術(shù)

利用asp生成excel報(bào)表與打印的實(shí)例學(xué)習(xí)

作者:  來源:  發(fā)布時(shí)間:2011-6-2 9:30:41  點(diǎn)擊:

這篇文章主要跟大家介紹的是關(guān)于如何利用asp生成excel報(bào)表,希望能給大家派上用場(chǎng)。

1. 前言
報(bào)表打印通常是管理信息系統(tǒng)中的一個(gè)重要模塊,而Excel憑借它功能強(qiáng)大、應(yīng)用靈活、通用性強(qiáng)等的優(yōu)勢(shì)在報(bào)表打印中獲得了廣泛的應(yīng)用。
最初的管理信息系統(tǒng)基本上是采用客戶機(jī)/服務(wù)器(C/S)模式開發(fā)的,但隨著WWW的廣泛應(yīng)用,目前的管理信息系統(tǒng)已經(jīng)逐漸開始從C/S模式向?yàn)g覽器/服務(wù)器(B/S)模式轉(zhuǎn)變。B/S模式具有傳統(tǒng)C/S模式所不及的很多特點(diǎn),如更加開放、與軟硬件無關(guān)、應(yīng)用擴(kuò)充和系統(tǒng)維護(hù)升級(jí)方便等等,目前已成為企業(yè)網(wǎng)上首選的計(jì)算模式,原先在C/S下的很多軟件都開始移植到B/S模式下。由于B/S模式的特殊性,在C/S下相對(duì)較易實(shí)現(xiàn)的Excel報(bào)表打印功能在B/S下卻成為一個(gè)難點(diǎn)。本文根據(jù)在實(shí)際的項(xiàng)目中總結(jié)的經(jīng)驗(yàn),以ASP為例,給出了一個(gè)較好的通用方法。

2. 功能實(shí)現(xiàn)
為了說明問題,這里舉一個(gè)例子。系統(tǒng)平臺(tái)是Windows 2000+SQL Server 2000+IIS 5.0+ASP 3,報(bào)表采用的是Excel,要求按照給定的報(bào)表格式生成圖書銷售統(tǒng)計(jì)的報(bào)表,并能夠打印。

2.1 Excel報(bào)表模板的制作
首先根據(jù)給定的報(bào)表格式,制作一個(gè)Excel模板(就是要打印的報(bào)表的表格),當(dāng)然其中需要從數(shù)據(jù)庫(kù)中動(dòng)態(tài)統(tǒng)計(jì)生成的數(shù)據(jù)留著空白。這個(gè)報(bào)表先在Excel中畫好,然后保存為模板,存放在起來,這里為\test\book1.xlt。

2.2 Excel報(bào)表的生成與打印
這里采用了Excel的Application組件,該組件在安裝Excel時(shí)安裝到系統(tǒng)中。我們的操作也都是針對(duì)該組件。
(1) 建立Excel.Application對(duì)象
set objExcel=CreateObject("Excel.Application")

(2) 打開Excel模板
objExcel.Workbooks.Open(server.mappath("\test")&"\book1.xlt") '打開Excel模板
objExcel.Sheets(1).select '選中工作頁
set sheetActive=objExcel.ActiveWorkbook.ActiveSheet

(3) Excel的常規(guī)添加操作
例如sheetActive.range("g4").value=date() ‘這里添加的是時(shí)間,當(dāng)然也可以是你指定的任何數(shù)據(jù)

(4) Excel中添加數(shù)據(jù)庫(kù)中的紀(jì)錄
這里假設(shè)已有一個(gè)數(shù)據(jù)集adoRset,存放由Sql操作生成的統(tǒng)計(jì)數(shù)據(jù)。
num=7 ‘從Excel的第七行開始
do until adoRset.EOF ‘循環(huán)直至數(shù)據(jù)集中的數(shù)據(jù)寫完
strRange="d"&num&":f"&num ‘設(shè)定要填寫內(nèi)容的單元區(qū)域
sheetActive.range(strRange).font.size=10 ‘設(shè)定字體大小
sheetActive.range(strRange).WrapText=false ‘設(shè)定文字回卷
sheetActive.range(strRange).ShrinkToFit=true ‘設(shè)定是否自動(dòng)適應(yīng)表格單元大小
sheetActive.range(strRange).value=array(adoRset("bookid"),adoRset("bookname"),adoRset("author")) ‘把數(shù)據(jù)集中的數(shù)據(jù)填寫到相應(yīng)的單元中
num=num+1
adoRset.MoveNext
loop

(5) Excel臨時(shí)報(bào)表文件的保存及處理
實(shí)際運(yùn)行中應(yīng)該注意每次一個(gè)用戶進(jìn)行報(bào)表打印時(shí)都采用一個(gè)臨時(shí)的Excel文件,而不是硬性規(guī)定文件名,因?yàn)槿绻霉潭ǖ奈募脑挘挥械谝淮紊墒浅晒Φ模竺娴牟僮鞫紩?huì)因?yàn)橐汛嬖谕募鴮?dǎo)致失敗。所以我們需要每次都產(chǎn)生一個(gè)臨時(shí)的而且不重復(fù)的文件名,這里可以采用自定義的getTemporaryFile()函數(shù)由來生成,然后存放在變量filename中,用變量filepos表示這些臨時(shí)文件的路徑。
此外如果這些臨時(shí)文件不處理的話久而久之會(huì)成為文件垃圾,因此在每個(gè)用戶提交Excel報(bào)表打印請(qǐng)求時(shí)要先刪除臨時(shí)目錄下所有原先產(chǎn)生的臨時(shí)打印文件。
臨時(shí)文件的處理主要代碼如下:
function getTemporaryFile(myFileSystem)
dim tempFile,dotPos
tempFile=myFileSystem.getTempName
dotPos=instr(1,tempFile,".")
getTemporaryFile=mid(tempFile,1,dotPos)&"xls"
end function
set myFs=createObject("scripting.FileSystemObject")
filePos=server.mappath("\test") & "\tmp\" '要存放打印臨時(shí)文件的臨時(shí)目錄
fileName=getTemporaryFile(myFs) '取得一個(gè)臨時(shí)文件名
myFs.DeleteFile filePos&"*.xls" '刪除該目錄下所有原先產(chǎn)生的臨時(shí)打印文件
set myFs=nothing
Excel臨時(shí)文件的保存代碼為:
objExcel.ActiveWorkbook.saveas filePos&filename

(6) 退出Excel應(yīng)用
objExcel.quit
set objExcel=Nothing

(7) Excel報(bào)表的打印
前面的步驟已經(jīng)生成了Excel報(bào)表,下一步進(jìn)行打印,采用的策略可以有兩種:
方案一:提供上面生成的Excel報(bào)表臨時(shí)文件鏈接給用戶,用戶可以直接點(diǎn)擊在瀏覽器中打開Excel報(bào)表并通過瀏覽器的打印功能進(jìn)行打印,也可以點(diǎn)擊右鍵然后另存到本地后再作打印等相關(guān)處理。

方案二:生成Excel報(bào)表后直接在客戶端加載到瀏覽器,當(dāng)然在沒有完全加載時(shí)應(yīng)該提示“正在加載,請(qǐng)等待”等字樣。

2.3 系統(tǒng)配置與注意事項(xiàng)
雖然以上代碼很簡(jiǎn)單,但實(shí)際應(yīng)用不當(dāng)經(jīng)常會(huì)出現(xiàn)錯(cuò)誤,所以下面要講到的系統(tǒng)配置和注意事項(xiàng)非常關(guān)鍵。
(1) 千萬要保證以上代碼輸入的正確性,否則一旦運(yùn)行錯(cuò)誤,Excel對(duì)象會(huì)滯留內(nèi)存,難以消除,導(dǎo)致下一次調(diào)用時(shí)速度狂慢,并產(chǎn)生內(nèi)存不可讀寫的Windows錯(cuò)誤。這時(shí)的解決方法就是注銷當(dāng)前用戶,如果還不行,就只能Reset了。

(2) 一定要設(shè)置好負(fù)責(zé)打印功能的asp文件的權(quán)限。方法是:在IIS管理中,選擇該asp文件,右鍵然后選“屬性”/“文件安全性”/"匿名訪問和驗(yàn)證控制“,在這里IIS默認(rèn)是匿名訪問,應(yīng)該選擇驗(yàn)證訪問(這里基本驗(yàn)證和集成Windows驗(yàn)證兩種方式均可,但前者不夠安全),這一點(diǎn)無比重要,否則應(yīng)用當(dāng)中會(huì)出錯(cuò)的。

(3) 有的時(shí)候報(bào)表分為多頁,而且我們希望每一頁有相同的表頭,要求表頭每頁都自動(dòng)打印,可以在Excel模板中進(jìn)行設(shè)置。方法如下:選擇菜單"文件"/"頁面設(shè)置"/"工作表",然后在"頂端標(biāo)題行"輸入你表頭的行數(shù)(如:表頭為1-3行即填入:$1:$3)。

3.總結(jié)
以上我們給出了一個(gè)采用ASP寫的在B/S模式下實(shí)現(xiàn)EXCEL報(bào)表的生成與打印的例子,在實(shí)際當(dāng)中已經(jīng)得到了良好的應(yīng)用。事實(shí)也證明,這個(gè)例子的代碼雖然不難寫,但一定要注意系統(tǒng)的配置,這也是無數(shù)次失敗后得出的經(jīng)驗(yàn)。

文章評(píng)論

軟件按字母排列: A B C D E F G H I J K L M N O P Q R S T U V W X Y Z
主站蜘蛛池模板: 91精品在线视频播放| 来5566最新av在线电影| 自制化妆豆豆本| 电影网1905免费版| 果晓丹| 神宫寺奈绪作品| 《摧花狂魔》电影| 电影《追求》| reimei影虎| 削发| 出轨的女人电影| 香谱72图解高清大图及解释| dj歌曲串烧中文大全| 动物园作文| 特殊的精油按摩1| 老司机免费在线观看| 三夫 电影| 恶人想要抢救一下 漫画| 吴京电影全集完整版喜剧| 韩国我的养父电影免费观看| 洛城僵尸| 五下数学第二单元思维导图| 艳妇乳肉豪妇荡乳xxx| 哪吒电影1| 骑脖子视频| 进击的巨人2| 刘浩存个人简介资料| 辐射避难所掉脑袋问题答案| 黄视频免费在线| 爱你的主题曲| 大悲咒朗诵正版念诵| 漂亮女员工被老板糟蹋| 又大又肥又圆的白屁股| 大珍珠演员表介绍| heidi klum| 孕期体重增长参照表| 张绍荣| 蜘蛛夫人:超感觉醒 电影| 1881年| 我的刺猬女孩大结局| 密桃成孰时|