楊曉峰 張 茁
[摘要]使用VB將SQL Server和Excel結(jié)合起來處理數(shù)據(jù)會(huì)得到事半功倍的效果。介紹設(shè)計(jì)一個(gè)VB程序?qū)QL Server中查詢到的數(shù)據(jù)導(dǎo)出生成Excel表格的方法。以解決非專業(yè)人員處理數(shù)據(jù)和閱讀數(shù)據(jù)的問題,也解決SQL Server數(shù)據(jù)發(fā)布需要使用專用的SQL Server管理工具的不便之處。
[關(guān)鍵詞]VB SQL Server Excel表格 數(shù)據(jù)庫
中圖分類號(hào):TP3文獻(xiàn)標(biāo)識(shí)碼:A文章編號(hào):1671-7597(2009)0520058-01
SQL Server作為微軟在Windows系列平臺(tái)上開發(fā)的數(shù)據(jù)庫,一經(jīng)推出就以其易用性得到了很多用戶的青睞。Excel是微軟公司出品的Office系列辦公軟件中的一個(gè)組件,確切地說,它是一個(gè)電子表格軟件,可以用來制作電子表格、完成許多復(fù)雜的數(shù)據(jù)運(yùn)算,進(jìn)行數(shù)據(jù)的分析和預(yù)測(cè)并且具有強(qiáng)大的制作圖表的功能。使用VB將SQL Server和Excel結(jié)合起來處理數(shù)據(jù)會(huì)得到事半功倍的效果。下面將介紹如何設(shè)計(jì)一個(gè)VB程序?qū)QL Server中查詢到的數(shù)據(jù)導(dǎo)出生成Excel表格。
一、利用ADO的數(shù)據(jù)庫訪問組件獲取SQL Server中的數(shù)據(jù)
1.在VB工程中新建一個(gè)模塊LocalInfo,在模塊中定義SqlConn的公共函數(shù)用以建立與SQL Server數(shù)據(jù)庫的連接SqlCn對(duì)象,函數(shù)代碼如下:
Public Function SqlConn(ByVal Ser As String, Data As String, User As String, Pass As String) As Boolean
On Error Resume Next
Set SqlCn = New ADODB.Connection
SqlCn.CursorLocation = adUseClient
SqlCn.ConnectionString = "Provider=SQLOLEDB;Server=" + Ser + ";Database=" + Data + ";User ID='" + User + "';Password='" + Pass + "';"
SqlCn.Open
If Err Then
Err.Clear
SqlConn = False '數(shù)據(jù)庫連接失敗
MsgBox "數(shù)據(jù)庫連接失??!系統(tǒng)不能正常運(yùn)行!" & Chr(13) & Chr(10) & "請(qǐng)進(jìn)入“數(shù)據(jù)庫設(shè)置”重新設(shè)定數(shù)據(jù)庫參數(shù)!" & Chr(13) & Chr(10) & "或與系統(tǒng)管理員聯(lián)系,完成后請(qǐng)重新啟動(dòng)該系統(tǒng)。", vbOKOnly, "系統(tǒng)提示"
Else
SqlConn = True
End If
End Function
其中"Provider=SQLOLEDB;Server=" + Ser + ";Database=" + Data + ";User ID='" + User + "';Password='" + Pass + "';"中的Ser是數(shù)據(jù)庫服務(wù)器的名稱,Data是數(shù)據(jù)庫的名稱,User 和Pass分別用戶名和密碼,上述參數(shù)可以直接賦值也可寫入INI配置文件中調(diào)用。
2.調(diào)用SqlConn函數(shù)建立SqlCn對(duì)象的數(shù)據(jù)庫連接后,創(chuàng)建SqlRs記錄集對(duì)象用以執(zhí)行SQL查詢語句來獲取用戶所需的數(shù)據(jù),以查詢課表信息為例,代碼如下:
Set SqlRs = New ADODB.Recordset'創(chuàng)建ADO記錄集對(duì)象
Sql = "select * from Curriculums where cyears='" & Y34 & "' and cterm='" & T34 & "' and ctname='" & Trim(Rs1!ctname) & "' and csd='單'"
SqlRs.Open Sql, SqlCn'執(zhí)行查詢語句
查詢后的的結(jié)果可利用對(duì)SqlRs記錄集對(duì)象的游標(biāo)操作來完成相關(guān)工作。
二、創(chuàng)建Excel編輯對(duì)象
1.Excel編輯對(duì)象不是Visual Basic 6.0的標(biāo)準(zhǔn)組件,因此需要在工程添加組件,可以通過菜單“工程/引用”項(xiàng)(如圖一),打開“引用”窗口(如圖二),選擇Excel編輯組件“Microsoft Excel 11.0 Object Library”即可。
2.定義和設(shè)置,可以通過VB程序完成對(duì)Excel表格表頭設(shè)計(jì)、字體設(shè)置、單元格設(shè)置等常用操作,首先定義Excel編輯對(duì)象中的3個(gè)對(duì)象表格(Excel.Application)、工作簿(Excel.Workbook)和單元格(Excel.
Worksheet),代碼如下:
Dim xlExcel As New Excel.Application
Dim xlBook As New Excel.Workbook
Dim xlSheet As New Excel.Worksheet
定義好這三個(gè)對(duì)象,再完成Excel表格表頭的設(shè)置,代碼如下:
Set xlBook = xlExcel.Workbooks.Add
Set xlSheet = xlExcel.Worksheets.Add
‘設(shè)定表格中第2行1到8列8個(gè)單元格中的內(nèi)容
xlSheet.Cells(2, 2) = "星期一"
xlSheet.Cells(2, 3) = "星期二"
xlSheet.Cells(2, 4) = "星期三"
xlSheet.Cells(2, 5) = "星期四"
xlSheet.Cells(2, 6) = "星期五"
xlSheet.Cells(2, 7) = "星期六"
xlSheet.Cells(2, 8) = "星期日"
‘設(shè)定表格中第1列3到9行7個(gè)單元個(gè)中的內(nèi)容
xlSheet.Cells(3, 1) = "早操"
xlSheet.Cells(4, 1) = "早自習(xí)"
xlSheet.Cells(5, 1) = "1-2節(jié)"
xlSheet.Cells(6, 1) = "3-4節(jié)"
xlSheet.Cells(7, 1) = "5-6節(jié)"
xlSheet.Cells(8, 1) = "7-8節(jié)"
xlSheet.Cells(9, 1) = "9-10節(jié)"
‘設(shè)定表格中第1行第1列中的內(nèi)容,該項(xiàng)為表格的標(biāo)題
xlSheet.Cells(1, 1)=Me.CombN1.Text & Me.CombQ1.Text & "_" & Trim(Rs1!ccname) & "班課表(單周)"
'設(shè)置標(biāo)題為黑體,18號(hào)
xlSheet.Range(Cells(1, 1), Cells(1, 8)).Characters.Font.Name = "黑體"
xlSheet.Range(Cells(1, 1), Cells(1, 8)).Characters.Font.Size = 18
xlSheet.Range(Cells(1, 1), Cells(1, 8)).Characters.Font.FontStyle = "加粗"
‘合并表格中的第一行中的1到8列
xlSheet.Range(Cells(1, 1), Cells(1, 8)).Merge
‘設(shè)置所有單元格中內(nèi)容為水平居中對(duì)齊
xlSheet.Range(Cells(1, 1), Cells(65536, 256)).HorizontalAlignment = 3
'設(shè)置所有單元格內(nèi)容為垂直居中對(duì)齊
xlSheet.Range(Cells(1, 1), Cells(65536, 256)).VerticalAlignment = 2
‘設(shè)置從第2行起所有單元格的字體
xlSheet.Range(Cells(2, 1), Cells(65536, 256)).Characters.Font.Name = "宋體"
‘設(shè)置從第2行起所有單元格的字體大小
xlSheet.Range(Cells(2, 1), Cells(65536, 256)).Characters.Font.Size = 10
在上述程序中標(biāo)題應(yīng)在添加了內(nèi)容后完成合并操作,表格的行與列的索引值是從1開始,行的最大值是65536,列的最大值是256。
3.將查詢到的數(shù)據(jù)到的數(shù)據(jù)添加到Excel表格中,這是一個(gè)較為容易的步驟,方法很多,這里是將查詢到的結(jié)果SqlRs記錄集先放置在表格控件LstXX中,然后再將數(shù)據(jù)循環(huán)的方式取出導(dǎo)入到Excel表格中,此種方法可以提高數(shù)據(jù)的利用率,減少前臺(tái)系統(tǒng)與后臺(tái)數(shù)據(jù)庫的交換次數(shù)。代碼如下:
For a = 1 To 7
LstXX.Row = a
For b = 1 To 7
LstXX3.Col = b
xlSheet.Cells(a + 2, b + 1) = Trim(LstXX.Text)
Next
Next
4.保存已經(jīng)導(dǎo)入數(shù)據(jù)的Excel表格,可根據(jù)用戶設(shè)定Excel文件名。
xlBook.SaveAs "C:XXX班課表(單周).xls"
注意上述步驟后應(yīng)及時(shí)清除對(duì)象釋放內(nèi)存空間。
xlExcel.Quit
Set xlSheet = Nothing
Set xlBook = Nothing
通過上述方法可以將SQL Server中的數(shù)據(jù)導(dǎo)出生成Excel表格,這樣可以解決非專業(yè)人員處理數(shù)據(jù)和閱讀數(shù)據(jù)的問題,也解決了SQL Server數(shù)據(jù)發(fā)布需要使用專用的SQL Server管理工具的不便之處。
參考文獻(xiàn):
[1]啟明工作室編著,《ASP.NET+SQL Server網(wǎng)絡(luò)應(yīng)用系統(tǒng)開發(fā)與實(shí)例》,人民郵電出版社,2005.9.
[2]柳青編著,《VB程序設(shè)計(jì)--面向21世紀(jì)高職高專計(jì)算機(jī)專業(yè)教材》,人民交通出版社,2004.2.
[3]李巖、張瑞雪主編,《SQL Server2005實(shí)用教程》,清華大學(xué)出版社,2008.9.
作者簡(jiǎn)介:
楊曉峰(1976-),男,漢族,江西南昌人,助講,研究方向:職業(yè)教育;張茁(1981-),女,漢族,吉林輝南人,助講,研究方向:職業(yè)教育。