日韩黑丝制服一区视频播放|日韩欧美人妻丝袜视频在线观看|九九影院一级蜜桃|亚洲中文在线导航|青草草视频在线观看|婷婷五月色伊人网站|日本一区二区在线|国产AV一二三四区毛片|正在播放久草视频|亚洲色图精品一区

分享

用Excel Link實現(xiàn)Excel與Matlab混合編程

 fanssk 2013-11-23

Excel Link是一個在Windows環(huán)境下實現(xiàn)Excel與Matlab進行鏈接的插件。通過連接Excel和Matlab,用戶可以在Excel工作表空間和宏編程工具中使用Matlab的數(shù)值計算,圖形處理等功能,不需要脫離Excel環(huán)境。同時由Excel Link來保證兩個工作環(huán)境中的數(shù)據(jù)交換和同步更新。

1. Excel Link的安裝和和設置
首先,在系統(tǒng)中安裝Excel軟件。然后安裝Matlab和Excel Link,用Matlab安裝盤開始安裝,選擇自定義安裝中,在選中組件ExcelLink,如下圖所示:


安裝完Excel Link后還需要在Excel中進行一些設置后才能使用。
啟動Excel,選擇菜單“工具”項下的“加載宏”項,彈出如下對話框:


選中Excel Link項。如果該項不存在,則通過瀏覽目錄,在目錄%MATLAB%toolboxexlink下找到excllink.xla文件,如下圖示,并確定。


選中ExcelLink項并確定后,在Excel中多了一個Excel Link工具條,如下圖示:


經(jīng)過以上的設置后就可以開始使用Excel Link了。

2. ExcelLink連接管理函數(shù)
(1) Matlabinit
該函數(shù)只能在宏子例程中使用。初始化ExcelLink和啟動Matlab進程。只有在MLAutoStart函數(shù)中使用“no”參數(shù),才需要手動使用Matlabinit來初始化ExcelLink和啟動Matlab進程,
如果使用參數(shù)“yes”,則Matlabinit是自動執(zhí)行的。
使用語法:Matlabinit
 
(2) MLAutoStart
設置自動啟動Matlab和ExcelLink。
在工作表中的使用語法:
MLAutoStart("yes")
MLAutoStart("no")
在宏中的使用語法:
MLAutoStart "yes"
MLAutoStart "no"
使用“yes”參數(shù),則當Excel啟動時,自動啟動Matlab和ExcelLink;如果使用參數(shù)“no”,則當Excel啟動時,不啟動Matlab和ExcelLink。如果在此之前它們已經(jīng)啟動,則無任何影響。
 
(3) MLClose
終止Matlab進程并刪除Matlab工作空間的所有變量。并通知Excel,Matlab不再運行。
在工作表中的使用語法:
MLClose()
在宏中的使用語法:
MLClose
(4) MLOpen
啟動Matlab進程。如果Matlab進程已經(jīng)啟動,則MLOpen函數(shù)不進行任何操作。在使用MLClose關閉Matlab進程后使用MLOpen來重新啟動Matlab。
在工作表中的使用語法:
MLOpen()
在宏中的使用語法:
MLOpen

 

 


3. ExcelLink數(shù)據(jù)管理函數(shù)
(1) Matlabfcn
根據(jù)給定的Excel數(shù)據(jù)執(zhí)行Matlab命令。
在工作表中使用時的語法:
  matlabfcn(command, inputs)
參數(shù)command,Matlab將執(zhí)行的命令,命令需要寫成“command”(使用雙引號引起來)的形式。
參數(shù) inputs 傳給Matlab命令的變長輸入?yún)?shù)列表。列表是包含數(shù)據(jù)的工作表單元格范圍。
函數(shù)返回單一數(shù)值或者是字符串,結果返回到調(diào)用函數(shù)的單元格中。
例如matlabfcn(”sum”,B1:B10);把從B1到B10的單元格中數(shù)據(jù)相加,如下圖示:


 并將結果返回到當前的活動單元格。即A11,結果如下圖。


