VB與Excel2000實現復雜報表打印
數據庫管理系統的開發人員經常被編制復雜的報表所困擾,VB的水晶報表可以設計簡單的報表,但是設計出的報表缺乏靈活性。我利用VB操作EXCEL2000來生成復雜的報表。
用VB創建外部EXCEL對象
Microsoft Office應用程序提供了一個頂層Application 對象。下面語句顯示了對Microsoft Excel的Application 對象的引用,用這些變量來訪問在EXCEL應用程序中的從屬對象、以及這些對象的屬性和方法。:
| Dim xlApp As Excel.Application Set xlApp = New Excel.Application Set xlApp = CreateObject("Excel.Application") xlApp.Visible = False Set xlBook = xlApp.Workbooks.Open(strDestination) Set xlSheet = xlBook.Worksheets(1) |
用EXCEL 2000設計報表的模版文件
EXCEL 2000是一個非常優秀的創建報表的工具。它提供的單元格任意合并、拆分功能基本上能夠滿足設計復雜報表的要求。它對任意一個單元格的格式隨意控制,因此它為設計復雜報表提供了強大的支持。
根據用戶提供的報表,我們可以很快在EXCEL里生成模版文件。模版文件只是為了滿足用戶多方面的需求而設計的。并且隨著時間和實際情況的變化,表格格式有可能需要改變,我們設計一個模版文件可以“以不變應萬變”了。在程序里我們不要對模版文件進行操作,我們只需要對模版文件的一個拷貝進行操作就行。程序代碼如下:
| Dim strSource, strDestination As String strSource = App.Path & "Excelsdangan.xls" strDestination = App.Path & "ExcelsTemp.xls" FileCopy strSource, strDestination Set mobjExcel = New Excel.Application Set mobjExcel = CreateObject("Excel.Application") mobjExcel.Visible = False Set mobjworkbook = mobjExcel.Workbooks.Open(strDestination) Set xlsheet = mobjworkbook.Worksheets(1) If Not opendatasource() Then MsgBox "不能打開數據源!", , "提示" Unload Me Exit Sub End If Private Function opendatasource() ssql="select shgt_dah,shgt_yth,shgt_ajtm,shgt_chtrq, shgt_shjdw,shgt_wzysh,shgt_tzzhsh,shgt_gdrq,shgt_bz from shgtajb" OpenResultset ssql, mrdors opendatasource = True Exit Function End Function |
生成工作表內容
有了上述兩步工作的鋪墊,我們只要根據模板的格式給各單元格賦值如:
| Do while Not mrdors.Eof i=4 For j=0 to mrdors.rdocolumns.count-2 MobjExcel.Activesheet.cells(i,j+1).value=mrdors.rdocolumns(j).Value Next Mrdors.movenext Loop |
打印報表
生成了工作表后,就可以對EXCEL發出打印指令了。在執行打印操作之前應該對EXCEL臨時文件執行一次保存操作,以免在退出應用程序后EXCEL還提示用戶是否保存已修改的文件。如下語句:
| xlBook.Save xlSheet.PrintOut xlApp.Quit |