這里只討論通過Activex的方法,因?yàn)橹挥羞@種方法,才能完全發(fā)揮Excel的所有強(qiáng)大的功能。首先,Labview是有一些自帶的關(guān)于Excel編程的例子的。在find example里search一下,有挺多的,其中有一個(gè)叫write table to XL.vi,我最早就是跟著它學(xué)的。學(xué)了不少,也被誤導(dǎo)了很久,其實(shí)也不能算誤導(dǎo),只是以前沒花時(shí)間去研究。最近在用Labview寫一個(gè)類似ERP一樣的軟件,接觸很多Excel表格,花了些功夫在Excel VBA上,也算比以前有了更多的認(rèn)識(shí)了。先來看看write table to XL這個(gè)程序:這個(gè)程序的目的就是把一個(gè)2維數(shù)組(表格)里的內(nèi)容寫到excel里。從上圖看,步驟大致是這樣的,先打開excel,再打開一個(gè)workbook,然后打開worksheet,這實(shí)際上跟咱們使用excel的過程是一樣的。打開worksheet以后,它還定義了行與列的header,最后才把table里的數(shù)據(jù)寫到excel里。那個(gè)cell value子vi,我是從開始就用它,也像這個(gè)例子一樣,每次寫都是套倆for loop,然后往excel里邊猛寫。最近我才發(fā)現(xiàn),原來有其他的方法,可以一次性寫一個(gè)二維數(shù)組進(jìn)去,非???。其實(shí)想想也是,不至于會(huì)那么傻了。不過也怪VBA里太多的屬性和方法,不容易找。前邊的打開excel workbook和worksheet我就不說了,例子里就有,可以新建一個(gè)workbook和sheet,也可以打開現(xiàn)有的,這個(gè)在excelexample.llb里都能找到。(excelexample在哪里?這個(gè)……,打開這些個(gè)VI,saveas一下就知道在哪里了,ok?)接下來說一下這幾天找到的幾個(gè)方法和屬性。首先是Insert,插入行或者列(就像你在excel里右鍵插入一樣,每次只能一行或者一列,要多行的話,只能多來幾次了,是這樣吧?)在說這個(gè)之前,先說下怎么找這些屬性和方法,在Excel里,打開VB編輯器(工具-》宏-》VB 編輯器,excel2007是在菜單開發(fā)工具下,我用的是Excel2007),打開以后看VB語言參考,重點(diǎn)就是里邊的方法和屬性,對(duì)應(yīng)在Labview里邊的Property和Method節(jié)點(diǎn)。help里可以搜索,輸入insert,可以看到很多,沒辦法,不熟悉只能一個(gè)一個(gè)看咯??吹絩ange.insert方法以后,去和Labview的比對(duì)一下。可以看到這就是我們需要的方法了。因?yàn)楦姆椒ㄊ窃赗ange下的,所以要先打開相應(yīng)的range,才能用Insert,這就相當(dāng)于我們?cè)贓xcel里,需要在哪里插入一樣的道理。而Shift參數(shù),看VBA里的描述,它是一個(gè)常量,是指定單元格的移動(dòng)方向,點(diǎn)XLInsertShiftDirection就可以看到這個(gè)常量的數(shù)值,在這里我就不貼圖了。接下來講最有成就感的發(fā)現(xiàn),如何一次性讀取或?qū)懭胍欢ǚ秶ㄈ舾尚腥舾闪校┑臄?shù)據(jù)?當(dāng)然不能用cell.value來寫了。有的朋友可能已經(jīng)發(fā)現(xiàn)了。就是用Range Value來實(shí)現(xiàn),這一點(diǎn)在VBA里沒有寫清楚,它給的例子還是相當(dāng)于cell value一樣,只是一個(gè)單元格的值,而實(shí)際上,應(yīng)該是你指定的Range里所有單元格的數(shù)值。如上圖,range方法包含兩個(gè)參數(shù)cell1和cell2,所以range這個(gè)范圍就是cell1到cell2的范圍,比如B1到C5,這不就是一個(gè)2維數(shù)組了么?對(duì),就是這樣。Range.value有兩個(gè),一個(gè)get,一個(gè)put,對(duì)應(yīng)于讀和寫。如果cell2不連,那么就是只有一個(gè)單元格的值,那么這時(shí)候出來的就不是2維數(shù)組,而是一個(gè)數(shù),連2維數(shù)組上去就會(huì)出錯(cuò)了。還有其他很多方法和屬性,比如合并、拆分單元格,超鏈接,還有l(wèi)oad,saveas之類的,這些都可以去參考VBA,再自己稍加研究,都是能找到的。