(2) Matlabsub
根據(jù)給定的Excel數(shù)據(jù)執(zhí)行Matlab命令,并將結果返回到指定的單元格中。
在工作表中的使用語法:
matlabsub(command,edat,inputs)
command和inputs參數(shù)的與matlabfcn相同。
參數(shù)edat,指定返回值寫入在工作表中的位置。如果edat用雙引號引起來,則edat必須是單元格地址或范圍的名字。如果參數(shù)不用引號引起edat的形式,則通過計算獲得矩陣名。
例如:matlabsub(”sum”,”A1”,B1:B10);把工作表中從單元格B1到B10的數(shù)據(jù)相加,并將結果返回到單元格A1中。
注意:edat指定的位置不能包含matlabsub所在的位置。
(3) MLAppendMatrix
將Excel工作表中的數(shù)據(jù)追加到Matlab中指定的矩陣中如果該矩陣不存在,則創(chuàng)建矩陣。
在工作表中使用的語法:
MLAppendMatrix(var_name,mdat)
在宏中使用的語法:
MLAppendMatrix var_name,mdat
注意要追加的數(shù)據(jù)維數(shù)要和原矩陣中的維數(shù)相匹配,否則出錯。
例如:MLAppendMatrix(”a”,A1:A2);假設矩陣a是個2行3列的矩陣,如下圖:
 


將A1:A2中的數(shù)據(jù)追加到矩陣后,如下圖示
 


成為矩陣的第四列,如下圖示。


單元格B1中是字符a,函數(shù)MLAppendMatrix(B1,A1:A2)的作用于MLAppendMatrix(”a”,A1:A2)相同。

(4) MLDeleteMatrix
刪除Matlab空間中指定的矩陣
在工作表中使用的語法:
MLDeleteMatrix(var_name);
在宏中使用的語法:
MLDeleteMatrix var_name
Var_name,是要刪除的矩陣名,如果矩陣名在引號內(nèi)“var_name”的形式,則直接指定變量名,如果var_name不用引號引起來,則通過計算獲得實際矩陣的名字。
例如,單元格B1中的內(nèi)容為a,MLDeleteMatrix(B1),則表示刪除Matlab工作空間的矩陣a,它等價于MLDeleteMatrix(”a”)
(5) MLEvalString
將命令(寫成字符串的形式)傳到Matlab中執(zhí)行。
在工作表中使用的語法:
MLEvalString(command);
在宏中使用的語法:
MLEvalString command
參數(shù)command如果是用引號引起來”command”的形式,則是直接指定命令;如果不用引號引起來command的形式,則command必須是包含了命令字符串的工作表的單元格地址或者是范圍。
例如:MLEvalString(”b=magic(4)”);
表示在Matlab中執(zhí)行命令b=magic(4);
(6) MLGetMatrix
將指定的Matlab矩陣寫入到Excel工作表中的指定位置。
在工作表中使用的語法:
MLGetMatrix(var_name,edat)
在宏中使用的語法:
MLGetMatrix var_name,edat
參數(shù)Var_name,是要寫入工作表的矩陣名,如果矩陣名在引號內(nèi)“var_name”的形式,則直接指定變量名,如果var_name不用引號引起來,則通過計算獲得實際矩陣的名字。
參數(shù)edat指定了矩陣寫入工組表的位置。如果參數(shù)是用引號引起”edat”的形式,則是直接指定矩陣名,如果參數(shù)不用引號引起edat的形式,則通過計算獲得矩陣名。
例如:MLGetMatrix(”a”,”sheet1!B1”);
將矩陣a寫入工作表sheet1以單元格B1起始的位置,如果a是一個2行3列的矩陣,則矩陣占據(jù)sheet1的B1到D2的空間。如果在A1中有字符串a(chǎn),則MLGetMatrix(A1,” sheet1!C1”)的作用與MLGetMatrix(”a”,”sheet1!C1”)相同。函數(shù)運行結果如圖示。
 

 

 


