




已阅读5页,还剩8页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
Matlab和Excel混合编程 2011-07-18 21:26:17| 分类: Excel VBA | 标签: |举报 |字号大中小 订阅 MATLAB与Excel的混合编程有两种方式:(1)利用MATLAB提供的Excel Link插件,实现Excel与 MATLAB的数据共享;(2)利用MATLAB提供的Excel生成器,生成dll组件和VBA代码,dll组件可以进行COM生成器组件相似的操作,VBA代码则可以在Excel的Visual Basic编译器中直接使用,可以保存为插件.第一种方法:通过Excel Link实现Excel和MATLAB的数据共享1.Excel Link是一个软件插件,它可将Excel与MATLAB进行集成,通过MATLAB与Excel的链接,用户可以在Excel的工作空间中,利用Excel的宏编程功能,使用MATLAB的数据处理和图形处理功能进行相关操作,同时Excel保证MATLAB和Excel工作空间数据的交换和同步更新。使用Excel Link时,不必脱离Excel环境,而直接在Excel的工作区或者宏操作中调用MATLAB函数,Excel提供了11个函数来实现链接和数据操作。2.Excel Link的安装Excel Link对运行环境没有要求,只要能够同时运行MATLAB和Excel即可,大概要200KB的空间,在Windows平台下要求先安装Excel,再安装MATLAB。Excel Link的安装步骤如下:(1)启动Excel,选择菜单栏中的“工具(Tools)”,执行“加载宏”命令;(2)在打开的“加载宏”对话框中单击“浏览”按钮,选择用户自己的matlabtoolboxexlink路径下的excellink.xla文件(可能是隐藏文件),然后单击“确定”按钮。(3)返回“加载宏”窗口,此时已经选中了“Excel link”选项,单击“确定”按钮;(4)重新启动Excel就可以看到多一行“Spreadsheet link EX”工具栏。3.设置Excle link的启动方式在启动Excle时,如果不希望同时启动Excel link和Matlab,在Excel数据表单元中输入“=MLAutoStart(no)”。手动启动Excel link和Matlab,在菜单中选择“宏”,在打开的“宏”对话框中输入“MATLABinit”,单击“执行”按钮。在Excel环境中启动或终止Excel link和Matlab,在单元格中输入“=MLOpen()”或“=MLClose()”。4.Excel Link的数据管理函数Excel提供了9个数据管理函数,实现MATLAB与Excel之间的数据复制,并可在Excel中执行MATLAB命令。MATLABfcn() 对于给定的Excel数据,运行MATLAB命令MATLABsub() 对于给定的Excel数据,运行MATLAB命令并指定输出位置MLDeleteMatrix() 删除MATLAB矩阵MLEvalString() 执行MATLAB命令MLGetMatrix() 向Excel数据表中写入MATLAB矩阵的数据内容MLGetVar() 向Excel数据表VBA写入MATLAB矩阵的数据内容MLAppendMatrix() 向MATLAB空间添加Excel数据表的数据MLPutMatrix() 向Excel数据表创建或覆盖MATLAB矩阵MLPutVar() 向Excel数据表VBA创建或覆盖MATLAB矩阵下面详细介绍一下它的用法:(1) Matlabfcn根据给定的Excel数据执行Matlab命令。在工作表中使用时的语法:matlabfcn(command, inputs)参数command,Matlab将执行的命令,命令需要写成“command”(使用双引号引起来)的形式。参数 inputs 传给Matlab命令的变长输入参数列表。列表是包含数据的工作表单元格范围。函数返回单一数值或者是字符串,结果返回到调用函数的单元格中。例如matlabfcn(”sum”,B1:B10);把从B1到B10的单元格中数据相加。(2) Matlabsub根据给定的Excel数据执行Matlab命令,并将结果返回到指定的单元格中。在工作表中的使用语法:matlabsub(command,edat,inputs)command和inputs参数的与matlabfcn相同。参数edat,指定返回值写入在工作表中的位置。如果edat用双引号引起来,则edat必须是单元格地址或范围的名字。如果参数不用引号引起edat的形式,则通过计算获得矩阵名。例如:matlabsub(”sum”,”A1”,B1:B10);把工作表中从单元格B1到B10的数据相加,并将结果返回到单元格A1中。注意:edat指定的位置不能包含matlabsub所在的位置。(3) MLAppendMatrix将Excel工作表中的数据追加到Matlab中指定的矩阵中如果该矩阵不存在,则创建矩阵。在工作表中使用的语法:MLAppendMatrix(var_name,mdat)在宏中使用的语法:MLAppendMatrix var_name,mdat注意要追加的数据维数要和原矩阵中的维数相匹配,否则出错。例如:MLAppendMatrix(”a”,A1:A2);假设矩阵a是个2行3列的矩阵,如下图:将A1:A2中的数据追加到矩阵后,如下图示成为矩阵的第四列,如下图示。单元格B1中是字符a,函数MLAppendMatrix(B1,A1:A2)的作用于MLAppendMatrix(”a”,A1:A2)相同。(4) MLDeleteMatrix删除Matlab空间中指定的矩阵在工作表中使用的语法:MLDeleteMatrix(var_name);在宏中使用的语法:MLDeleteMatrix var_nameVar_name,是要删除的矩阵名,如果矩阵名在引号内“var_name”的形式,则直接指定变量名,如果var_name不用引号引起来,则通过计算获得实际矩阵的名字。例如,单元格B1中的内容为a,MLDeleteMatrix(B1),则表示删除Matlab工作空间的矩阵a,它等价于MLDeleteMatrix(a)(5) MLEvalString将命令(写成字符串的形式)传到Matlab中执行。在工作表中使用的语法:MLEvalString(command);在宏中使用的语法:MLEvalString command参数command如果是用引号引起来”command”的形式,则是直接指定命令;如果不用引号引起来command的形式,则command必须是包含了命令字符串的工作表的单元格地址或者是范围。例如:MLEvalString(”b=magic(4)”);表示在Matlab中执行命令b=magic(4);(6) MLGetMatrix将指定的Matlab矩阵写入到Excel工作表中的指定位置。在工作表中使用的语法:MLGetMatrix(var_name,edat)在宏中使用的语法:MLGetMatrix var_name,edat参数Var_name,是要写入工作表的矩阵名,如果矩阵名在引号内“var_name”的形式,则直接指定变量名,如果var_name不用引号引起来,则通过计算获得实际矩阵的名字。参数edat指定了矩阵写入工组表的位置。如果参数是用引号引起”edat”的形式,则是直接指定矩阵名,如果参数不用引号引起edat的形式,则通过计算获得矩阵名。例如:MLGetMatrix(”a”,”sheet1!B1”);将矩阵a写入工作表sheet1以单元格B1起始的位置,如果a是一个2行3列的矩阵,则矩阵占据sheet1的B1到D2的空间。如果在A1中有字符串a,则MLGetMatrix(A1,” sheet1!C1”)的作用与MLGetMatrix(”a”,”sheet1!C1”)相同。(7) MLGetVar将MatLab矩阵传送给Excel VBA变量,只能在宏子例程中使用。使用语法:MLGetVar ML_var_name,VBA_var_name参数ML_var_name是将获取的矩阵名。如果矩阵名在引号内“ML_var_name”的形式,则直接指定变量名,如果ML_var_name不用引号引起来,则通过计算获得实际矩阵的名字。参数VBA_var_name,将其Matlab矩阵数据传给的VBA变量名,不用引号将其引起来。例如:Sub Fetch()MLGetVar J, DataJEnd Sub表示将Matlab矩阵J的数据写入到VBA变量DataJ中。(8) MLPutMatrix用指定位置的Excel工作表中的数据,创建或者覆盖Matlab矩阵。在工作表中使用的语法:MLPutMatrix(var_name,mdat)在宏中使用的语法:MLPutString var_name,mdat参数var_name是将有被创建或者被覆盖的矩阵名。如果指定的矩阵不存在,则创建该矩阵,如果矩阵已经存在,则覆盖该矩阵。参数mdat,指定工作表中的位置。例如:工作表中有A1到C2的数据,使用函数MLPutMatrix(”c”,A1:C2),则可以将这些数据写到Matlab矩阵c中。注意:如果修改工作表中的数据,则Matlab中的矩阵相应发生变化。如果把数据剪切到别的地方,如D1到F2,则函数MLPutMatrix(”c”,A1:C2)会自动更改为MLPutMatrix(”c”,D1:F2)(9) MLPutVar使用VBA变量的数据创建或者覆盖Matlab 矩阵。只能在宏子例程中使用。使用语法:MLPutVar ML_var_name,VBA_var_name参数ML_var_name是将被创建或覆盖的矩阵名。如果矩阵名在引号内“ML_var_name”的形式,则直接指定变量名,如果ML_var_name不用引号引起来,则通过计算获得实际矩阵的名字。参数VBA_var_name,将其数据传给Matlab矩阵的VBA变量名,不用引号将其引起来。如果VBA_var_name变量包含字符串的数据,则输出到Matlab为元胞数组格式。例如:Sub Put()MLPutVar K, DataKEnd Sub用VBA变量DataK中的数据创建或着覆盖Matlab矩阵K。5. 补充使用Excel Link的注意事项(1)Excel工作表通常以“”作为起始标记,例如matlabfcn(sum,B1:B10);(2)大多数的Excel Link函数中有两种定义变量的方式:直接定义,即将变量用双引号标记则是直接定义变量,例如MLGetMatrix(”bonds”,”sheet1!C1”),其中bonds是直接定义的变量;间接定义,函数中的不用双引号的工作表单元地址或行列名称被看作是间接变量,函数对其指引的内容进行操作。工作表单元地址可以包含页表序号,例如MLDeleteMatrix(B1);单元格B1中的内容为a,则相当于执行MLDeleteMatrix(”a”);(3)建议使用Excel Link的自动计算模式。如果在手动计算模式下使用MLGetMatrix函数,当在单元格中输入完函数等式时,需要按F9键执行,而按下F9键将有可能引起其他工作表函数的重复执行,产生不可预料的后果。设置Excel Link自动计算模式方法如下:在Excel“工具”菜单的“选项”,选择重新计算标签。(4)如果需要在工作表中重新计算Excel Link函数,最好按F2键和回车键单步执行每个函数。(5)如果在MLGetMatrix函数中使用了单元的直接地址,那么当删除了行或列或者将函数从其他单元复制到新的单元后,一定要重新修改地址。Excel Link不能自动改变MLGetMatrix中的地址。(6)在打开一个包含ExcelLink函数的Excel数据表的时候,Excel会自动从上到下,从左到右地执行这些函数,所有有可能出现如“#COMMAND!”或“#NONEXIST”等Excel错误提示,只需关闭所有Matlab图形窗口,然后按F2键并回车重新单步执行单元格里地函数就可以了。6. 在工作表和在宏中使用ExcelLink的例子例1 :(在工作表中使用ExcelLink)如下图所示:使用mlopen()函数启动Matlab,使用mlevalstring(load census)载入matlab自带的数据文件census,其中包含矩阵cdate和pop。使用mlgetmatrix(cdate,E1),将Matlab空间的矩阵cdata写入到工作表中以E1开始的位置;mlgetmatrix(pop,F1);将Matlab空间的矩阵pop写入到工作表中以F1开始的位置;mlputmatrix(x,E1:E21)mlputmatrix(y,F1:F21);将E1到E21中的数据以及F1到F21中的数据分别写入到Matlab空间的矩阵变量x和y中。mlevalstring(z=x-mean(x)./std(x)mlevalstring(p2,s2=polyfit(z,y,2)mlevalstring(pop2,de12=polyval(p2,z,s2) 根据所给的数据拟合多项式并进行偏差计算。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编辑器,操作如下图示: 然后在工程管理器中插入模块,在模块代码区域写下如下代码:Function excellinktest()MLOpenmlevalstring load censusmlgetmatrix cdate, E1mlgetmatrix pop, F1mlputmatrix x, Range(E1:E21)mlputmatrix y, Range(F1:F21)Ma
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 拆迁项目环保责任及补偿协议
- 文化活动中心吧台租赁与经营合同
- 网络广告推广全程代理合同
- 肿瘤患者防跌倒坠床健康宣教
- 环保产业厂房租赁合同及污染治理协议
- 场营销行业独家代理权保密协议模板
- 商业地产物业租赁与运营管理合同
- 茶叶种植技术承包与品牌合作协议书
- 重症脑梗死的护理措施
- 大数据产业房产典押融资协议
- 车间工艺报警管理制度
- 中建二测2025题库
- 制造业生产线质量管理措施
- 东方经(已经排好版)
- DB14-T 3225-2025 煤矸石生态回填环境保护技术规范
- 福建省厦门市2022-2023学年高二下学期质量检测生物试题(解析版)
- 2025年燃气轮机值班员职业技能知识考试题库
- 2025年山西焦煤西山煤电集团公司招聘笔试参考题库含答案解析
- 催收合规培训
- 湖南中医药大学湘杏学院《民族地区社会工作》2023-2024学年第一学期期末试卷
- 重力式混凝土挡土墙施工方案
评论
0/150
提交评论