VB是常用的應(yīng)用軟件開發(fā)工具之一,由于VB的報(bào)表功能有限,而且一但報(bào)表格式發(fā)生變化,就得相應(yīng)修改程序,給應(yīng)用軟件的維護(hù)工作帶來極大的不便。因此有很多程序員現(xiàn)在已經(jīng)充分利用EXECL的強(qiáng)大報(bào)表功來實(shí)現(xiàn)報(bào)表功能。但由于VB與EXCEL由于分別屬于不同的應(yīng)用系統(tǒng),如何把它們有機(jī)地結(jié)合在一起,是一個(gè)值得我們研究的課題。
創(chuàng)新互聯(lián)建站是專業(yè)的東寶網(wǎng)站建設(shè)公司,東寶接單;提供成都網(wǎng)站建設(shè)、網(wǎng)站制作,網(wǎng)頁設(shè)計(jì),網(wǎng)站設(shè)計(jì),建網(wǎng)站,PHP網(wǎng)站建設(shè)等專業(yè)做網(wǎng)站服務(wù);采用PHP框架,可快速的進(jìn)行東寶網(wǎng)站開發(fā)網(wǎng)頁制作和功能擴(kuò)展;專業(yè)做搜索引擎喜愛的網(wǎng)站,專業(yè)的做網(wǎng)站團(tuán)隊(duì),希望更多企業(yè)前來合作!
一、 VB讀寫EXCEL表:
VB本身提自動(dòng)化功能可以讀寫EXCEL表,其方法如下:
1、在工程中引用Microsoft Excel類型庫:
從"工程"菜單中選擇"引用"欄;選擇Microsoft Excel 9.0 Object Library(EXCEL2000),然后選擇"確定"。表示在工程中要引用EXCEL類型庫。
2、在通用對(duì)象的聲明過程中定義EXCEL對(duì)象:
Dim xlApp As Excel.Application
Dim xlBook As Excel.WorkBook
Dim xlSheet As Excel.Worksheet
3、在程序中操作EXCEL表常用命令:
Set xlApp = CreateObject("Excel.Application") '創(chuàng)建EXCEL對(duì)象
Set xlBook = xlApp.Workbooks.Open("文件名") '打開已經(jīng)存在的EXCEL工件簿文件
xlApp.Visible = True '設(shè)置EXCEL對(duì)象可見(或不可見)
Set xlSheet = xlBook.Worksheets("表名") '設(shè)置活動(dòng)工作表
xlSheet.Cells(row, col) =值 '給單元格(row,col)賦值
xlSheet.PrintOut '打印工作表
xlBook.Close (True) '關(guān)閉工作簿
xlApp.Quit '結(jié)束EXCEL對(duì)象
Set xlApp = Nothing '釋放xlApp對(duì)象
xlBook.RunAutoMacros (xlAutoOpen) '運(yùn)行EXCEL啟動(dòng)宏
xlBook.RunAutoMacros (xlAutoClose) '運(yùn)行EXCEL關(guān)閉宏
4、在運(yùn)用以上VB命令操作EXCEL表時(shí),除非設(shè)置EXCEL對(duì)象不可見,否則VB程序可繼續(xù)執(zhí)行其它操作,也能夠關(guān)閉EXCEL,同時(shí)也可對(duì)EXCEL進(jìn)行操作。但在EXCEL操作過程中關(guān)閉EXCEL對(duì)象時(shí),VB程序無法知道,如果此時(shí)使用EXCEL對(duì)象,則VB程序會(huì)產(chǎn)生自動(dòng)化錯(cuò)誤。形成VB程序無法完全控制EXCEL的狀況,使得VB與EXCEL脫節(jié)。
二、 EXCEL的宏功能:
EXCEL提供一個(gè)Visual Basic編輯器,打開Visual Basic編輯器,其中有一工程屬性窗口,點(diǎn)擊右鍵菜單的"插入模塊",則增加一個(gè)"模塊1",在此模塊中可以運(yùn)用Visual Basic語言編寫函數(shù)和過程并稱之為宏。其中,EXCEL有兩個(gè)自動(dòng)宏:一個(gè)是啟動(dòng)宏(Sub Auto_Open()),另一個(gè)是關(guān)閉宏(Sub Auto_Close())。它們的特性是:當(dāng)用EXCEL打含有啟動(dòng)宏的工簿時(shí),就會(huì)自動(dòng)運(yùn)行啟動(dòng)宏,同理,當(dāng)關(guān)閉含有關(guān)閉宏的工作簿時(shí)就會(huì)自動(dòng)運(yùn)行關(guān)閉宏。但是通過VB的自動(dòng)化功能來調(diào)用EXCEL工作表時(shí),啟動(dòng)宏和關(guān)閉宏不會(huì)自動(dòng)運(yùn)行,而需要在VB中通過命令xlBook.RunAutoMacros (xlAutoOpen)和xlBook.RunAutoMacros (xlAutoClose) 來運(yùn)行啟動(dòng)宏和關(guān)閉宏。
三、 VB與EXCEL的相互勾通:
充分利用EXCEL的啟動(dòng)宏和關(guān)閉宏,可以實(shí)現(xiàn)VB與EXCEL的相互勾通,其方法如下:
在EXCEL的啟動(dòng)宏中加入一段程序,其功能是在磁盤中寫入一個(gè)標(biāo)志文件,同時(shí)在關(guān)閉宏中加入一段刪除此標(biāo)志文件的程序。VB程序在執(zhí)行時(shí)通過判斷此標(biāo)志文件存在與否來判斷EXCEL是否打開,如果此標(biāo)志文件存在,表明EXCEL對(duì)象正在運(yùn)行,應(yīng)該禁止其它程序的運(yùn)行。如果此標(biāo)志文件不存在,表明EXCEL對(duì)象已被用戶關(guān)閉,此時(shí)如果要使用EXCEL對(duì)象運(yùn)行,必須重新創(chuàng)建EXCEL對(duì)象。
四、舉例:
1、在VB中,建立一個(gè)FORM,在其上放置兩個(gè)命令按鈕,將Command1的Caption屬性改為EXCEL,Command2的Caption屬性改為End。然后在其中輸入如下程序:
Dim xlApp As Excel.Application '定義EXCEL類
Dim xlBook As Excel.Workbook '定義工件簿類
Dim xlsheet As Excel.Worksheet '定義工作表類
Private Sub Command1_Click() '打開EXCEL過程
If Dir("D:\temp\excel.bz") = "" Then '判斷EXCEL是否打開
Set xlApp = CreateObject("Excel.Application") '創(chuàng)建EXCEL應(yīng)用類
xlApp.Visible = True '設(shè)置EXCEL可見
Set xlBook = xlApp.Workbooks.Open("D:\temp\bb.xls") '打開EXCEL工作簿
Set xlsheet = xlBook.Worksheets(1) '打開EXCEL工作表
xlsheet.Activate '激活工作表
xlsheet.Cells(1, 1) = "abc" '給單元格1行駛列賦值
xlBook.RunAutoMacros (xlAutoOpen) 運(yùn)行EXCEL中的啟動(dòng)宏
Else
MsgBox ("EXCEL已打開")
End If
End Sub
Private Sub Command2_Click()
If Dir("D:\temp\excel.bz") "" Then '由VB關(guān)閉EXCEL
xlBook.RunAutoMacros (xlAutoClose) '執(zhí)行EXCEL關(guān)閉宏
xlBook.Close (True) '關(guān)閉EXCEL工作簿
xlApp.Quit '關(guān)閉EXCEL
End If
Set xlApp = Nothing '釋放EXCEL對(duì)象
End
End Sub
2、在D盤根目錄上建立一個(gè)名為Temp的子目錄,在Temp目錄下建立一個(gè)名為"bb.xls"的EXCEL文件。
3、在"bb.xls"中打開Visual Basic編輯器,在工程窗口中點(diǎn)鼠標(biāo)鍵選擇插入模塊,在模塊中輸入入下程序存盤:
Sub auto_open()
Open "d:\temp\excel.bz" For Output As #1 '寫標(biāo)志文件
Close #1
End Sub
Sub auto_close()
Kill "d:\temp\excel.bz" '刪除標(biāo)志文件
End Sub
4、運(yùn)行VB程序,點(diǎn)擊EXCEL按鈕可以打開EXCEL系統(tǒng),打開EXCEL系統(tǒng)后,VB程序和EXCEL分別屬兩個(gè)不同的應(yīng)用系統(tǒng),均可同時(shí)進(jìn)行操作,由于系統(tǒng)加了判斷,因此在VB程序中重復(fù)點(diǎn)擊EXCEL按鈕時(shí)會(huì)提示EXCEL已打開。如果在EXCEL中關(guān)閉EXCEL后再點(diǎn)EXCEL按鈕,則會(huì)重新打開EXCEL。而無論EXCEL打開與否,通過VB程序均可關(guān)閉EXCEL。這樣就實(shí)現(xiàn)了VB與EXCEL的無縫連接。
分類: 電腦/網(wǎng)絡(luò) 程序設(shè)計(jì) 其他編程語言
問題描述:
在SQL數(shù)據(jù)庫里已有一個(gè)現(xiàn)成的空數(shù)據(jù)表(只有字段、沒有數(shù)據(jù)),請(qǐng)問高手,怎樣在VB.NET中用SQL語句把該數(shù)據(jù)庫中的那個(gè)表復(fù)制一個(gè)到該數(shù)據(jù)庫(字段不變、數(shù)據(jù)為空)只是把數(shù)據(jù)表的名改了?
謝謝!謝謝!
解析:
select * into 新表 from 舊表
使用 SELECT INTO 插入行
SELECT INTO 語句創(chuàng)建一個(gè)新表,并用 SELECT 的結(jié)果集填充該表。新表的結(jié)構(gòu)由選擇列表中表達(dá)式的特性定義,例如:
SELECT Shippers.*, Link.Address, Link.City,
Link.Region, Link.PostalCode
INTO NewShippers
FROM Shippers
JOIN LinkServer.DB.dbo.Shippers AS Link
ON (Shippers.ShipperID = Link.ShipperID)
SELECT INTO 可將幾個(gè)表或視圖中的數(shù)據(jù)組合成一個(gè)表。也可用于創(chuàng)建一個(gè)包含選自鏈接服務(wù)器的數(shù)據(jù)的新表。
轉(zhuǎn)換表格的時(shí)候應(yīng)該有選項(xiàng)的(光標(biāo)一般放置在外層表格區(qū)域),如圖,取消 轉(zhuǎn)換嵌套表格。
當(dāng)然,對(duì)于特別復(fù)雜及不規(guī)則的表格(粘貼過程中也可能導(dǎo)致表格錯(cuò)亂),用FRONTPAGE調(diào)整一下也是不錯(cuò)的主意。
參考文獻(xiàn):OFFICE XP測(cè)試
首先在項(xiàng)目的VB.NET界面,使用菜單【項(xiàng)目】--【添加引用】--【COM】
選擇 ?Microsoft ADO Ext. 2.x for DDL and Security
然后單擊【確定】,完成引用。
完整代碼如下:
Imports?ADOX
Public?Class?Form1
Private?Sub?Button1_Click(ByVal?sender?As?System.Object,?ByVal?e?As?System.EventArgs)?Handles?Button1.Click
'創(chuàng)建空的access數(shù)據(jù)庫文件--數(shù)據(jù)庫文件.mdb,密碼為123
Dim?Mycat?As?Catalog?=?New?Catalog()
Mycat.Create("Provider=Microsoft.Jet.OLEDB.4.0;Jet?OLEDB:Engine?Type=5;Data?Source=?數(shù)據(jù)庫文件.mdb;Jet?OLEDB:Database?Password=123")
'以下代碼創(chuàng)建一個(gè)名為“實(shí)驗(yàn)數(shù)據(jù)表”
Dim?MyTable?As?ADOX.Table?=?New?ADOX.Table?????????'定義新表
MyTable.Name?=?"實(shí)驗(yàn)數(shù)據(jù)表"????'表命名
'給表“實(shí)驗(yàn)數(shù)據(jù)表”?創(chuàng)建一個(gè)字符串字段,字段名“姓名”
MyTable.Columns.Append("姓名",?,?ADOX.DataTypeEnum.adWChar)
'給表“實(shí)驗(yàn)數(shù)據(jù)表”?創(chuàng)建一個(gè)整數(shù)字段,字段名“學(xué)號(hào)”
MyTable.Columns.Append("學(xué)號(hào)",?ADOX.DataTypeEnum.adInteger)????'追加一個(gè)數(shù)字型字段
'給字段“學(xué)號(hào)”創(chuàng)建一個(gè)主鍵“PimaryKey_Field”????????
MyTable.Keys.Append("學(xué)號(hào)",?ADOX.KeyTypeEnum.adKeyPrimary,?"學(xué)號(hào)")
Mycat.Tables.Append(MyTable)?'把所有的新字段追加到表
MyTable?=?Nothing
Mycat?=?Nothing
End?Sub
End?Class