(7) MLGetVar
將MatLab矩陣傳送給Excel VBA變量,只能在宏子例程中使用。
使用語法:
MLGetVar ML_var_name,VBA_var_name
參數(shù)ML_var_name是將獲取的矩陣名。如果矩陣名在引號內(nèi)“ML_var_name”的形式,則直接指定變量名,如果ML_var_name不用引號引起來,則通過計算獲得實際矩陣的名字。
參數(shù)VBA_var_name,將其Matlab矩陣數(shù)據(jù)傳給的VBA變量名,不用引號將其引起來。
例如:
Sub Fetch()
MLGetVar "J", DataJ
End Sub
表示將Matlab矩陣J的數(shù)據(jù)寫入到VBA變量DataJ中。
(8) MLPutMatrix
用指定位置的Excel工作表中的數(shù)據(jù),創(chuàng)建或者覆蓋Matlab矩陣。
在工作表中使用的語法:
MLPutMatrix(var_name,mdat)
在宏中使用的語法:
MLPutString var_name,mdat
參數(shù)var_name是將有被創(chuàng)建或者被覆蓋的矩陣名。如果指定的矩陣不存在,則創(chuàng)建該矩陣,如果矩陣已經(jīng)存在,則覆蓋該矩陣。
參數(shù)mdat,指定工作表中的位置。
例如:工作表中有A1到C2的數(shù)據(jù),使用函數(shù)MLPutMatrix(”c”,A1:C2),則可以將這些數(shù)據(jù)寫到Matlab矩陣c中,如下圖示。
 


注意:如果修改工作表中的數(shù)據(jù),則Matlab中的矩陣相應發(fā)生變化。如果把數(shù)據(jù)剪切到別的地方,如D1到F2,則函數(shù)MLPutMatrix(”c”,A1:C2)會自動更改為MLPutMatrix(”c”,D1:F2)
 (9) MLPutVar
使用VBA變量的數(shù)據(jù)創(chuàng)建或者覆蓋Matlab 矩陣。只能在宏子例程中使用。
使用語法:
MLPutVar ML_var_name,VBA_var_name
參數(shù)ML_var_name是將被創(chuàng)建或覆蓋的矩陣名。如果矩陣名在引號內(nèi)“ML_var_name”的形式,則直接指定變量名,如果ML_var_name不用引號引起來,則通過計算獲得實際矩陣的名字。
參數(shù)VBA_var_name,將其數(shù)據(jù)傳給Matlab矩陣的VBA變量名,不用引號將其引起來。
如果VBA_var_name變量包含字符串的數(shù)據(jù),則輸出到Matlab為元胞數(shù)組格式。
例如:
Sub Put()
MLPutVar "K", DataK
End Sub
用VBA變量DataK中的數(shù)據(jù)創(chuàng)建或著覆蓋Matlab矩陣K。

