我想做一個軟件:輸入n個(n大于等于2)數(shù)據(jù),隨機(jī)抽取其中的若干個;或者先把數(shù)據(jù)輸入到excel,然后vb調(diào)用excel數(shù)據(jù),進(jìn)行隨機(jī)抽取若干個,如何實(shí)現(xiàn),謝謝!!!本人是菜鳥,望高手賜教.謝謝
熱心網(wǎng)友
1。如何實(shí)現(xiàn)VB與EXCEL的無縫連接 VB 是常用的應(yīng)用軟件開發(fā)工具之一,由于VB的報(bào)表功能有限,而且一旦報(bào)表格式發(fā)生變化,就得相應(yīng)修改程序,給應(yīng)用軟件的維護(hù)工作帶來極大的不便。因?yàn)橛泻芏喑绦騿T現(xiàn)在已經(jīng)充分利用Excel的強(qiáng)大報(bào)表功能來實(shí)現(xiàn)。但由于VB與Excel分別屬于不同的應(yīng)用系統(tǒng),如何把它們有機(jī)地結(jié)合在一起,是一個值得我們研究的課題。 筆者在軟件開發(fā)工作中,對VB的自動化功能和Excel的宏功能進(jìn)行了一定的研究,實(shí)現(xiàn)了VB與Excel的有機(jī)結(jié)合。現(xiàn)提出來與大家探討。 一、VB讀寫Excel表 VB本身的自動化功能可以讀寫Excel表,其方法如下: 1、在工程中引用Microsoft Excel類型庫: 從“工程”菜單中選擇“引用”欄;選擇Microsoft Excel 9。0 Object Library (Excel2000),然后選擇“確定”。表示在工程中要引用Excel類型庫。 2、在通用對象的聲明過程中定義Excel對象: 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對象 Set XlBook = xlApp。Workbooks。Open(“文件名”) ’打開已經(jīng)存在的Excel工作薄文件 xlApp。Visible = True ’設(shè)置Excel對象可見(或不可見) Set xlSheet = xlBook。Worksheets(“表名”) xlSheet。Cells(row,col) = 值 ’給單元格(row,col)賦值 xlSheet。PrintOut ’打印工作表 xlBook。CloseTrue ’關(guān)閉工作薄 xlApp。Quit ’結(jié)束Excel對象 Set xlApp = Nothing ’釋放xlApp對象 xlBook。RunAutoMacros xlAutoOpen ’運(yùn)行Excel啟動宏 xlBook。RunAutoMacros xlAutoClose ’運(yùn)行Excel關(guān)閉宏 4、在運(yùn)用以上VB命令操作Excel表時,除非設(shè)置Excel對象不可見,否則VB程序可繼續(xù)執(zhí)行其它操作,也能夠關(guān)閉Excel,同時也可對Excel進(jìn)行操作。但在Excel操作過程中關(guān)閉Excel對象時,VB無法知道,如果此時使用Excel對象,則VB程序會出現(xiàn)自動化錯誤,形成VB程序無法完全控制Excel狀況,使得VB與Excel脫節(jié)。 二、Excel的宏功能 Excel 提供了一個Visual Basic編輯器,打開Visual Basic編輯器,其中有一工程屬性窗口,點(diǎn)擊右鍵菜單的“插入模塊”,則增加一個“模塊1”,在此模塊中可以運(yùn)用Visual Basic語言編寫函數(shù)和過程并稱之為宏。其中,Excel有兩個自動宏:一個是啟動宏(Sub Auto_Open()),另一個是關(guān)閉宏(Sub Auto_Close())。它們的特性是:當(dāng)用Excel打開含有啟動宏的工作薄時,就會自動運(yùn)行啟動宏,同理,當(dāng)關(guān)閉含有關(guān)閉宏的工作薄時就會自動運(yùn)行關(guān)閉宏。但是通過VB的自動化功能來調(diào)用Excel工作表時,啟動宏和關(guān)閉宏不會自動運(yùn)行,而需要在VB中通過命令 xlBook。RunAutoMacros(xlAutoOpen)和xlBook。RunAutoMacros(xlAutoClose)來運(yùn)行啟動宏和關(guān)閉宏。 三、VB與Excel的相互溝通: 充分利用Excel的啟動宏和關(guān)閉宏,可以實(shí)現(xiàn)VB與Excel的相互溝通,其方法如下: 在Excel的啟動宏中加入一段程序,其功能是在磁盤中寫入一個標(biāo)志文件,同時在關(guān)閉宏中加入一段刪除此標(biāo)志的程序。VB程序在執(zhí)行時通過判斷此標(biāo)志文件存在與否來判斷Excel是否打開,如果此標(biāo)志文件存在,表明Excel對象正在運(yùn)行,應(yīng)該禁止其它程序的運(yùn)行。如果此標(biāo)志文件不存在,表明Excel對象已被關(guān)閉,此時如果要使用Excel對象運(yùn)行,必須重新創(chuàng)建Excel對象。 四、舉例 1、在VB中,建立一個FORM,在其上放置兩個命令按鈕,將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\ ”)= “”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。Worksheet(1) '打開Excel工作表 xlSheet。Activate '激活工作表 xlSheet。Cells(1,1) = “abc” '給單元格1行駛列賦值 xlBook。RunAutoMacros(xlAutoOpen) '運(yùn)行Excel中的啟動宏 Else MsgBox(“Excel已打開”) End If End Sub Private Sub Command2_Click() If Dir(“D:\temp\ ”) “” 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對象 End End Sub 2、在D盤根目錄上建立一個名為temp的子目錄,在temp目錄下建立一個名為“bb。xls”的Excel文件。 3、在“bb。xls”中打開Visual Basic編輯器,在工程窗口中點(diǎn)鼠標(biāo)鍵選擇插入模塊,在模塊中輸入以下程序存盤: Sub auto_open() Open “d:\temp\ ” For Output As #1 Close #1 End Sub Sub auto_close() Kill “d:\temp\ ” End Sub 4、運(yùn)行VB程序,點(diǎn)擊Excel按鈕可以打開Excel系統(tǒng),打開Excel系統(tǒng)后,VB程序和Excel分別屬兩個不同的應(yīng)用系統(tǒng),均可同時進(jìn)行操作,由于系統(tǒng)加了判斷,因此在VB程序中重復(fù)點(diǎn)擊Excel按鈕時會提示Excel已打開。如果在Excel中關(guān)閉Excel后再點(diǎn)Excel按鈕,則會重新打開Excel。而無論Excel打開與否,通過VB程序均可關(guān)閉Excel。這樣就實(shí)現(xiàn)了VB與Excel的無縫連接。2。用VB。NET結(jié)合Excel設(shè)計(jì)統(tǒng)計(jì)生產(chǎn)報(bào)表用EXCEL做企業(yè)生產(chǎn)報(bào)表的理由 Excel表格生成和公式設(shè)置十分強(qiáng)大便利,是一個強(qiáng)有力的信息分析與處理工具。特別是EXCEL的公式、函數(shù)、VBA語言,功能極其強(qiáng)大。我試用過其他電子表格軟件,在功能上和EXCEL根本沒有可比性?! isual Studio ,NET也同樣是MicroSoft的產(chǎn)品,Visual Studio ,NET調(diào)用EXCEL做企業(yè)報(bào)表十分方便。證明當(dāng)時我選Visual Studio ,NET作為首選開發(fā)工具是正確的。 軟件構(gòu)思 先在EXCEL里定制好名為《統(tǒng)計(jì)表》的樣表(模版),,在樣表中設(shè)置好各種格式,填寫好固定項(xiàng)?! ≡诖绑w上放很三個控件,兩個DateTimePicker控件,用來選擇開始統(tǒng)計(jì)時間和結(jié)束統(tǒng)計(jì)時間。一個Button以啟動程序。 軟件欲實(shí)現(xiàn)的功能是:點(diǎn)擊Button1,自動查找符合日期符合日期范圍的生產(chǎn)計(jì)劃工作表,然后利用SortedList統(tǒng)計(jì)各個辦事處的計(jì)劃數(shù)量和未完成數(shù)量,及各個產(chǎn)品型號的計(jì)劃數(shù)量和未完成數(shù)量。再把SortedList的數(shù)據(jù)讀出寫到《統(tǒng)計(jì)表》中。 這里要注意的是,各個生產(chǎn)報(bào)表格式必須規(guī)范統(tǒng)一,因?yàn)槌绦蚴前凑展潭▎卧裎恢米x取數(shù)據(jù)的。 SortedList類 除了具備VB,NET調(diào)用EXCEL的基礎(chǔ)知識外,本例主要用到SortedList類?! ortedList類表示鍵/值對的集合,這些鍵和值按鍵排序并可按照鍵和索引訪問。 SortedList 是 Hashtable 和 Array 的混合。當(dāng)使用 Item 索引器屬性按照元素的鍵訪問元素時,其行為類似于 Hashtable。當(dāng)使用 GetByIndex 或 SetByIndex 按照元素的索引訪問元素時,其行為類似于 Array。 SortedList 在內(nèi)部維護(hù)兩個數(shù)組以將數(shù)組存儲到列表中;即,一個數(shù)組用于鍵,另一個數(shù)組用于相關(guān)聯(lián)的值。每個元素都是一個可作為 DictionaryEntry 對象進(jìn)行訪問的鍵/值對。鍵不能為空引用(Visual Basic 中為 Nothing),但值可以。 SortedList 的容量是列表可擁有的元素?cái)?shù)。隨著向 SortedList 中添加元素,容量通過重新分配按需自動增加??赏ㄟ^調(diào)用 TrimToSize 或通過顯式設(shè)置 Capacity 屬性減少容量?! ortedList 的元素將按照特定的 IComparer 實(shí)現(xiàn)(在創(chuàng)建 SortedList 時指定)或按照鍵本身提供的 IComparable 實(shí)現(xiàn)并依據(jù)鍵來進(jìn)行排序。不論在哪種情況下,SortedList 都不允許重復(fù)鍵。VB,NET結(jié)合EXCEL統(tǒng)計(jì)生產(chǎn)報(bào)表 以下是實(shí)現(xiàn)代碼,供參考。為方便初學(xué)者,部份地方加以注釋?! ‖F(xiàn)在讓我們來試用一下,先選擇開始統(tǒng)計(jì)時間和結(jié)束統(tǒng)計(jì)時間,點(diǎn)擊Button1,程序就自動統(tǒng)計(jì)出各個辦事處的及各個產(chǎn)品的有關(guān)計(jì)劃數(shù)量及未完成數(shù)量,是不是很方便。 。