top
Loading...
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

作者:http://www.zhujiangroad.com
來源:http://www.zhujiangroad.com
北斗有巢氏 有巢氏北斗