4. 補充使用Excel Link的注意事項
(1) Excel工作表通常以“=”作為起始標記,例如=matlabfcn(”sum”,B1:B10);
(2) 大多數(shù)的Excel Link函數(shù)中有兩種定義變量的方式:直接定義,即將變量用雙引號標記則是直接定義變量,例如MLGetMatrix(”bonds”,”sheet1!C1”),其中bonds是直接定義的變量;間接定義,函數(shù)中的不用雙引號的工作表單元地址或行列名稱被看作是間接變量,函數(shù)對其指引的內(nèi)容進行操作。工作表單元地址可以包含頁表序號,例如MLDeleteMatrix(B1);單元格B1中的內(nèi)容為a,則相當于執(zhí)行MLDeleteMatrix(”a”);
(3) 建議使用Excel Link的自動計算模式。如果在手動計算模式下使用MLGetMatrix函數(shù),當在單元格中輸入完函數(shù)等式時,需要按F9鍵執(zhí)行,而按下F9鍵將有可能引起其他工作表函數(shù)的重復執(zhí)行,產(chǎn)生不可預料的后果。設置Excel Link自動計算模式方法如下:在Excel“工具”菜單的“選項”,選擇重新計算標簽,圖4.2.13。
(4) 如果需要在工作表中重新計算Excel Link函數(shù),最好按F2鍵和回車鍵單步執(zhí)行每個函數(shù)。
(5) 如果在MLGetMatrix函數(shù)中使用了單元的直接地址,那么當刪除了行或列或者將函數(shù)從其他單元復制到新的單元后,一定要重新修改地址。Excel Link不能自動改變MLGetMatrix中的地址。
(6) 在打開一個包含ExcelLink函數(shù)的Excel數(shù)據(jù)表的時候,Excel會自動從上到下,從左到右地執(zhí)行這些函數(shù),所有有可能出現(xiàn)如“#COMMAND!”或“#NONEXIST”等Excel錯誤提示,只需關閉所有Matlab圖形窗口,然后按F2鍵并回車重新單步執(zhí)行單元格里地函數(shù)就可以了。
 


5. 在工作表和在宏中使用ExcelLink的例子
例1 :(在工作表中使用ExcelLink)如下圖所示:
 


使用mlopen()函數(shù)啟動Matlab,
使用mlevalstring("load census")載入matlab自帶的數(shù)據(jù)文件census,其中包含矩陣cdate和pop。
使用mlgetmatrix("cdate","E1"),將Matlab空間的矩陣cdata寫入到工作表中以E1開始的位置;
mlgetmatrix("pop","F1");將Matlab空間的矩陣pop寫入到工作表中以F1開始的位置;
運行結果如下圖所示: 
 


mlputmatrix("x",E1:E21)
mlputmatrix("y",F(xiàn)1:F21)
將E1到E21中的數(shù)據(jù)以及F1到F21中的數(shù)據(jù)分別寫入到Matlab空間的矩陣變量x和y中。
mlevalstring("z=x-mean(x)./std(x)")
mlevalstring("[p2,s2]=polyfit(z,y,2)")
mlevalstring("[pop2,de12]=polyval(p2,z,s2)")
根據(jù)所給的數(shù)據(jù)擬合多項式并進行偏差計算。
mlevalstring("plot(x,y,'+',x,pop2,'g-',…
x,pop2+2*del2,'r:',x,pop2-2*del2,'r:')")
繪出離散點、擬合曲線圖及偏差曲線圖,結果如下圖示:

 


mlclose();
關閉Matlab。

例2:在宏中使用Excel Link
新建一個Excel工作表,打開Visual Basic編輯器,操作如下圖示:

 

 


然后在工程管理器中插入模塊,如下圖:


在模塊代碼區(qū)域?qū)懴氯缦麓a,如下圖:


Function excellinktest()
MLOpen
mlevalstring "load census"
mlgetmatrix "cdate", "E1"
mlgetmatrix "pop", "F1"
mlputmatrix "x", Range("E1:E21")
mlputmatrix "y", Range("F1:F21")
Matlabrequest
mlevalstring "z=(x-mean(x))./std(x)"
mlevalstring "[p2,s2]=polyfit(z,y,2)"
mlevalstring "[pop2,del2]=polyval(p2,z,s2)"
mlevalstring "plot(x,y,'+',x,pop2,'g-',x,pop2+2*del2,'r:',x,pop2-2*del2,'r:')"
End Function
 
選中模塊1,在“工具”菜單,“引用”選項,如下圖示。


彈出引用對話框,選擇Excel Link,如下圖:


確定后,即可運行該程序,結果與例1相同。

    本站是提供個人知識管理的網(wǎng)絡存儲空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點。請注意甄別內(nèi)容中的聯(lián)系方式、誘導購買等信息,謹防詐騙。如發(fā)現(xiàn)有害或侵權內(nèi)容,請點擊一鍵舉報。
    轉藏 分享 獻花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多