如何使用哪個asp產生一個excel報表

來源:互聯網
上載者:User
為了說明問題,這裡舉一個例子。系統平台是Windows 2000+SQL Server 2000+IIS 5.0+ASP 3,報表採用的是Excel,要求按照給定的報表格式產生圖書銷售統計的報表,並能夠列印。

 功能實現
為了說明問題,這裡舉一個例子。系統平台是Windows 2000+SQL Server 2000+IIS 5.0+ASP 3,報表採用的是Excel,要求按照給定的報表格式產生圖書銷售統計的報表,並能夠列印。
1. 前言
報表列印通常是管理資訊系統中的一個重要模組,而Excel憑藉它功能強大、應用靈活、通用性強等的優勢在報表列印中獲得了廣泛的應用。
最初的管理資訊系統基本上是採用客戶機/伺服器(C/S)模式開發的,但隨著WWW的廣泛應用,目前的管理資訊系統已經逐漸開始從C/S模式向瀏覽器/伺服器(B/S)模式轉變。B/S模式具有傳統C/S模式所不及的很多特點,如更加開放、與軟硬體無關、應用擴充和系統維護升級方便等等,目前已成為企業網上首選的計算模式,原先在C/S下的很多軟體都開始移植到B/S模式下。由於B/S模式的特殊性,在C/S下相對較易實現的Excel報表列印功能在B/S下卻成為一個痛點。本文根據在實際的項目中總結的經驗,以ASP為例,給出了一個較好的通用方法。
2.1 Excel報表範本的製作
首先根據給定的報表格式,製作一個Excel模板(就是要列印的報表的表格),當然其中需要從資料庫中動態統計產生的資料留著空白。這個報表先在Excel中畫好,然後儲存為模板,存放在起來,這裡為\test\book1.xlt。
2.2 Excel報表的產生與列印
這裡採用了Excel的Application組件,該組件在安裝Excel時安裝到系統中。我們的操作也都是針對該組件。
(1) 建立Excel.Application對象
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的常規添加操作
例如sheetActive.range("g4").value=date() ‘這裡添加的是時間,當然也可以是你指定的任何資料
(4) Excel中添加資料庫中的紀錄
這裡假設已有一個資料集adoRset,存放由Sql操作產生的統計資料。
num=7 ‘從Excel的第七行開始
do until adoRset.EOF ‘迴圈直至資料集中的資料寫完
strRange="d"&num&":f"&num ‘設定要填寫內容的單元地區
sheetActive.range(strRange).font.size=10 ‘設定字型大小
sheetActive.range(strRange).WrapText=false ‘設定文字回卷
sheetActive.range(strRange).ShrinkToFit=true ‘設定是否自動適應表格單元大小
sheetActive.range(strRange).value=array(adoRset("bookid"),adoRset("bookname"),adoRset("author")) ‘把資料集中的資料填寫到相應的單元中
num=num+1
adoRset.MoveNext
loop
(5) Excel臨時報表檔案的儲存及處理
實際運行中應該注意每次一個使用者進行報表列印時都採用一個臨時的Excel檔案,而不是硬性規定檔案名稱,因為如果用固定的檔案名稱的話,只有第一次產生是成功的,後面的操作都會因為已存在同名檔案而導致失敗。所以我們需要每次都產生一個臨時的而且不重複的檔案名稱,這裡可以採用自訂的getTemporaryFile()函數由來產生,然後存放在變數filename中,用變數filepos表示這些臨時檔案的路徑。
此外如果這些臨時檔案不處理的話久而久之會成為檔案垃圾,因此在每個使用者提交Excel報表列印請求時要先刪除臨時目錄下所有原先產生的臨時列印檔案。
臨時檔案的處理主要代碼如下:
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\" '要存放列印臨時檔案的臨時目錄
fileName=getTemporaryFile(myFs) '取得一個臨時檔案名稱
myFs.DeleteFile filePos&"*.xls" '刪除該目錄下所有原先產生的臨時列印檔案
set myFs=nothing
Excel臨時檔案的儲存代碼為:
objExcel.ActiveWorkbook.saveas filePos&filename 
(6) 退出Excel應用
objExcel.quit
set objExcel=Nothing
(7) Excel報表的列印
前面的步驟已經產生了Excel報表,下一步進行列印,採用的策略可以有兩種:
方案一:提供上面產生的Excel報表臨時檔案連結給使用者,使用者可以直接點擊在瀏覽器中開啟Excel報表並通過瀏覽器的列印功能進行列印,也可以點擊右鍵然後另存到本地後再作列印等相關處理。
方案二:產生Excel報表後直接在用戶端載入到瀏覽器,當然在沒有完全載入時應該提示“正在載入,請等待”等字樣。
2.3 系統配置與注意事項
雖然以上代碼很簡單,但實際應用不當經常會出現錯誤,所以下面要講到的系統配置和注意事項非常關鍵。
(1) 千萬要保證以上代碼輸入的正確性,否則一旦運行錯誤,Excel對象會滯留記憶體,難以消除,導致下一次調用時速度狂慢,併產生記憶體不可讀寫的Windows錯誤。這時的解決方案就是登出目前使用者,如果還不行,就只能Reset了。
(2) 一定要設定好負責列印功能的asp檔案的許可權。方法是:在IIS管理中,選擇該asp檔案,右鍵然後選“屬性”/“檔案安全性”/"匿名訪問和驗證控制“,在這裡IIS預設是匿名訪問,應該選擇驗證訪問(這裡基本驗證和整合Windows驗證兩種方式均可,但前者不夠安全),這一點無比重要,否則應用當中會出錯的。
(3) 有的時候報表分為多頁,而且我們希望每一頁有相同的表頭,要求表頭每頁都自動列印,可以在Excel模板中進行設定。方法如下:選擇菜單"檔案"/"版面設定"/"工作表",然後在"頂端標題列"輸入你表頭的行數(如:表頭為1-3行即填入:$1:$3)。 
3.總結
以上我們給出了一個採用ASP寫的在B/S模式下實現EXCEL報表的產生與列印的例子,在實際當中已經得到了良好的應用。事實也證明,這個例子的代碼雖然不難寫,但一定要注意系統的配置,這也是無數次失敗後得出的經驗。

-

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.